Edit report at http://bugs.php.net/bug.php?id=50210&edit=1
ID: 50210 Comment by: evert at rooftopsolutions dot nl Reported by: tyler dot thackray at gmail dot com Summary: apache: PHP won't parse multipart/form-data if it was originally chunk encoded. Status: Open Type: Feature/Change Request Package: Feature/Change Request Operating System: Unix (probably all) PHP Version: 5.2.11 New Comment: I believe I might have ran across the same problem (logged as #51191). In my case the problem is specific to using the FastCGI sapi. It doesn't occur using mod_php. Previous Comments: ------------------------------------------------------------------------ [2009-12-09 22:39:24] tyler dot thackray at gmail dot com I haven't gotten any feedback regarding this issue in some time. Sorry, that code is the most compact I can make it while still showing the issue. Please let me know if you need anything else to evaluate this bug. ------------------------------------------------------------------------ [2009-11-18 20:27:05] tyler dot thackray at gmail dot com Here is the test code, please excuse its length but this is not a simple scenario. The test involves two scripts "sender.php" and "receiver.php". RECEIVER.PHP: <?php $input = file_get_contents('php://input'); $stdin = file_get_contents('php://stdin'); print "FILES: "; print_r($_FILES); print("<br>POST: "); print_r($_POST); print("<br>input: ".$input); print("<br>stdin: ".$stdin); ?> SENDER.PHP <?php // when 'true' multipart data is NOT parsed, but is present at php://stdio // when 'false' multipart is parsed into $_FILES and $_POST $chunked = false; $body1 = "--AaB03x\r\n". "Content-Disposition: form-data; name=\"forPOST\"\r\n". "\r\n". "1257880790\r\n". "--AaB03x\r\n"; $body2 = "Content-Disposition: form-data; name=\"test_file\"; filename=\"test.file\"\r\n". "Content-Type: application/octet-stream\r\n". "\r\n". "binary data\r\n". "--AaB03x--"; // change the POST to the location of your "receiver.php" $header = "POST /test/receiver.php HTTP/1.1\r\n". "Connection: close\r\n". "Host: ".$_SERVER['HTTP_HOST']."\r\n". "Content-Type: multipart/form-data, boundary=AaB03x\r\n"; if ($chunked){ $body = dechex(strlen($body1))."\r\n".$body1."\r\n". dechex(strlen($body2))."\r\n".$body2."\r\n0\r\n\r\n"; $header .= "Transfer-Encoding: chunked\r\n"; } else{ $body = $body1 . $body2; $header .= "Content-Length: ".strlen($body)."\r\n"; } $header .= "\r\n"; $final = $header . $body; print "<pre>".$final."<br><br>"; $fp = fsockopen($_SERVER['HTTP_HOST'], 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { fwrite($fp, $final); while (!feof($fp)) { print fgets($fp, 128); } fclose($fp); } print "</pre>"; ?> ------------------------------------------------------------------------ [2009-11-18 17:01:57] tyler dot thackray at gmail dot com A simple HTML form would not transfer the data as "transfer-encoding: chunked". Unfortunately, it requires 3rd party software to reproduce this error short of creating a complex PHP script that can simulate both chunked and multipart. I will spend some time today on a socket-based example which sends data from one page to another, but it is less than simple. The test I have is fairly extensive, but I'll attempt to dumb it down. ------------------------------------------------------------------------ [2009-11-18 16:50:50] j...@php.net Need reproduce script. Uploading simple form with files works just fine for me under Apache2.. ------------------------------------------------------------------------ [2009-11-17 22:49:28] tyler dot thackray at gmail dot com Excuse me, I accidentally mixed up the Expect and Actual result. ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/bug.php?id=50210 -- Edit this bug report at http://bugs.php.net/bug.php?id=50210&edit=1