ID: 40556 Updated by: [EMAIL PROTECTED] Reported By: unreal at slashorg dot net -Status: Assigned +Status: Feedback Bug Type: CGI related Operating System: Linux 2.6.18 PHP Version: 5.2.1 Assigned To: dmitry New Comment:
I am still not able to reproduce the problem. Could you please attach debugger to stuck php process and show its backtrace. Previous Comments: ------------------------------------------------------------------------ [2007-02-22 12:01:19] unreal at slashorg dot net OK, I've done quite a lot more testing, and here are the results (Apache 2.0.59/mod_fastcgi 2.4.2/PHP 5.2.1): - I cannot reproduce the bug with your code either. - The following code causes PHP workers to lock up if you abort during download (and only if you abort): http://www.slashorg.net/ex/crash.txt Note: notice the "session_start();" line - If I remove the "session_start();" line, PHP doesn't crash anymore, even when I abort the download. It seems this bug is more complicated than I thought, I hope you'll be able to reproduce it. Thanks for your help. ------------------------------------------------------------------------ [2007-02-21 15:18:30] [EMAIL PROTECTED] I am not able to reproduce the problem. I tried to abort downloading from IE and download part of file running the following PHP script from command line: <?php $f = fopen("http://127.0.0.1/test/bug40556.php", "r"); $s = fread($f, 1024*1024); var_dump($s); fclose($f); ?> both cases work fine (Apache-1.3.28 with mod_fastcgi or ZendEnabler on Linux 2.6.19) ------------------------------------------------------------------------ [2007-02-20 12:48:13] unreal at slashorg dot net I've just upgraded to 5.2.2-dev as you suggested, and that hasn't fixed the problem. My server is still dying as soon as a connection gets aborted. ------------------------------------------------------------------------ [2007-02-20 12:14:53] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip ------------------------------------------------------------------------ [2007-02-20 12:10:10] unreal at slashorg dot net Description: ------------ PHP doesn't handle browser abort correctly. - Use PHP to serve a file, using the code below - Start downloading the file, and then abort. Reproduce code: --------------- header('Pragma: public'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Cache-Control: public'); header('Content-Type: application/force-download'); header('Content-Type: application/octet-stream'); header('Content-Type: application/download'); header('Content-Disposition: attachment; filename="' . basename($path) . '";'); header('Content-Transfer-Encoding: binary'); header('Content-Length: ' . filesize($path)); $handle = fopen($path, 'rb'); do { $data = fread($handle, 8192); if (strlen($data) == 0) { break; } echo($data); } while (true); fclose($handle); Expected result: ---------------- After browser abord, the server should remain responsive. Actual result: -------------- * Lots of errors in error_log: 'FastCGI: comm with server "/usr/local/www/cgi/php-cgi/php5.fcgi" aborted: idle timeout (30 sec)' 'FastCGI: incomplete headers (0 bytes) received from server "/usr/local/www/cgi/php-cgi/php5.fcgi"' * Server stops responding, then after some time (maybe 5 mins), starts responding again. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=40556&edit=1