最初はメモリー不足を疑ったのですが、「Allowed memory size of ・・・」のようなエラーはでておらず、エラー表示を非表示にしているわけでもありません。
(意図的にエラーを発生させるとその他のエラーや警告は表示されているので)
取り急ぎ論理的なエラーの可能性も考慮しいろいろと調査したところ、echo処理でデバッグプリント的なものを入れると最後まで処理が行われ、それらを消すと処理が止まってしまう状況にあることがわかりました。
その他メモリー不足の線も確実にないとは言えないので念のため512M程度まで増やしましたが状況は変わりません。
なお、PHPは5.2となります。
このような現象はなぜ起きてしまうのでしょうか。またどのように対処すればよいのでしょうか。
ソースコードをみないと何とも言えませんが….
プログラムのエラーがないとして...
1.外部との通信タイミングの違い。
2.プログラム途中で、変数がクリアされていたり、条件分岐で失敗している
とかでしょうか。
ご回答ありがとうございます。
2014/03/15 16:21:24ちょっとソースのサイズは大きすぎる(業務関連のもの)ので掲載できないのですが。
外部との通信等は行わないプログラムです。
単純に予め内部で設定した変数(配列)に対して特定の処理を行い、その結果を返すもの。
また、不思議な事としては、その与える変数を変更しない状態で実行するとプログラムが完走しないのですが、途中、適当にいくつか「echo」を挟みなんでもいいので出力させると完走する部分です。
最初はechoを挟んだ部分にゴミが混ざっているような事があるのかもと思い。前後の改行や空白を置き換えたりしたのですが、結果的には「echo」を挟み部分に意味などなく、どこでもよいので適当に設定すると完走するという状態です。
その後、メモリの使用量も計測したのですが、もっとも使った場合で6MB程度でしたのでやはりメモリーの使用量の影響でもなさそうです。
いくつか実行するサーバやPHPのバージョンも異なるもので実行したのですが、結論としてはどこで実行しても同様の結果になるので、何か問題があると思うのですが、さすがに「echoの有無」のみだとさっぱり意味が分からない状況です。
echoを最初や最後に持ってきても完走するんでしょうか。
2014/03/15 21:34:48#echoの位置に対する依存確認
出力内容を全てキャプチャする命令あったと思うので、そういうのでファイルに残してみるとか。
echoじゃなくファイルに出してみるとか。
#echo命令又は画面出力の有無に対する依存確認