ホームページ  >  記事  >  バックエンド開発  >  実際にはバックグラウンドで自動的に実行されます。これはphp5.5へのアップデートですか?

実際にはバックグラウンドで自動的に実行されます。これはphp5.5へのアップデートですか?

WBOY
WBOYオリジナル
2016-06-23 13:43:53934ブラウズ

非常に単純なコード

header('Content-Type:text/html;charset=utf-8');date_default_timezone_set('PRC');set_time_limit(0);$date=date("H:i:s");while($date<'11:14:00') //这句测试时要调整一下{$date=date("H:i:s");file_put_contents("test.txt", $date);}


以前の経験によると、実行後にブラウザを閉じると、ignore_user_abort(true); が使用されない限り、プログラムは停止するはずです。
ここ2日間、システム環境をapache2.4+php5.5にアップデートしたところ、ブラウザを閉じても設定時間が経過するまでプログラムが実行され続ける問題が発生しました。
それは私が過去に理解した概念に問題があるのか​​、更新された設定に問題があるのか​​、それとも何か他のものですか?


ディスカッションへの返信(解決策)

では、あなたの経験は間違っています!
PHP の説明によると:
リモート ユーザーが STOP ボタンをクリックし、スクリプトがデータを再度出力しようとすると、PHP は接続が中断されたことを検出し、クローズ トリガー関数を呼び出します。

プログラムには出力がないため、php はユーザーがオフラインであることを検出せず、プログラムは実行を継続します

php が実行を終了しないのは正常です。それはいつもそうだった。

以前これを試しましたが、無限ループにはまってしまい、php max_execution_time の期限が切れるまで待たなければなりませんでした。


案の定、それは私の問題でした。出力を追加した後、無視_user_abortを追加したようです...

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。