忍者ブログ

カウンター

プロモーション

カレンダー

04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

AntinomyMy の実験室

   私のWEBアプリ実験室です!

ブログ内検索

楽天でお買い物

twitter

最新トラックバック

最新コメント

忍者アナライズ

ウェザーニュース

バーコード

本を買う

アクセス解析

Google+

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


  • 2024/05/02 14:48

PHP のスクリプトをfopen などで呼び出すと、途中終了、終ってしまう未知のecho(print)エラー

PHP の調べ物

メモです。

何時間もかけて突き止めた、バグに近い?エラーです。

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 は使わないのが手っ取り早いでしょう。


とかいう、個人的なメモでした。

拍手[0回]

PR


  • 2014/02/24 02:39

コメント一覧

  • お名前
  • Email

  • コメント

  • Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  • パスワード
[PR]