[PHP]タイムアウト時間を設定する、について
Read More
PHPではタイムアウト時間を設定することができる。
php.iniではmax_execution_timeというディレクティブが存在し、
関数ではset_time_limit()、あるいはini_set('max_execution_time', {値})というものがある。
それは知っている。
今日、山田祥寛先生が書いた「プチリファレンスPHP4」を見ていて、set_time_limit()の項目の所で気になる記述を見つけた。
とりあえず原文ママ載せる↓
もう一度いう、これはset_time_limit()の説明ページのすぐ下に書いてあった記述だ。
えええ?
これ自分の読解力がおかしくないのであれば、set_time_limit()の関数よりphp.iniの設定の方が優先される、という具合に読めるのだが…
でも"こちらが優先されます"って言葉も何か変だな。
普通なら"そちらが優先されます"だよなあ。
うーん…
いやいやいや。
まあ試してみよう。
ってことで早速以下のように検証してみた。
まず、php.iniの設定を確認した。
ふむ、60秒ですな。
次にそのままの状態でphpinfo()をしてみた。
ふむ、当たり前の結果が出た。
次に、phpファイルの先頭でset_time_limit(0)をした直後にphpinfo()をしてみた。
結果はごらんの通り。
ちゃんとphp.iniの設定を上書きしている。
えー、この人が書いた本てめちゃめちゃ信用してるんだけどー
一応phpマニュアルを見てみた。
まずはmax_execution_time。
セーフモードで実行している場合にはこの設定を ini_set() で変更することはできません。
ふむふむ。
セーフモードではmax_execution_timeは変更できん、と。
これは大事なことだな。
次にphpマニュアルでset_time_limit()をみた。
えーと、何も設定をしていなければデフォで30秒が適用されるってことね。
ここに、
「php.iniでmax_execution_timeの 値が定義されている場合にはそれを用います。」
とは書いてあるが、set_time_limit()よりそっちが強いとは一言も書いてない。
でもたぶん山田先生はこの、
"デフォルトの30秒より、php.iniのmax_exeution_timeの値が定義されている場合はそれを用いる"
ってのが言いたかったんだろうなあ。
いやでもあの文章じゃわからんて。
それにしてもタイムアウトカウンタの動きが面白いなあ。
スクリプト実行までに25秒かかる状況ってのが想像できんけど。
通信状態が悪かったりとかかね。
まあ結論。
set_time_limit()で普通にphp.iniの設定を上書きできる
念のためini_set('max_execution_time', 0)も試したけど結果は同じだった。
山田先生、ちゃんとわかるように書いて下さい(_ _)
普通に勘違いしちゃったよ。
ちなみに試した環境はPHP5.3.0であって、PHP4では試してない。
もしかしたらPHP4の環境であればset_time_limit()を記述していてもphp.iniの設定が勝つ結果になるのかもしれない。
ならんと思うが
php.iniではmax_execution_timeというディレクティブが存在し、
関数ではset_time_limit()、あるいはini_set('max_execution_time', {値})というものがある。
それは知っている。
今日、山田祥寛先生が書いた「プチリファレンスPHP4」を見ていて、set_time_limit()の項目の所で気になる記述を見つけた。
とりあえず原文ママ載せる↓
注意 php.ini上でmax_execution_timeパラメータが設定されている場合は、こちらが優先されます。
もう一度いう、これはset_time_limit()の説明ページのすぐ下に書いてあった記述だ。
えええ?
これ自分の読解力がおかしくないのであれば、set_time_limit()の関数よりphp.iniの設定の方が優先される、という具合に読めるのだが…
でも"こちらが優先されます"って言葉も何か変だな。
普通なら"そちらが優先されます"だよなあ。
うーん…
いやいやいや。
まあ試してみよう。
ってことで早速以下のように検証してみた。
まず、php.iniの設定を確認した。
max_execution_time = 60
ふむ、60秒ですな。
次にそのままの状態でphpinfo()をしてみた。
ふむ、当たり前の結果が出た。
次に、phpファイルの先頭でset_time_limit(0)をした直後にphpinfo()をしてみた。
結果はごらんの通り。
ちゃんとphp.iniの設定を上書きしている。
えー、この人が書いた本てめちゃめちゃ信用してるんだけどー
一応phpマニュアルを見てみた。
まずはmax_execution_time。
セーフモードで実行している場合にはこの設定を ini_set() で変更することはできません。
ふむふむ。
セーフモードではmax_execution_timeは変更できん、と。
これは大事なことだな。
次にphpマニュアルでset_time_limit()をみた。
スクリプトが実行可能な秒数を設定します。 この制限にかかるとスクリプトは致命的エラーを返します。 デフォルトの制限値は 30 秒です。 なお、php.iniでmax_execution_timeの 値が定義されている場合にはそれを用います。 この関数がコールされた場合、 タイムアウトカウンタをゼロから再スタートします。 言いかえると、タイムアウトがデフォルトの 30 秒で スクリプト実行までに 25 秒かかる場合に、 set_time_limit(20) を実行すると、スクリプトは、 タイムアウトまでに全体で 45秒 の間実行されます。†PHPマニュアルよりhttp://www.php.net/manual/ja/function.set-time-limit.php
えーと、何も設定をしていなければデフォで30秒が適用されるってことね。
ここに、
「php.iniでmax_execution_timeの 値が定義されている場合にはそれを用います。」
とは書いてあるが、set_time_limit()よりそっちが強いとは一言も書いてない。
でもたぶん山田先生はこの、
"デフォルトの30秒より、php.iniのmax_exeution_timeの値が定義されている場合はそれを用いる"
ってのが言いたかったんだろうなあ。
いやでもあの文章じゃわからんて。
それにしてもタイムアウトカウンタの動きが面白いなあ。
スクリプト実行までに25秒かかる状況ってのが想像できんけど。
通信状態が悪かったりとかかね。
まあ結論。
set_time_limit()で普通にphp.iniの設定を上書きできる
念のためini_set('max_execution_time', 0)も試したけど結果は同じだった。
山田先生、ちゃんとわかるように書いて下さい(_ _)
普通に勘違いしちゃったよ。
ちなみに試した環境はPHP5.3.0であって、PHP4では試してない。
もしかしたらPHP4の環境であればset_time_limit()を記述していてもphp.iniの設定が勝つ結果になるのかもしれない。
ならんと思うが
Category "PHP" の最新記事
- [解決済]Windows10環境でAmazonS3にアップしたファイルをunlinkするとPermission deniedのエラーが発生する (0)
- [PHP] 文字列の前後の全角スペースを取り除くには (0)
- JSON内で扱えるデータ型の種類 (0)
- [PHP]FuelPHPでRequestクラスのレスポンス内容がおかしくなる (0)
- [PHP]null値ならデフォルト値を返すifnull()の使い方 (0)
- [PHP]効率よくFTP上のファイルの存在を確認する方法 (0)
- [PHP]効率よくFTP上のファイル情報を取得する方法 (0)
- シェルで文字に色を付ける方法と色の種類 (0)
- [PHP]フォルダパスの末尾のスラッシュを削除する (0)
- [PHP]ZipArchiveクラスを使ってzipファイルを作成する (0)