Edit report at https://bugs.php.net/bug.php?id=65453&edit=1
ID: 65453
Comment by: oli dot laurel at arcor dot de
Reported by: oli dot laurel at arcor dot de
Summary: Readfile() + mpg = http status 500, windows server
2008 r2 sp1, php 5.5.1
Status: Feedback
Type: Bug
Package: IIS related
Operating System: Windows Server 2008 R2 SP1
PHP Version: 5.5.1
Block user comment: N
Private report: N
New Comment:
hi,
thank you for reply.
- does the same happen when you out a plain text file instead of mpeg, also
using appropriate content-type and --limit-rate?
i changed content-type to text/plain and renamed movie.mpg to movie.txt. No
behaviour change. If i abort download i will also get a 500.
- does it happen when you request static content using wget with --limit-rate?
no, if i just download a file for example http://127.0.0.1/movie.mpg all works
fine. Also if i abort download.
Please use following configuration:
Description
------------
- Installed a blank Windows Server 2008 R2 SP1 Standard, added Role IIS &
Feature CGI.
- Extracted 5.5.1 VC11 x86 Non Thread Safe to c:\Program Files (x86)\php
- Installed vcredist_x86.exe
- Configuration of IIS:
added Handler Mappings in IIS
Request path: *.php
Module: FastCgiModule
Executable: c:\Program Files (x86)\php\php-cgi.exe
Name: PHP via FastCgi
- Then added 2 files to C:\inetpub\wwwroot index.php & movie.mpg (6MB)
- add download.cmd to c:
- Installed wget.
- No modification of php.ini, no malware scanner, ...
- start c:\download.cmd
[download.cmd]
--------------
"C:\Program Files\GnuWin32\bin\wget.exe" --limit-rate=20000
http://127.0.0.1/index.php
[Console Output]
----------------
C:\>"C:\Program Files\GnuWin32\bin\wget.exe" --limit-rate=20000 http://127.0.0.1
/index.php
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files\GnuWin32/etc/wgetrc
--2013-08-16 09:35:00-- http://127.0.0.1/index.php
Verbindungsaufbau zu 127.0.0.1:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 6702080 (6,4M) [text/plain]
In »index.php.7« speichern.
62% [=======================> ] 4.193.792 --.-K/s in 5m 33s
2013-08-16 09:40:35 (12,3 KB/s) - Lesefehler bei Byte 4193792/6702080 (Connectio
n reset by peer). Erneuter Versuch.
--2013-08-16 09:40:36-- (Versuch: 2) http://127.0.0.1/index.php
Verbindungsaufbau zu 127.0.0.1:80... verbunden.
HTTP Anforderung gesendet, warte auf Antwort... 200 OK
Länge: 6702080 (6,4M) [text/plain]
In »index.php.7« speichern.
1% [ ] 131.072 19,5K/s eta 8m 59s
[index.php]
-----------
<?php
$track = "movie.txt";
if (file_exists($track)) {
header("Content-Type: text/plain");
header('Content-Length: ' . filesize($track));
header('Content-Disposition: inline; filename="movie.txt"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($track);
exit;
} else {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
echo "no file";
}
?>
[movie.txt] 6MB (no change if its a real movie or not)
---------------
asdfghasdfghasdfgh...
[w3svc1.log]
------------
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2013-08-16 07:38:26
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username
c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2013-08-16 07:38:26 127.0.0.1 GET /index.php - 80 - 127.0.0.1 Wget/1.11.4 500 0
2147500037 205717
2013-08-16 07:41:04 127.0.0.1 GET /index.php - 80 - 127.0.0.1 Wget/1.11.4 500 0
64 28672
Previous Comments:
------------------------------------------------------------------------
[2013-08-15 16:21:36] [email protected]
This looks like server misconfig at first glance. In the BT there is nothing
about PHP. Combined with
the fact you find nothing in the error log, it might be not PHP.
How did you get that BT? Debug symbols should be used for PHP as well. And when
IIS starts, you should
attach the debugger to the clean PHP fcgi process, so then debugger takes over.
Some more points before i go try it
- does the same happen when you out a plain text file instead of mpeg, also
using appropriate content-
type and --limit-rate?
- does it happen when you request static content using wget with --limit-rate?
- please post the request/response headers
Thanks.
------------------------------------------------------------------------
[2013-08-15 07:41:11] oli dot laurel at arcor dot de
Description:
------------
- Installed a blank Windows Server 2008 R2 SP1 Standard, added Role IIS &
Feature CGI.
- Extracted 5.5.1 VC11 x86 Non Thread Safe to c:\Program Files (x86)\php
- Installed vcredist_x86.exe
- Configuration of IIS:
added Handler Mappings in IIS
Request path: *.php
Module: FastCgiModule
Executable: c:\Program Files (x86)\php\php-cgi.exe
Name: PHP via FastCgi
- Then added 2 files to C:\inetpub\wwwroot index.php & movie.mpg (6MB)
- Installed wget.
- No modification of php.ini, no malware scanner, ...
Every time i download index.php with following script i get an HTTP-Status 500
in Access Log.
[download.cmd]
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" --limit-rate=40000
http://127.0.0.1/index.php
Multiple downloads cause the server to crash and return Status 500 for every
request (normal html pages, images, text files, ...).
Hope backtrace helps to find the problem.
Thread 6 - System ID 3884
Entry point w3tp+2040
Create time 12.08.2013 14:08:38
Time spent in user mode 0 Days 0:0:0.0
Time spent in kernel mode 0 Days 0:0:0.0
Full Call Stack
Function Arg 1 Arg 2 Arg 3 Arg 4 Source
ntdll!NtTerminateProcess 00000000`03212eb0 00000000`02a7a800
00000000`00000001 00000000`00000000
KERNELBASE!TerminateProcess+2f 00000000`00ff6ae0 00000000`778f598e
00000000`01c869f0 00000000`00000000
iisfcgi+94da 00000000`00ff3410 00000000`00fe0cf0 00000000`800703e3
00000000`778c8884
iisfcgi+68aa 00000000`00ff3410 00000000`00000010 00000000`0045d6b0
00000000`004637e0
iisfcgi+556f 00000000`00000000 00000000`800703e3 00000000`027e12f8
000007fe`f5db6585
iisfcgi+105f6 00000000`00000000 00000000`00020000 00000000`00fe0cf0
00000000`00000000
iiscore+ba3c 00000000`019d46c8 00000000`00000000 00000000`00000000
00000000`778ac1e0
iiscore+46a4 00000000`779a4440 00000000`019d46c0 00000000`019d46c8
00000000`00000001
iiscore+a775 00000000`00000000 00000000`02753a30 00000000`00000008
00000000`02753c28
iiscore+5a03 00000000`019d46c0 00000000`00020000 00000000`019d46c0
00000000`00000000
iiscore+1741 00000000`005134d0 00000000`00000000 00000000`00000000
000007fe`f70c1107
w3dt!UlAtqGetContextProperty+a2 00000000`005134d0 00000000`00000000
000007fe`faeb0000 00000000`00000000
w3dt!UlAtqGetContextProperty+8c 00000000`00000000 000007fe`fde3379b
00000000`00000000 00000000`00000000
w3tp+1fba 00000000`00020000 00000000`019d3aa8 000007fe`faa31080
00000000`00000000
w3tp+2024 00000000`00000000 00000000`004be870 00000000`004be870
000007fe`faeb0000
w3tp+20a1 00000000`00000000 00000000`00000000 00000000`00000000
00000000`00000000
kernel32!BaseThreadInitThunk+d 00000000`00000000 00000000`00000000
00000000`00000000 00000000`00000000
ntdll!RtlUserThreadStart+21 00000000`00000000 00000000`00000000
00000000`00000000 00000000`00000000
Exception Information
In
w3wp__DefaultAppPool__PID__3596__Date__08_12_2013__Time_02_09_39PM__703__ntdll!ZwTerminateProcess.dmp
the assembly instruction at ntdll!DbgBreakPoint in
C:\Windows\System32\ntdll.dll from Microsoft Corporation has caused a
breakpoint exception (0x80000003) on thread 6
Module Information
Image Name: C:\Windows\System32\ntdll.dll Symbol Type: Export
Base address: 0x00000003`00905a4d Time Stamp: Thu Nov 17 07:32:46 2011
Checksum: 0x00000000`00000000 Comments:
COM DLL: False Company Name: Microsoft Corporation
ISAPIExtension: False File Description: NT Layer DLL
ISAPIFilter: False File Version: 6.1.7601.17725 (win7sp1_gdr.111116-1503)
Managed DLL: False Internal Name: ntdll.dll
VB DLL: False Legal Copyright: © Microsoft Corporation. All rights
reserved.
Loaded Image Name: ntdll.dll Legal Trademarks:
Mapped Image Name: Original filename: ntdll.dll
Module name: ntdll Private Build:
Single Threaded: False Product Name: Microsoft® Windows® Operating System
Module Size: 1,66 MBytes Product Version: 6.1.7601.17725
Symbol File Name: ntdll.dll Special Build: &
Test script:
---------------
[index.php]
<?php
$track = "movie.mpg";
if (file_exists($track)) {
header("Content-Type: audio/mpeg");
header('Content-Length: ' . filesize($track));
header('Content-Disposition: inline; filename="movie.mpg"');
header('X-Pad: avoid browser bug');
header('Cache-Control: no-cache');
readfile($track);
exit;
} else {
header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
echo "no file";
}
?>
[download.cmd]
"C:\Program Files (x86)\GnuWin32\bin\wget.exe" --limit-rate=40000
http://127.0.0.1/index.php
Expected result:
----------------
HTTP Status in Access-Log of IIS should be 200
Actual result:
--------------
Every time file is downloaded with "--limit-rate=40000" Access Log show HTTP
Status 500. No entries can by found in php Log.
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=65453&edit=1