|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-08-25 19:36 UTC] aaron at gwmicro dot com
Description:
------------
After uploading a file using a multipart/form-data HTML form, the resulting file name is missing the initial character (i.e. readme.txt becomes eadme.txt).
Server: Apache/2.2.19 (Win32) mod_ssl/2.2.19 OpenSSL/1.0.0d PHP/5.3.8
Test script:
---------------
<FORM ACTION="<? echo $_SERVER['PHP_SELF']; ?>" METHOD="POST" ENCTYPE="multipart/form-data">
File: <INPUT TYPE="file" NAME="filename">
<INPUT TYPE="submit" VALUE="go">
</FORM>
<?
if (isset($_FILES)) {
var_dump($_FILES);
}
?>
array(1) { ["filename"]=> array(5) { ["name"]=> string(10) "eadme.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(31) "C:\temp\file_upload\php7D44.tmp" ["error"]=> int(0) ["size"]=> int(3420) } }
Expected result:
----------------
$_FILES['filename']['name'] should be intact rather than missing the first character.
["name"]=> string(10) "readme.txt"
Actual result:
--------------
$_FILES['filename']['name'] is missing the first character:
["name"]=> string(10) "eadme.txt"
Patchesfix-upload-win-mqgpc-bug-55510.patch (last revision 2011-08-29 02:43 UTC by arpad@php.net)Pull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 02:00:01 2025 UTC |
Here are the capture contents using Wireshark and PHP 5.3.8: No. Time Source Destination Protocol Length Info 1203 7.252093 10.0.0.251 184.18.147.3 HTTP 986 POST /private/aaron/filename.php HTTP/1.1 (text/plain) Frame 1203: 986 bytes on wire (7888 bits), 986 bytes captured (7888 bits) Ethernet II, Src: AsustekC_8e:2f:bb (00:26:18:8e:2f:bb), Dst: 3com_49:bb:06 (00:01:02:49:bb:06) Internet Protocol Version 4, Src: 10.0.0.251 (10.0.0.251), Dst: 184.18.147.3 (184.18.147.3) Transmission Control Protocol, Src Port: 65260 (65260), Dst Port: http (80), Seq: 1, Ack: 1, Len: 932 Hypertext Transfer Protocol MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "---------------------------9503744825200" [Type: multipart/form-data] First boundary: -----------------------------9503744825200\r\n Encapsulated multipart part: (text/plain) Content-Disposition: form-data; name="filename"; filename="readme.txt"\r\n Content-Type: text/plain\r\n\r\n Line-based text data: text/plain Hello! This is a test. Last boundary: \r\n-----------------------------9503744825200--\r\n No. Time Source Destination Protocol Length Info 1205 7.252782 10.0.0.1 10.0.0.251 HTTP 986 POST /private/aaron/filename.php HTTP/1.1 (text/plain) Frame 1205: 986 bytes on wire (7888 bits), 986 bytes captured (7888 bits) Ethernet II, Src: 3com_49:bb:06 (00:01:02:49:bb:06), Dst: AsustekC_8e:2f:bb (00:26:18:8e:2f:bb) Internet Protocol Version 4, Src: 10.0.0.1 (10.0.0.1), Dst: 10.0.0.251 (10.0.0.251) Transmission Control Protocol, Src Port: 65260 (65260), Dst Port: http (80), Seq: 1, Ack: 1, Len: 932 Hypertext Transfer Protocol MIME Multipart Media Encapsulation, Type: multipart/form-data, Boundary: "---------------------------9503744825200" [Type: multipart/form-data] First boundary: -----------------------------9503744825200\r\n Encapsulated multipart part: (text/plain) Content-Disposition: form-data; name="filename"; filename="readme.txt"\r\n Content-Type: text/plain\r\n\r\n Line-based text data: text/plain Hello! This is a test. Last boundary: \r\n-----------------------------9503744825200--\r\nI started going back version by version from 5.3.8 to see where the problem started, and it seems to have begun with 5.3.7, as 5.3.6 works correctly. Once again, I'm just replacing PHP builds -- I'm not modifying any else. With 5.3.6, I get back what I would expect: array(1) { ["filename"]=> array(5) { ["name"]=> string(10) "readme.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(31) "C:\temp\file_upload\php594F.tmp" ["error"]=> int(0) ["size"]=> int(22) } } With 5.3.7 and 5.3.8, I get back the missing first letter: array(1) { ["filename"]=> array(5) { ["name"]=> string(10) "eadme.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(31) "C:\temp\file_upload\php594F.tmp" ["error"]=> int(0) ["size"]=> int(22) } } With 5.4.beta1-dev, I'm back to getting everything that I expect: array(1) { ["filename"]=> array(5) { ["name"]=> string(10) "readme.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(31) "C:\temp\file_upload\php594F.tmp" ["error"]=> int(0) ["size"]=> int(22) } }