<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sun Limited Mt. &#187; PHP</title>
	<atom:link href="http://www.syuhari.jp/blog/archives/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.syuhari.jp/blog</link>
	<description>I love iPhone, CakePHP and WordPress.</description>
	<lastBuildDate>Thu, 22 Jul 2010 02:13:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>IE6 で SSL 接続時に PDF を表示できない</title>
		<link>http://www.syuhari.jp/blog/archives/2022</link>
		<comments>http://www.syuhari.jp/blog/archives/2022#comments</comments>
		<pubDate>Thu, 18 Mar 2010 01:24:34 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[IE6]]></category>
		<category><![CDATA[mPDF]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[pragma]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=2022</guid>
		<description><![CDATA[SSL 接続時に PDF を IE6 で表示できない現象が発生しました。どうやら、IE6 のバグが原因のようです。
[IE] HTTPS URL から Office ドキュメントまたは PDF ファイルを開こうとすると &#8220;ダウンロードできません&#8221; エラーが発生
http://support.microsoft.com/kb/812935/ja

原因は HTTP ヘッダ内に 

Pragma: no-cache;

があると、キャッシュを見に行ってしまうらしい。
この Pragma: no-cache; さえなければ問題は解決できるようだ。
先日紹介した mPDF で作成した PDF を PHP で出力していたので、その出力の前に Pragma ヘッダを送ってやることにしたら、無事解決しました。

include("mpdf/mpdf.php");
$mpdf=new mPDF('sjis', 'A4');
$mpdf->WriteHTML($html);
header("Pragma:");
$mpdf->Output();

しかし、いいかげん IE6 は対象ブラウザから外して欲しいですね。
]]></description>
			<content:encoded><![CDATA[<p>SSL 接続時に PDF を IE6 で表示できない現象が発生しました。どうやら、IE6 のバグが原因のようです。</p>
<p>[IE] HTTPS URL から Office ドキュメントまたは PDF ファイルを開こうとすると &#8220;ダウンロードできません&#8221; エラーが発生<br />
<a href="http://support.microsoft.com/kb/812935/ja" target="_blank" class="liexternal">http://support.microsoft.com/kb/812935/ja</a><br />
<span id="more-2022"></span><br />
原因は HTTP ヘッダ内に </p>
<pre>
Pragma: no-cache;
</pre>
<p>があると、キャッシュを見に行ってしまうらしい。</p>
<p>この Pragma: no-cache; さえなければ問題は解決できるようだ。<br />
先日紹介した <a href="http://www.syuhari.jp/blog/archives/1992" class="liinternal">mPDF</a> で作成した PDF を PHP で出力していたので、その出力の前に Pragma ヘッダを送ってやることにしたら、無事解決しました。</p>
<pre class="php" name="code">
include("mpdf/mpdf.php");
$mpdf=new mPDF('sjis', 'A4');
$mpdf->WriteHTML($html);
header("Pragma:");
$mpdf->Output();
</pre>
<p>しかし、いいかげん IE6 は対象ブラウザから外して欲しいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/2022/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP で HTML から簡単に PDF を作れる mPDF</title>
		<link>http://www.syuhari.jp/blog/archives/1992</link>
		<comments>http://www.syuhari.jp/blog/archives/1992#comments</comments>
		<pubDate>Fri, 19 Feb 2010 03:32:01 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[FPDF]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[mPDF]]></category>
		<category><![CDATA[pdf]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1992</guid>
		<description><![CDATA[帳票などを HTML を表示し、それを PDF にしたいことはよくあります。FPDF などを使えば PHP で PDF を生成することもできますが、結構面倒です。しかし mPDF を使うことにより PHP で簡単に HTML から PDF を生成することが可能です。

インストール
mPDF をインストールします。mPDF のサイトより zip ファイルをダウンロードし、解凍します。それを PHP からインクルードできるディレクトリへアップロードします。今回は mpdf というディレクトリを作りその中にアップロードしました。
アップロード後、tmp ディレクトリと graph_cache ディレクトリに書き込み権限を与えておきます。
mPDF で PDF を生成する
使い方は簡単です。HTML を与えて、出力するだけです。使い方の例は以下のようになります。例として Yahoo!ジャパンのトップページを PDF にしてみました。

include("./mpdf/mpdf.php");
$html = file_get_contents("http://www.yahoo.co.jp");
$mpdf=new mPDF('sjis', 'A4');
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;

変換した PDF はこちらで確認できます。Yahoo! Japanのトップページを PDF 化
例では外部から HTML を読み込んでいますが、要は HTML 文字列を与えればいいので、サーバ内の HTML でも直接 HTML を書いて与えても OK です。外部から [...]]]></description>
			<content:encoded><![CDATA[<p>帳票などを HTML を表示し、それを PDF にしたいことはよくあります。FPDF などを使えば PHP で PDF を生成することもできますが、結構面倒です。しかし mPDF を使うことにより PHP で簡単に HTML から PDF を生成することが可能です。<br />
<span id="more-1992"></span></p>
<h4>インストール</h4>
<p>mPDF をインストールします。<a href="http://mpdf.bpm1.com/" target="_blank" class="liexternal">mPDF</a> のサイトより zip ファイルをダウンロードし、解凍します。それを PHP からインクルードできるディレクトリへアップロードします。今回は mpdf というディレクトリを作りその中にアップロードしました。<br />
アップロード後、tmp ディレクトリと graph_cache ディレクトリに書き込み権限を与えておきます。</p>
<h4>mPDF で PDF を生成する</h4>
<p>使い方は簡単です。HTML を与えて、出力するだけです。使い方の例は以下のようになります。例として Yahoo!ジャパンのトップページを PDF にしてみました。</p>
<pre class="php" name="code">
include("./mpdf/mpdf.php");
$html = file_get_contents("http://www.yahoo.co.jp");
$mpdf=new mPDF('sjis', 'A4');
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;
</pre>
<p>変換した PDF はこちらで確認できます。<a href="http://www.syuhari.jp/blog/wp-content/uploads/2010/02/yahoo.pdf" target="_blank" class="lipdf">Yahoo! Japanのトップページを PDF 化</a></p>
<p>例では外部から HTML を読み込んでいますが、要は HTML 文字列を与えればいいので、サーバ内の HTML でも直接 HTML を書いて与えても OK です。外部から HTML を読み込んだ場合は画像は URL で指定されていれば表示されますが、相対パスで指定されている場合は表示されません。予め HTML を加工しておく必要があるでしょう。サーバ内の HTML の場合は mPDF を実行しているパスから相対パスで読み込めます。</p>
<p>外部 CSS を読み込んでいる場合は次に説明する外部 CSS の適用をする必要があります。</p>
<h4>外部 CSS を読み込み適用する</h4>
<p>内部 CSS はそのまま適用されますが、外部 CSS は読み込んで適用する必要があります。mPDF は HTML も CSS も UTF-8 しか処理できないので、CSS が UTF-8 でない場合は変換しておきます。</p>
<pre class="php" name="code">
$stylesheet = file_get_contents("http://example.com/stylesheet.css" );
// CSS が UTF-8 でない場合は変換しておく
$stylesheet = mb_convert_encoding($stylesheet, "UTF-8");
$mpdf->WriteHTML($stylesheet,1);
</pre>
<h4>ウォーターマークを入れる</h4>
<p>ウォーターマークも簡単に入れられます。結果はこちら <a href="http://www.syuhari.jp/blog/wp-content/uploads/2010/02/draft.pdf" target="_blank" class="lipdf">ウォーターマークが入った PDF</a></p>
<pre class="php" name="code">
include("./mpdf/mpdf.php");
$html = file_get_contents("http://www.yahoo.co.jp");
$mpdf=new mPDF('sjis', 'A4'); 

// ウォーターマークを入れる
$mpdf->SetWatermarkText('DRAFT');
$mpdf->watermark_font = 'DejaVuSansCondensed';
$mpdf->showWatermarkText = true;

$mpdf->WriteHTML($html);

$mpdf->Output();
exit;
</pre>
<h4>サーバに PDF を保存する</h4>
<p>サーバに保存する場合は最後の Output メソッドを以下のようにします。</p>
<pre class="php" name="code">
$mpdf->Output("hoge.pdf", 'F');
</pre>
<h4>その他</h4>
<p>Yahoo! のトップページの変換結果をどうみるかはそれぞれでしょう。しかし、PDF 変換が求められるのは帳票などが多くその程度の HTML から PDF への変換であれば十分実用に耐えうると思います。FPDF で PDF 生成処理を書くことを考えれば、オススメです。</p>
<p>ダウンロードした中にある examples というディレクトリに多くのサンプルコードがあります。また、オンラインドキュメントもあります。<br />
<a href="http://mpdf1.com/manual/index.php" target="_blank" class="liexternal">mPDF Manual</a></p>
<p>これらは見ることによりやりたいことはだいたいできるかと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1992/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SQL のように HTML を解析できる htmlSQL</title>
		<link>http://www.syuhari.jp/blog/archives/1987</link>
		<comments>http://www.syuhari.jp/blog/archives/1987#comments</comments>
		<pubDate>Wed, 17 Feb 2010 08:42:53 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[htmlSQL]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1987</guid>
		<description><![CDATA[「真面目にエロサイトを作ってみた」というエントリで紹介されていた、スクレイピングに使われている htmlSQL に興味を持ったので試しに使ってみた。
jonasjohn.de: htmlSQL &#8211; a PHP class to query the web by an SQL like language

準備
上記サイトよりダウンロードして解凍した中に入っている &#8220;snoopy.class.php&#8221; と &#8220;htmlsql.class.php&#8221; という2つのファイルを使用する PHP からインクルードできるところに入れます。
使い方
実際に Yahoo! のトップページからヤフーニュースのトピックスのニュースタイトルを取ってくるコードを書いてみました。
コードを見てもらえば分かるようにまさに SQL を発行している感じです。

include_once("snoopy.class.php");
include_once("htmlsql.class.php");

$wsql = new htmlsql();

// Yahoo はブラウザに UA によって HTML が変わるので UA を偽装
$wsql->set_user_agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)');

// URL で接続
if (!$wsql->connect('url', 'http://www.yahoo.co.jp/')){
    print 'Error while connecting: [...]]]></description>
			<content:encoded><![CDATA[<p>「<a href="http://astrodeo.com/blog/archives/257" target="_blank" class="liexternal">真面目にエロサイトを作ってみた</a>」というエントリで紹介されていた、スクレイピングに使われている htmlSQL に興味を持ったので試しに使ってみた。</p>
<p><a href="http://www.jonasjohn.de/lab/htmlsql.htm" target="_blank" class="liexternal">jonasjohn.de: htmlSQL &#8211; a PHP class to query the web by an SQL like language</a><br />
<span id="more-1987"></span></p>
<h4>準備</h4>
<p>上記サイトよりダウンロードして解凍した中に入っている &#8220;snoopy.class.php&#8221; と &#8220;htmlsql.class.php&#8221; という2つのファイルを使用する PHP からインクルードできるところに入れます。</p>
<h4>使い方</h4>
<p>実際に Yahoo! のトップページからヤフーニュースのトピックスのニュースタイトルを取ってくるコードを書いてみました。<br />
コードを見てもらえば分かるようにまさに SQL を発行している感じです。</p>
<pre class="php" name="code">
include_once("snoopy.class.php");
include_once("htmlsql.class.php");

$wsql = new htmlsql();

// Yahoo はブラウザに UA によって HTML が変わるので UA を偽装
$wsql->set_user_agent('Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)');

// URL で接続
if (!$wsql->connect('url', 'http://www.yahoo.co.jp/')){
    print 'Error while connecting: ' . $wsql->error;
    exit;
}

// SELECT する範囲を指定して、その範囲の a タグのテキスト取得する
$wsql->isolate_content('
<ul class="emphasis">', '</ul>

');

if (!$wsql->query('SELECT text FROM a')){
    print "Query error: " . $wsql->error;
    exit;
}

// 結果表示
foreach($wsql->fetch_array() as $row){
    print_r($row);
}
</pre>
<p>ダウンロードした中にサンプルコードも載っていますので、サンプルを眺めればやりたい事はだいたいできるかと思います。<br />
以下のようなことができます。</p>
<p>全ての h1 タグの内容を取得<br />
SELECT * FROM h1</p>
<p>全ての a タグの内容を取得<br />
SELECT * FROM a</p>
<p>全ての a タグの href とテキストを取得<br />
SELECT href as url, text FROM a</p>
<p>http:// から始まるリンクの a タグの内容を取得<br />
SELECT * FROM a WHERE preg_match(&#8221;/^http:¥/¥//&#8221;, $href)</p>
<p>id = &#8216;header&#8217; のタグの内容を取得<br />
SELECT * FROM * WHERE $id == &#8220;header&#8221;</p>
<p>&#8220;/&#8221; から始まるリンクの a タグの内容を取得<br />
SELECT * FROM a WHERE substr($href,0,1) != &#8220;/&#8221;</p>
<p>class=&#8221;nav_item&#8221; のタグの内容を取得<br />
SELECT * FROM * WHERE $class == &#8220;nav_item&#8221;</p>
<p>AND OR などで条件を指定することも可能<br />
SELECT * FROM a WHERE ($href == &#8220;foo.htm&#8221; and $title == &#8220;foo&#8221;) or ($title == &#8220;bar&#8221;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1987/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHPExcel の使い方</title>
		<link>http://www.syuhari.jp/blog/archives/1621</link>
		<comments>http://www.syuhari.jp/blog/archives/1621#comments</comments>
		<pubDate>Wed, 01 Jul 2009 02:01:00 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[PHPExcel]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=1621</guid>
		<description><![CDATA[PHPExcel とは PHP でエクセルファイルを生成することができるライブラリです。PHPExcel を初めて使ったので今後のために使い方をメモしておきます。
インストール
PHPExcel を下記よりダウンロードした zip ファイルを解凍して中にある Classes ディレクトリを任意の場所に置きます。
PHPExcel &#8211; OpenXML &#8211; Create Excel2007 documents in PHP &#8211; Spreadsheet engine &#8211; Home

あとは PHPExcel を使う PHP でこの Classes ディレクトリにパスを通して使用するクラスをインクルードします。

set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/Classes/');
include 'PHPExcel.php';
include 'PHPExcel/IOFactory.php';

エクセルファイルを出力する
基本的な手順は下記のようになります。

PHPExcel クラスのオブジェクトを生成
作業するシートを指定
セルの値を更新
ファイルを出力

コードで書くと以下のようになります。

$excel = new PHPExcel();
// シートの設定
$excel->setActiveSheetIndex(0);
$sheet = $excel->getActiveSheet();
$sheet->setTitle('sheet name');
// セルに値を入れる
$sheet->setCellValue('A1', 'hoge');
// Excel2007 形式で出力
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$writer->save("output.xlsx");

出力形式は Excel 2007 以外にも指定できます。

// Excel 95 [...]]]></description>
			<content:encoded><![CDATA[<p>PHPExcel とは PHP でエクセルファイルを生成することができるライブラリです。PHPExcel を初めて使ったので今後のために使い方をメモしておきます。</p>
<h4>インストール</h4>
<p>PHPExcel を下記よりダウンロードした zip ファイルを解凍して中にある Classes ディレクトリを任意の場所に置きます。<br />
<a href="http://phpexcel.codeplex.com/" target="_blank" class="liexternal">PHPExcel &#8211; OpenXML &#8211; Create Excel2007 documents in PHP &#8211; Spreadsheet engine &#8211; Home</a><br />
<span id="more-1621"></span><br />
あとは PHPExcel を使う PHP でこの Classes ディレクトリにパスを通して使用するクラスをインクルードします。</p>
<pre class="php" name="code">
set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/Classes/');
include 'PHPExcel.php';
include 'PHPExcel/IOFactory.php';
</pre>
<h4>エクセルファイルを出力する</h4>
<p>基本的な手順は下記のようになります。</p>
<ul>
<li>PHPExcel クラスのオブジェクトを生成</li>
<li>作業するシートを指定</li>
<li>セルの値を更新</li>
<li>ファイルを出力</li>
</ul>
<p>コードで書くと以下のようになります。</p>
<pre class="php" name="code">
$excel = new PHPExcel();
// シートの設定
$excel->setActiveSheetIndex(0);
$sheet = $excel->getActiveSheet();
$sheet->setTitle('sheet name');
// セルに値を入れる
$sheet->setCellValue('A1', 'hoge');
// Excel2007 形式で出力
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$writer->save("output.xlsx");
</pre>
<p>出力形式は Excel 2007 以外にも指定できます。</p>
<pre class="php" name="code">
// Excel 95 形式
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save("output.xls");
</pre>
<p>他にも PDF, HTML, CSV などで出力可能です。</p>
<p>セルには文字列だけでなく、数値や計算式も入れられます。</p>
<pre class="php" name="code">
$sheet->setCellValue('B1', '=A2+A3');
</pre>
<p>また、セルの指定方法は &#8216;A1&#8242; のような指定もできますし、下記のように行と列を数字で指定することも可能です。</p>
<pre class="php" name="code">
$sheet->setCellValueByColumnAndRow(1, 2, 'hoge');
</pre>
<h4>セルの書式を指定する</h4>
<p>セルに罫線を入れたり、フォント、フォントサイズなど書式を指定することも可能です。</p>
<pre class="php" name="code">
// フォント
$sheet->getDefaultStyle()->getFont()->setName('ＭＳ Ｐゴシック');
// フォントサイズ
$sheet->getDefaultStyle()->getFont()->setSize(12);
// セルの下に罫線を引く
$sheet->getStyle('A1')->getBorders()->getBottom()->setBorderStyle(PHPExcel_Style_Border::BORDER_THIN);
// センター寄せ
$sheet->getStyle('A1')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
</pre>
<p>罫線などはまとめて以下のようにして指定することも可能です。</p>
<pre class="php" name="code">
$cell_style = array(
  'borders' => array(
    'top'     => array('style' => PHPExcel_Style_Border::BORDER_THIN),
    'bottom'  => array('style' => PHPExcel_Style_Border::BORDER_THIN),
    'left'    => array('style' => PHPExcel_Style_Border::BORDER_THIN),
    'right'   => array('style' => PHPExcel_Style_Border::BORDER_THIN)
  )
);
$sheet->getStyle('A1')->applyFromArray($cell_style);
// 行と列で指定することも可能
$sheet->getStyleByColumnAndRow(1, 2)->applyFromArray($cell_style);
</pre>
<p>セルの色の指定も可能。</p>
<pre class="php" name="code">
$sheet->getStyleByColumnAndRow(1, 2)->getFill()->getStartColor()->setARGB('FFCCFFCC');
</pre>
<h4>テンプレートを読み込んで加工する</h4>
<p>PHPExcel でのセルの書式の指定とか結構面倒です。PHP で出力する Excel とかはだいたいフォーマットが同じことが多いです。そこで、まずエクセルで元となるファイルを作成してフォントやセルの色、罫線など必要な設定をしておきます。PHP  では各セルの値だけを変更して出力するともっと簡単にできます。</p>
<pre class="php" name="code">
// read template xls file
$reader = PHPExcel_IOFactory::createReader('Excel5');
$excel = $reader->load(TEMPLATE_FILE);
// set active sheet
$excel->setActiveSheetIndex(0);
$sheet = $excel->getActiveSheet();
// update cell
$sheet->setCellValue('A1', 'hoge');
// output excel file
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$writer->save("output.xls");
</pre>
<p>PHPExcel のオブジェクトを生成する部分が違うだけです。</p>
<h4>その他</h4>
<p>zip ファイルを解凍した中に Documentation フォルダがあり、その中に HTML 形式のドキュメントが入っています。<br />
また、Tests フォルダには 29 個のサンプルコードが入っています。ファイル名からやりたいことの当りをつけられるので、やり方が分からない時には大変参考になります。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/1621/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP の flock 関数を勘違いしていました</title>
		<link>http://www.syuhari.jp/blog/archives/858</link>
		<comments>http://www.syuhari.jp/blog/archives/858#comments</comments>
		<pubDate>Wed, 03 Dec 2008 02:43:13 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[DB]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[flock]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[LAN]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=858</guid>
		<description><![CDATA[PHP の flock 関数を数年ぶりに使用したのですが、すごい勘違いをしていました。DB を使用するようになってからいうものめっきりファイルロックなど使わなくなっていたので。。。（言い訳です^^）

PHP: flock &#8211; Manual
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。 
と書かれていたので、てっきりロックできなかった場合に FALSE が返るのかと思っていました。

$fp = fopen(dirname(__FILE__)."/lock", "w+");
if (!flock($fp, LOCK_EX)) {
    triger_error('排他処理中のため実行できません', E_USER_ERROR);
}

として、sleep(60) などで実行を１分間止めて同じプログラムを実行し、ロックできなくてエラーになると想定してテストをしてみたところ、ロックできるまで待ってからロックして実行していました。
ロックされている場合にロックが解除されるのを待たずにすぐに次の処理をしたい場合はマニュアルの operation の説明にある LOCK_NB を使えばよいようです。
ロック中に flock() でブロックを行いたくない場合は、 LOCK_NB  をセットします (Windows ではサポートされていません)。

$fp = fopen(dirname(__FILE__)."/lock", "w+");
if (!flock($fp, LOCK_EX&#124;LOCK_NB)) {
    trigger_error('排他処理中のため実行できません', E_USER_ERROR);
}

しかし、マニュアルのサンプルコードを見てもすぐにロックできたかどうかの判定が返ってきそうに見えませんかね↓

$fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { [...]]]></description>
			<content:encoded><![CDATA[<p>PHP の flock 関数を数年ぶりに使用したのですが、すごい勘違いをしていました。DB を使用するようになってからいうものめっきりファイルロックなど使わなくなっていたので。。。（言い訳です^^）<br />
<span id="more-858"></span><br />
<a href="http://jp2.php.net/manual/ja/function.flock.php" target="_blank" class="liexternal">PHP: flock &#8211; Manual</a></p>
<blockquote><p>返り値<br />
成功した場合に TRUE を、失敗した場合に FALSE を返します。 </p></blockquote>
<p>と書かれていたので、てっきりロックできなかった場合に FALSE が返るのかと思っていました。</p>
<pre class="php" name="code">
$fp = fopen(dirname(__FILE__)."/lock", "w+");
if (!flock($fp, LOCK_EX)) {
    triger_error('排他処理中のため実行できません', E_USER_ERROR);
}
</pre>
<p>として、sleep(60) などで実行を１分間止めて同じプログラムを実行し、ロックできなくてエラーになると想定してテストをしてみたところ、ロックできるまで待ってからロックして実行していました。</p>
<p>ロックされている場合にロックが解除されるのを待たずにすぐに次の処理をしたい場合はマニュアルの operation の説明にある LOCK_NB を使えばよいようです。</p>
<blockquote><p>ロック中に flock() でブロックを行いたくない場合は、 LOCK_NB  をセットします (Windows ではサポートされていません)。</p></blockquote>
<pre class="php" name="code">
$fp = fopen(dirname(__FILE__)."/lock", "w+");
if (!flock($fp, LOCK_EX|LOCK_NB)) {
    trigger_error('排他処理中のため実行できません', E_USER_ERROR);
}
</pre>
<p>しかし、マニュアルのサンプルコードを見てもすぐにロックできたかどうかの判定が返ってきそうに見えませんかね↓</p>
<pre class="php" name="code">
$fp = fopen("/tmp/lock.txt", "w+");

if (flock($fp, LOCK_EX)) { // 排他ロックを行います
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // ロックを解放します
} else {
    echo "ファイルをロックできません!";
}

fclose($fp);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/858/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>まるごとPHP Vol.2 を読んだ</title>
		<link>http://www.syuhari.jp/blog/archives/823</link>
		<comments>http://www.syuhari.jp/blog/archives/823#comments</comments>
		<pubDate>Thu, 20 Nov 2008 08:55:12 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[本]]></category>
		<category><![CDATA[age]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[php4]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[PHPUnit]]></category>
		<category><![CDATA[socket]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=823</guid>
		<description><![CDATA[「まるごとPHP! Vol.2」を読みました。
Vol2 は大きく３つに分かれています。

PHP5
フレームワーク
PHP 上級者向け


PHP5 では PHP4 から PHP5 への移行や、PHP5 特有の機能など今一度 PHP5 を復習できます。最近の開発が PHP5 ばかりだったのですっかり PHP4 は過去のものと思っていたのですが、
現時点では、PHP で構築されているシステム全体の約7割が PHP4 で稼働しているという報告もあり、（省略）
と、まだまだ PHP4 が多いようです。ただ、新規開発だけで見るとどれくらいなのでしょうね。自分は新規では約90% PHP5 ですね。少し前にクライアントさんのレンタルサーバが PHP4 しかなく PHP4 で開発したものがありますが。
あと、フレームワークは Piece Framework と CakePHP の紹介です。ここはさくっと読んだだけですが、CakePHP の記事で HttpSocket クラスのことに関して書かれていて気になりました。そのうち時間を取って調べてみたいです。
最後の章の上級者向けの中では PHPUnit を使用したテスト駆動開発が、まだテスト駆動開発したことがない方、PHPUnit を使ったことがない方には参考になる記事だと思います。
まるごとPHP! Vol.2
枡形 誠二
￥ 1,995
大型本
インプレスジャパン

まるごとPHP!〈Vol.1〉
山田 祥寛
￥ 1,995
単行本
インプレス

]]></description>
			<content:encoded><![CDATA[<p>「<a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%9E%A1%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank" class="liexternal">まるごとPHP! Vol.2</a>」を読みました。</p>
<p>Vol2 は大きく３つに分かれています。</p>
<ul>
<li>PHP5</li>
<li>フレームワーク</li>
<li>PHP 上級者向け</li>
</ul>
<p><span id="more-823"></span><br />
PHP5 では PHP4 から PHP5 への移行や、PHP5 特有の機能など今一度 PHP5 を復習できます。最近の開発が PHP5 ばかりだったのですっかり PHP4 は過去のものと思っていたのですが、</p>
<blockquote><p>現時点では、PHP で構築されているシステム全体の約7割が PHP4 で稼働しているという報告もあり、（省略）</p></blockquote>
<p>と、まだまだ PHP4 が多いようです。ただ、新規開発だけで見るとどれくらいなのでしょうね。自分は新規では約90% PHP5 ですね。少し前にクライアントさんのレンタルサーバが PHP4 しかなく PHP4 で開発したものがありますが。</p>
<p>あと、フレームワークは Piece Framework と CakePHP の紹介です。ここはさくっと読んだだけですが、CakePHP の記事で HttpSocket クラスのことに関して書かれていて気になりました。そのうち時間を取って調べてみたいです。</p>
<p>最後の章の上級者向けの中では PHPUnit を使用したテスト駆動開発が、まだテスト駆動開発したことがない方、PHPUnit を使ったことがない方には参考になる記事だと思います。</p>
<h4><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%9E%A1%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank" class="liexternal">まるごとPHP! Vol.2</a></h4>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%9E%A1%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51AFMyAmdQL._SL160_.jpg" border="0" width="114" height="160" alt="まるごとPHP! Vol.2" align="left" /></a>枡形 誠二<br />
￥ 1,995<br />
大型本<br />
インプレスジャパン<br />
<br clear="all"/></p>
<h4><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-%E3%80%88Vol-1%E3%80%89-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4844320254%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844320254" target="_blank" class="liexternal">まるごとPHP!〈Vol.1〉</a></h4>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-%E3%80%88Vol-1%E3%80%89-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4844320254%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844320254" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51KAB6TXHVL._SL160_.jpg" border="0" width="113" height="160" alt="まるごとPHP!〈Vol.1〉" align="left" /></a>山田 祥寛<br />
￥ 1,995<br />
単行本<br />
インプレス<br />
<br clear="all"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/823/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP の mime_content_type 関数がなかった</title>
		<link>http://www.syuhari.jp/blog/archives/770</link>
		<comments>http://www.syuhari.jp/blog/archives/770#comments</comments>
		<pubDate>Fri, 17 Oct 2008 05:16:05 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[mime]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[本]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=770</guid>
		<description><![CDATA[今携わっている案件で、PHP の mime_content_type 関数が使用されていた。しかしローカル開発環境の Mac に MacPort で入れた PHP には入っていなかった。 variants も調べてみたがなさそうだ。PHP マニュアルには mime_content_type 関数は非推奨で、PECL の Fileinfo を使用するように書かれている。Fileinfo も組み込むのが時間的に面倒だったので、file コマンドを使用してグローバル関数として mime_content_type 関数を自作してみた。


if ( !function_exists('mime_content_type') ) {
    function mime_content_type($filename) {
        $mime_type = exec('file -Ib '.$filename);
        return $mime_type;
   [...]]]></description>
			<content:encoded><![CDATA[<p>今携わっている案件で、PHP の mime_content_type 関数が使用されていた。しかしローカル開発環境の Mac に MacPort で入れた PHP には入っていなかった。 variants も調べてみたがなさそうだ。PHP マニュアルには <a href="http://jp2.php.net/manual/ja/function.mime-content-type.php" target="_blank" class="liexternal">mime_content_type</a> 関数は非推奨で、PECL の Fileinfo を使用するように書かれている。Fileinfo も組み込むのが時間的に面倒だったので、file コマンドを使用してグローバル関数として mime_content_type 関数を自作してみた。<br />
<span id="more-770"></span></p>
<pre class="php" name="code">
if ( !function_exists('mime_content_type') ) {
    function mime_content_type($filename) {
        $mime_type = exec('file -Ib '.$filename);
        return $mime_type;
    }
}
</pre>
<p>これを Subversion 管理以外のローカル設定ファイルに書いておけば、ローカル開発環境では自作の関数が使用され、テスト環境、本番環境では PHP 組み込みの mime_content_type 関数が使用される。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/770/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>まるごとPHP! Vol.2</title>
		<link>http://www.syuhari.jp/blog/archives/767</link>
		<comments>http://www.syuhari.jp/blog/archives/767#comments</comments>
		<pubDate>Wed, 15 Oct 2008 00:26:46 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[age]]></category>
		<category><![CDATA[Amazon]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[hatena]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[image]]></category>
		<category><![CDATA[LAN]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[tag]]></category>
		<category><![CDATA[本]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=767</guid>
		<description><![CDATA[まるごとPHP! Vol.2 &#8211; Do You PHP はてな
この系統って、Vol.2があまり出ない気がするけど、まるごとPHP!のVol.2が出ます。。。って、え？もうAmazonに出てる。。。発売は10月末だそうで。
まるごとPHP! Vol.2 が出るそうです。発売日は10月31日。Vol.1 の内容も結構参考になったので期待大です。Vol.1 ではフレームワークは Mojavi やオリジナルフレームワークなどの紹介でしたが、Vol.2 はアマゾンの表紙画像を見ると Peace Framework と CakePHP のようですね。

まるごとPHP! Vol.2
桝形 誠二
￥ 1,995
大型本
インプレスジャパン

まるごとPHP!〈Vol.1〉
山田 祥寛
￥ 1,995
単行本
インプレス

]]></description>
			<content:encoded><![CDATA[<p><a href="http://d.hatena.ne.jp/shimooka/20081014/1223951394" target="_blank" class="liexternal">まるごとPHP! Vol.2 &#8211; Do You PHP はてな</a></p>
<blockquote><p>この系統って、Vol.2があまり出ない気がするけど、まるごとPHP!のVol.2が出ます。。。って、え？もうAmazonに出てる。。。発売は10月末だそうで。</p></blockquote>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%A1%9D%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank" class="liexternal">まるごとPHP! Vol.2</a> が出るそうです。発売日は10月31日。Vol.1 の内容も結構参考になったので期待大です。Vol.1 ではフレームワークは Mojavi やオリジナルフレームワークなどの紹介でしたが、Vol.2 はアマゾンの表紙画像を見ると Peace Framework と CakePHP のようですね。<br />
<span id="more-767"></span></p>
<h4><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%A1%9D%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank" class="liexternal">まるごとPHP! Vol.2</a></h4>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-Vol-2-%E6%A1%9D%E5%BD%A2-%E8%AA%A0%E4%BA%8C/dp/4844326368%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844326368" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51AFMyAmdQL._SL160_.jpg" border="0" width="114" height="160" alt="まるごとPHP! Vol.2" align="left" /></a>桝形 誠二<br />
￥ 1,995<br />
大型本<br />
インプレスジャパン<br />
<br clear="all"/></p>
<h4><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-%E3%80%88Vol-1%E3%80%89-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4844320254%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844320254" target="_blank" class="liexternal">まるごとPHP!〈Vol.1〉</a></h4>
<p><a href="http://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%81%94%E3%81%A8PHP-%E3%80%88Vol-1%E3%80%89-%E5%B1%B1%E7%94%B0-%E7%A5%A5%E5%AF%9B/dp/4844320254%3FSubscriptionId%3D00ZZGWWEM6KCNNQ67M82%26tag%3D8109-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4844320254" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51KAB6TXHVL._SL160_.jpg" border="0" width="113" height="160" alt="まるごとPHP!〈Vol.1〉" align="left" /></a>山田 祥寛<br />
￥ 1,995<br />
単行本<br />
インプレス<br />
<br clear="all"/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/767/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mac にインストールした PHP で PostgreSQL が使えなかったので再インストールした</title>
		<link>http://www.syuhari.jp/blog/archives/763</link>
		<comments>http://www.syuhari.jp/blog/archives/763#comments</comments>
		<pubDate>Fri, 10 Oct 2008 01:26:20 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[MacPorts]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PEAR]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[URL]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=763</guid>
		<description><![CDATA[Mac に PostgreSQL をインストール して、さあ PHP から PostgreSQL を使おうとしたら、PHP で PostgreSQL が使えなかった。pg_connect 関数が未定義と怒られた。
改めて PHP を入れた時のエントリを見直してみると

$ sudo port install php5 +apache2 +mysql5 +pear

確かに入れていない。

variants を後から変更できるか分からなかったので、一度アンインストールして入れ直すことにした。
（deactivate して新たにインストールしようとしてもバージョンが同じだからかエラーになった）
phpMyAdmin も MacPorts で入れたのだがこれもアンインストールする必要があった。先に phpMyAdmin をアンインストールしないと依存関係で PHP5 がアンインストールできない。ついでに今後のために PostgreSQL の他に SQLite も追加しておいた。

$ sudo port uninstall phpmyadmin
$ sudo port uninstall php5
$ sudo port install php5 +apache2 +curl +gd +mysql5 +imap +pear +postgresql83 +sqlite
$ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.syuhari.jp/blog/archives/754" class="liinternal">Mac に PostgreSQL をインストール</a> して、さあ PHP から PostgreSQL を使おうとしたら、PHP で PostgreSQL が使えなかった。pg_connect 関数が未定義と怒られた。</p>
<p>改めて <a href="http://www.syuhari.jp/blog/archives/554" class="liinternal">PHP を入れた時のエントリ</a>を見直してみると</p>
<pre class="shell">
$ sudo port install php5 +apache2 +mysql5 +pear
</pre>
<p>確かに入れていない。<br />
<span id="more-763"></span><br />
variants を後から変更できるか分からなかったので、一度アンインストールして入れ直すことにした。<br />
（deactivate して新たにインストールしようとしてもバージョンが同じだからかエラーになった）</p>
<p>phpMyAdmin も MacPorts で入れたのだがこれもアンインストールする必要があった。先に phpMyAdmin をアンインストールしないと依存関係で PHP5 がアンインストールできない。ついでに今後のために PostgreSQL の他に SQLite も追加しておいた。</p>
<pre class="shell">
$ sudo port uninstall phpmyadmin
$ sudo port uninstall php5
$ sudo port install php5 +apache2 +curl +gd +mysql5 +imap +pear +postgresql83 +sqlite
$ sudo port install phpmyadmin
</pre>
<p>phpMyAdmin はインストール後、config.inc.php を設定する必要があります。詳しくは以前インストールしたときのエントリ「<a href="http://www.syuhari.jp/blog/archives/562" class="liinternal">MacPorts で phpMyAdmin をインストール</a>」を参照してください。</p>
<p>ちなみに PosgreSQL の PHP の variants は postgresql83 です。最初調べずに postgresql としたらエラーになった。急がば回れですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/763/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MacPorts で phpMyAdmin をインストール</title>
		<link>http://www.syuhari.jp/blog/archives/562</link>
		<comments>http://www.syuhari.jp/blog/archives/562#comments</comments>
		<pubDate>Wed, 30 Jul 2008 04:17:14 +0000</pubDate>
		<dc:creator>matsuura</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[admin]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[conf]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[ec]]></category>
		<category><![CDATA[hosts]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[httpd.conf]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[MacPorts]]></category>
		<category><![CDATA[phpMyAdmin]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://www.syuhari.jp/blog/?p=562</guid>
		<description><![CDATA[MacPorts で phpMyAdmin をインストールしたメモです。
phpMyAdmin インストール
$ sudo port install phpmyadmin
これで /opt/local/www/phpmyadmin 以下にインストールされます。

hosts ファイルを設定
http://phpmyadmin/ でブラウザからアクセスできるように、/etc/hosts ファイルを設定します。
127.0.0.1	phpmyadmin
httpd.conf 設定
httpd.conf に phpmyadmin でアクセスしたときの設定をします。
NameVirtualHost *:80
&#60;VirtualHost *:80&#62;
	ServerName localhost
	DocumentRoot /opt/local/apache2/htdocs
&#60;/VirtualHost&#62;

&#60;VirtualHost *:80&#62;
	ServerName phpmyadmin
	DocumentRoot /opt/local/www/phpmyadmin
	&#60;Directory &#34;/opt/local/www/phpmyadmin&#34;&#62;
		Order deny,allow
		Allow from all
	&#60;/Directory&#62;
&#60;/VirtualHost&#62;
phpMyAdmin の config を設定
$ sudo cp /opt/local/www/phpmyadmin/config.sample.inc.php /opt/local/www/phpmyadmin/config.inc.php
config.sample.inc.php を config.inc.php としてコピーして設定を行う
確認
apache を再起動して http://phpmyadmin/ でアクセスできれば OK
]]></description>
			<content:encoded><![CDATA[<p>MacPorts で phpMyAdmin をインストールしたメモです。</p>
<h4>phpMyAdmin インストール</h4>
<pre class="shell">$ sudo port install phpmyadmin</pre>
<p>これで /opt/local/www/phpmyadmin 以下にインストールされます。<br />
<span id="more-562"></span></p>
<h4>hosts ファイルを設定</h4>
<p>http://phpmyadmin/ でブラウザからアクセスできるように、<strong>/etc/hosts</strong> ファイルを設定します。</p>
<pre class="shell">127.0.0.1	phpmyadmin</pre>
<h4>httpd.conf 設定</h4>
<p><strong>httpd.conf</strong> に phpmyadmin でアクセスしたときの設定をします。</p>
<pre class="shell">NameVirtualHost *:80
&lt;VirtualHost *:80&gt;
	ServerName localhost
	DocumentRoot /opt/local/apache2/htdocs
&lt;/VirtualHost&gt;

&lt;VirtualHost *:80&gt;
	ServerName phpmyadmin
	DocumentRoot /opt/local/www/phpmyadmin
	&lt;Directory &quot;/opt/local/www/phpmyadmin&quot;&gt;
		Order deny,allow
		Allow from all
	&lt;/Directory&gt;
&lt;/VirtualHost&gt;</pre>
<h4>phpMyAdmin の config を設定</h4>
<pre class="shell">$ sudo cp /opt/local/www/phpmyadmin/config.sample.inc.php /opt/local/www/phpmyadmin/config.inc.php</pre>
<p>config.sample.inc.php を config.inc.php としてコピーして設定を行う</p>
<h4>確認</h4>
<p>apache を再起動して http://phpmyadmin/ でアクセスできれば OK</p>
]]></content:encoded>
			<wfw:commentRss>http://www.syuhari.jp/blog/archives/562/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
