2008-12-30 (火)
■ ignore_user_abort(true) の設定はあまり意味がない
今まで、PHP 4 で file_put_contents() 相当の処理を行うには、以下のように書いていました。
function write_file($filename, $data)
{
$fp = fopen($filename, file_exists($filename) ? 'r+b' : 'wb');
if ($fp === false) {
return false;
}
flock($fp, LOCK_EX);
$last = ignore_user_abort(1);
rewind($fp);
$bytes = fwrite($fp, $data);
fflush($fp);
ftruncate($fp, ftell($fp));
ignore_user_abort($last);
fclose($fp);
return $bytes;
}
ignore_user_abort() という珍しい関数を使っていますが、これは、 開発談義/23 - PukiWiki Plus! に書かれていたのを参考にしたものです。 でもこれって、本当に必要なのかな? とずっと思っていたのですが、最近、こんな記事を見つけました。
- GASOLINE STAND » ignore_user_abort=falseなのにスクリプトが止まらない
- 作業日報 | ignore_user_abort(false)でPHPが処理を中断しない件
どうも、画面表示を含まない処理なら、わざわざ ignore_user_abort(true) に設定する必要は無いみたいです。 ということで、実験してみました。
<?php
ignore_user_abort(false);
$filename = 'log.txt';
$fp = fopen($filename, 'ab');
flock($fp, LOCK_EX);
for ($i = 0; $i < 10; ++$i) {
fwrite($fp, "$i\n");
sleep(1);
}
fclose($fp);
こんなスクリプト log.php を作って、
- ブラウザ1から log.php にアクセス
- ブラウザ2から log.php にアクセス
- ブラウザ1の「中止」ボタンを押す
というのを数秒の間にやった場合、ログファイルがどうなるかというと、
0 // ブラウザ1からのリクエストに対する処理開始 1 2 3 // ブラウザ2からのリクエストに対する処理は、排他ロックがかかっているので後回し 4 5 6 // 「中止」ボタンが押されたが、処理はそのまま続けられる 7 8 9 // ブラウザ1からのリクエストに対する処理終了 0 // ブラウザ2からのリクエストに対する処理開始 1 2 3 4 5 6 7 8 9 // ブラウザ2からのリクエストに対する処理終了
のように、きちんと書き出されました。 やはり、上の file_put_contents() の例で言えば、ignore_user_abort() は不要っぽいです。
[コメントを書く]
本日のリンク元
- 61 google検索(ignore_user_abort)
- 30 google検索(ignore_user_abort)
- 19 google検索(ignore_user_abort)
- 15 google検索(ignore_user_abort)
- 12 google検索(ignore_user_abort)
- 6 google検索(ignore_user_abort)
- 6 google検索(ignore_user_abort)
- 5 google検索(PHP ignore_user_abort)
- 5 google検索(php ignore_user_abort)
- 5 google検索(ignore_user_abort)
- 5 google検索(ignore_user_abort)
- 4 http://www.google.co.jp/url?sa=t&source=web&cd=20&...
- 4 google検索(ignore_user_abort)
- 4 google検索(ignore_user_abort)
- 4 google検索(ignore_user_abort)
- 4 google検索(ignore_user_abort)
- 4 google検索(PHP ignore_user_abort)
- 4 google検索(f)
- 4 http://www.google.co.jp/hws/search?hl=ja&q=ignore_...
- 4 http://www.google.co.jp/hws/search?hl=ja&client=fe...
- 3 google検索(0h)
- 3 google検索(php ignore_user_abort)
- 3 google検索(ignore_user_abort)
- 3 google検索(ignore_user_abort)
- 3 google検索(ignore_user_abort)
- 3 google検索(ignore_user_abort)
- 2 https://www.google.co.jp/
- 2 google検索(ignore_user_abort)
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ignore_us...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ignore_us...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ignore_us...
- 2 google検索(php ignore_user_abort http)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort())
- 2 google検索(php ignore_user_abort)
- 2 google検索(php リクエスト処理 ロック)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort(true))
- 2 google検索(ignore_user_abort(1))
- 2 google検索(ignore_user_abort())
- 2 google検索(php ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort php)
- 2 google検索(ignore_user_abort(1);)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 google検索(php ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 google検索(ignore_user_abort)
- 2 http://www.google.co.jp/
- 2 msn検索(Ignore 意味)
- 1 http://www.revulo.com/
- 1 google検索(ignore_user_abort(true);)
- 1 google検索(php ignore_user_abort)
- 1 google検索(PHP true 意味)
- 1 google検索(PHP ignore_user_abort)
- 1 google検索(php ignore_user_abort)
- 1 google検索(ignore_user_abort)
- 1 google検索(php ignore_user_abort(true))
- 1 google検索(ignore_user_abort ブラウザ)
- 1 google検索(ignore_user_abort)
- 1 google検索(php ignore_user_abort)
- 1 google検索(ie8 表示できない .log)
- 1 google検索(ignore_user_abort)
- 1 google検索(ignore_user_abort)
- 1 google検索(ignore_user_abort)
- 1 google検索(ignore_user_abort(1);)
- 1 google検索(ignore_user_abort)
- 1 google検索(f)
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=9&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=52&...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=5&s...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=4&s...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=3&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=3&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=3&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=3&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=3&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=2&v...
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=1&v...
