<?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>整頓中（仮） &#187; PHP</title>
	<atom:link href="http://www.retropc.net/mm/archives/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://www.retropc.net/mm</link>
	<description>ずっと仮</description>
	<lastBuildDate>Wed, 08 Feb 2012 13:51:36 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>PHP統合開発環境PDT2入門 ZendDebuggerのテストが起動しないよ編</title>
		<link>http://www.retropc.net/mm/archives/218</link>
		<comments>http://www.retropc.net/mm/archives/218#comments</comments>
		<pubDate>Wed, 03 Jun 2009 16:13:57 +0000</pubDate>
		<dc:creator>moriyan</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.retropc.net/mm/?p=218</guid>
		<description><![CDATA[本の7章 ZendDebuggerのセットアップに従って設定すると、The file &#8216;http://localhost/pdt/dummy.php&#8217; which is required by the Zend Debugger, could not be found. Please verify that&#8230;みたいなエラーダイアログが出てしまいました。これは、P131に書かれているdummy.phpのコピー先は、c:\dev\workspaceではなく、C:\dev\xampp\htdocsではないかなと。でもこれ、エラーが出ても気にしなくていいみたいです。 また、dummy.phpを正しいフォルダにコピーして、続いて、Test Debuggerボタンを押してZendDebuggerの動作確認を使用とすると、私のPC環境ではApacheが落ちました。が、それもあまり気にしなくていい？みたいです。 どうも、localhostよりも先に、このPCに割り当てられたIPアドレスでZendDebuggerに接続しようとしているようなのですが、php.iniのzend_debugger.allow_hostsで許可しているIPアドレスは、127.0.0.1だけなので、接続に失敗して、その際になぜかApacheを落としてしまうようで。こうなったら、一度、XAMPPのApacheを停止→開始して、ついでにEclipseも再起動した方がいいようです。ちょっと不安定だね。]]></description>
			<content:encoded><![CDATA[<p>本の7章 ZendDebuggerのセットアップに従って設定すると、The file &#8216;http://localhost/pdt/dummy.php&#8217; which is required by the Zend Debugger, could not be found. Please verify that&#8230;みたいなエラーダイアログが出てしまいました。これは、P131に書かれているdummy.phpのコピー先は、c:\dev\workspaceではなく、C:\dev\xampp\htdocsではないかなと。でもこれ、エラーが出ても気にしなくていいみたいです。</p>
<p>また、dummy.phpを正しいフォルダにコピーして、続いて、Test Debuggerボタンを押してZendDebuggerの動作確認を使用とすると、私のPC環境ではApacheが落ちました。が、それもあまり気にしなくていい？みたいです。</p>
<p>どうも、localhostよりも先に、このPCに割り当てられたIPアドレスでZendDebuggerに接続しようとしているようなのですが、php.iniのzend_debugger.allow_hostsで許可しているIPアドレスは、127.0.0.1だけなので、接続に失敗して、その際になぜかApacheを落としてしまうようで。こうなったら、一度、XAMPPのApacheを停止→開始して、ついでにEclipseも再起動した方がいいようです。ちょっと不安定だね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retropc.net/mm/archives/218/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP統合開発環境 PDT2入門</title>
		<link>http://www.retropc.net/mm/archives/207</link>
		<comments>http://www.retropc.net/mm/archives/207#comments</comments>
		<pubDate>Tue, 02 Jun 2009 09:49:18 +0000</pubDate>
		<dc:creator>moriyan</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.retropc.net/mm/?p=207</guid>
		<description><![CDATA[PHP統合開発環境 PDT2入門[AA] という、初心者向けに丁寧に書かれている本を買いました。ページをめくりつつ実際にWindows上で環境構築をしてみたのですが、一カ所、はまったところがあったのでメモです。 &#8220;2-4 Subversionのセットアップ&#8221;という章に従ってApacheにSubversionのモジュールを組み込むように設定してからApacheを再起動しようとしたのですが、Apacheが起動しませんでした。その原因なのですが、&#8221;2-1 XAMPPのセットアップ&#8221;の章では、XAMPPのインストーラ版をダウンロードするように書かれているのですけど、これにはSubverionが入っていないようです。 XAMPのダウンロードページに開発パッケージというのがありますから、これを展開して、先にインストールしてあるXAMPPのフォルダ（この本に従うならc:\dev\xampp）に上書きすると、Subversionモジュールが組み込まれたApacheが起動するようです。]]></description>
			<content:encoded><![CDATA[<p><img src="http://ecx.images-amazon.com/images/I/51Tx58yfRzL._SL75_.jpg" alt="" /><br />
<a name="evtst|a|4798022578" href="http://www.amazon.co.jp/PHP%E7%B5%B1%E5%90%88%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83-PDT2%E5%85%A5%E9%96%80-%E5%B2%B8%E6%9C%AC-%E5%BF%A0%E5%A3%AB/dp/4798022578%3FSubscriptionId%3D02E5W5871AJF7PMMMS82%26tag%3Dmoriswebpage-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798022578">PHP統合開発環境 PDT2入門</a>[AA] という、初心者向けに丁寧に書かれている本を買いました。ページをめくりつつ実際にWindows上で環境構築をしてみたのですが、一カ所、はまったところがあったのでメモです。</p>
<p>&#8220;2-4 Subversionのセットアップ&#8221;という章に従ってApacheにSubversionのモジュールを組み込むように設定してからApacheを再起動しようとしたのですが、Apacheが起動しませんでした。その原因なのですが、&#8221;2-1 XAMPPのセットアップ&#8221;の章では、XAMPPのインストーラ版をダウンロードするように書かれているのですけど、これにはSubverionが入っていないようです。<br />
<a href="http://www.apachefriends.org/jp/xampp-windows.html#2671">XAMPのダウンロードページ</a>に開発パッケージというのがありますから、これを展開して、先にインストールしてあるXAMPPのフォルダ（この本に従うならc:\dev\xampp）に上書きすると、Subversionモジュールが組み込まれたApacheが起動するようです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retropc.net/mm/archives/207/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>PHPのrequire_once</title>
		<link>http://www.retropc.net/mm/archives/186</link>
		<comments>http://www.retropc.net/mm/archives/186#comments</comments>
		<pubDate>Mon, 27 Apr 2009 17:21:49 +0000</pubDate>
		<dc:creator>moriyan</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.retropc.net/mm/?p=186</guid>
		<description><![CDATA[PHPのrequire_once（）は、このrequire_once文が書かれた箇所にファイルを読み込みます。ただし、1度だけなので、 [php toolbar="false"] [/php] と記述した場合、2度目のrequire_once()ではa.phpは読み込まれません。例えば、a.phpではz.phpを読み込んでいて、b.phpでもz.phpを読み込んでいる場合、とあるスクリプトでa.phpとb.phpを読み込むと、z.phpを2度、間接的に読み込んでしまうような事態を防ぐ事ができます。 逆に何度でも読み込むのがrequire()で、これはC言語でいうところのincludeみたいなものです。 大抵の場合、同じファイルを2度読み込む理由はないからのだからと、何でもかんでもrequire_once()にしておけば安心だ、というもんでもありません。いや、自戒の意を込めて、以下は、つまらないバグに悩まされてしまった記録です。 例えば、 mysqlへアクセスするためのIDとパスワードの保存場所という記事。データベースの設定を外部ファイルにして、それをrequire_once()で読み込むという処理です。ここで、このDBへの接続部分を関数化してみます。 [php toolbar="false"] function connectDB() { require_once(&#8216;cfg.php&#8217;); $dbc = mysql_connect($db['host'], $db['user'], $db['pass']); mysql_select_db($db['dbname']); return $dbc; } [/php] この関数を使ってDBに接続して、戻り値を使ってSQLを実行して、mysql_close()でDBへの接続を解除したとします。ここで処理が終わせずに、続けて再びSQLを実行するためにconnectDB()を呼び出すと・・・つまり、こんなソースです。 [php toolbar="false"] $id = connectDB(); mysql_query(&#8230;); mysql_close($id); $id = connectDB(); mysql_query(&#8230;); mysql_close($id); [/php] レコードの更新を実行したあと、画面を更新するためにデータを取り直すというような処理ですね。これがなぜ、動かないのかというと、2度目のconnectDB()では require_once()が実行されないのです。2度目の読み込みになりますから。なので、$db変数は定義されずにDBへの接続に失敗するわけです。 PHP的に考えたら当たり前なのですが、C言語のincludeようにプリプロセッサが外部スクリプトを展開して、その外部スクリプトはその箇所に恒久的に存在すると勘違いしてしまったのですね。つまり、関数の呼び出し毎にrequire_once()が実行されていると思っていなかったわけです。 そんなの、mysql_connect()した段階でエラーチェックしてりゃ気がつくだろ、と思うのですが、mysql_connect()のパラメータが指定されない場合、デフォ ルト値 server = &#8216;localhost:3306&#8242;, username = サーバプロセスの所有ユーザ名 password = 空のパスワードで接続するらしく、 Warning: mysql_connect() [...]]]></description>
			<content:encoded><![CDATA[<p>PHPのrequire_once（）は、このrequire_once文が書かれた箇所にファイルを読み込みます。ただし、1度だけなので、<br />
[php toolbar="false"]<br />
<?php<br />
require_once（"a.php"）;<br />
require_once（"a.php"）;<br />
?><br />
[/php]<br />
と記述した場合、2度目のrequire_once()ではa.phpは読み込まれません。例えば、a.phpではz.phpを読み込んでいて、b.phpでもz.phpを読み込んでいる場合、とあるスクリプトでa.phpとb.phpを読み込むと、z.phpを2度、間接的に読み込んでしまうような事態を防ぐ事ができます。<br />
逆に何度でも読み込むのがrequire()で、これはC言語でいうところのincludeみたいなものです。</p>
<p>大抵の場合、同じファイルを2度読み込む理由はないからのだからと、何でもかんでもrequire_once()にしておけば安心だ、というもんでもありません。いや、自戒の意を込めて、以下は、つまらないバグに悩まされてしまった記録です。</p>
<p>例えば、<br />
<a href="http://www.phppro.jp/qa/1799">mysqlへアクセスするためのIDとパスワードの保存場所</a>という記事。データベースの設定を外部ファイルにして、それをrequire_once()で読み込むという処理です。ここで、このDBへの接続部分を関数化してみます。<br />
[php toolbar="false"]<br />
function connectDB()<br />
{<br />
    require_once(&#8216;cfg.php&#8217;);<br />
    $dbc = mysql_connect($db['host'], $db['user'], $db['pass']);<br />
    mysql_select_db($db['dbname']);<br />
    return $dbc;<br />
}<br />
[/php]<br />
この関数を使ってDBに接続して、戻り値を使ってSQLを実行して、mysql_close()でDBへの接続を解除したとします。ここで処理が終わせずに、続けて再びSQLを実行するためにconnectDB()を呼び出すと・・・つまり、こんなソースです。<br />
[php toolbar="false"]<br />
$id = connectDB();<br />
mysql_query(&#8230;);<br />
mysql_close($id);<br />
$id = connectDB();<br />
mysql_query(&#8230;);<br />
mysql_close($id);<br />
[/php]<br />
レコードの更新を実行したあと、画面を更新するためにデータを取り直すというような処理ですね。これがなぜ、動かないのかというと、2度目のconnectDB()では require_once()が実行されないのです。2度目の読み込みになりますから。なので、$db変数は定義されずにDBへの接続に失敗するわけです。</p>
<p>PHP的に考えたら当たり前なのですが、C言語のincludeようにプリプロセッサが外部スクリプトを展開して、その外部スクリプトはその箇所に恒久的に存在すると勘違いしてしまったのですね。つまり、関数の呼び出し毎にrequire_once()が実行されていると思っていなかったわけです。</p>
<p>そんなの、mysql_connect()した段階でエラーチェックしてりゃ気がつくだろ、と思うのですが、mysql_connect()のパラメータが指定されない場合、デフォ ルト値 server = &#8216;localhost:3306&#8242;, username = サーバプロセスの所有ユーザ名 password = 空のパスワードで接続するらしく、<br />
Warning: mysql_connect() [function.mysql-connect]: Can&#8217;t connect to local MySQL server through socket &#8216;/tmp/mysql.sock&#8217; (2)<br />
という警告メッセージはですのですが、戻り値は得られてしまうのです。もっともその先のmysql_select_db()の段階でエラーになって、こちらは検出できていたので、あれあれなんかおかしい、と気がついたわけです。</p>
<p>ちなみにPHPではmysql_close()を呼び出さなくてもいいそうです、と、ドキュメントに書いてあります。が、ほったらかしは気持ち悪いよね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.retropc.net/mm/archives/186/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

