メモです。
何時間もかけて突き止めた、バグに近い?エラーです。
fopen などで、自分のサイトへhttp のphp スクリプトを呼び出す時、
呼び出す側の中に、echo を書いてはいけません。
これをしていると、
その部分で止まってしまう事を確認しました。
echo を動く場合と動かない場合があって、
今まで気がつかなかったですが、
多分バージョンによっても動く動かないは
あるかもしれませんが、止まるケースはあります。
例)
a.php で、
if($fp = fsockopen($host,80,$errno,$errstr,2)){
$req = "HEAD ".$host_dir.$q." HTTP/1.1\r\n";
$req .= "Host: ".$host."\r\n";
$req .= "Connection: Close\r\n\r\n";
fwrite($fp, $req);
stream_set_timeout($fp, 2);
fclose($fp);
みたいな内容で、
b.php を呼ぶと時、
b.php 内にecho をしてはいけないと言う事です。
これの判断に、
b.php のecho の前方と後方で
$fp_debug = fopen($fileOpenPath_and_fileName, 'a+'); //指定のパスのファイルネームがあれば追記モードで開き、無ければ作成
fwrite($fp_debug, $saveString); //一行書き込み
fclose($fp_debug); //ファイルの書き込み終了
の様な(例は関数化しているので引数が変数ですが)付け加えた結果、前方はOKですが、後方は
ログすら残りません。
多分、エラーとか、タイムアウトとか、出力先が曖昧になるのでしょうか、
それともLinux が相手のポートを把握できないので、止まるのでしょうか、
色々考えられますが、とりあえずphp のページをfopen なので80 ポートを
用いて呼び出して実行する時には、気をつけなければいけません。
php スクリプトをphp スクリプトで呼び出す場合のデバッグの方法は、
ob_xxx 系関数を用いて、ブラウザでデバッグ出力してとか、
色々考えられますが、直接呼んだのか、間接的に呼んだのかなどが
判断できる、例えばip アドレスとか、ブラウザのユーザーエージェントで
判断するとか、色々考えられますが、
やはりecho やprint は使わないのが手っ取り早いでしょう。
とかいう、個人的なメモでした。
コメント一覧