#38757 [Fbk->Opn]: MultiPart Form Uploads fail with FastCGI
| From: | davidb at pins dot net | Date: | Tue, 12 Sep 2006 15:50:37 +0000 |
| Subject: | #38757 [Fbk->Opn]: MultiPart Form Uploads fail with FastCGI | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-102051@lists.php.net to get a copy of this message | ||
ID: 38757
User updated by: davidb at pins dot net
Reported By: davidb at pins dot net
-Status: Feedback
+Status: Open
Bug Type: Apache related
Operating System: Solaris 8
PHP Version: 5.1.6
Assigned To: dmitry
New Comment:
Greetings.
Is the poll() timing out, even though it appeared to get all of the
data in fd4? Or, is there additional data that isn't getting passed on
for some reason? I can send the entire truss if you'd like.
We're running Apache 1.3.33, Solaris 8, on a dual-processor SPARC. I
believe it's the 2.4.2 FastCGI. I do note that the read() that a valid
post gets is different.
In a good truss:
poll(0xFFBED8F0, 1, 1000) = 1
read(4, "0101\001\0\b\0\0", 8) = 8
read(4, "\001\0\0\0\0\0\0", 8) = 8
read(4, "0104\001\015\0\0", 8) = 8
read(4, 0xFFBDD918, 21) = 21
0E05 C O N T E N T _ L E N G T H 6 1 0 1 5
read(4, "0104\001\0 V\0\0", 8) = 8
read(4, 0xFFBDD918, 86) = 86
\f H C O N T E N T _ T Y P E m u l t i p a r t / f o r m - d a t
a ; b o u n d a r y = - - - - - - - - - - - - - - - - - - - -
- - - - - - - 1 9 1 9 4 1 1 2 6 6 2 0 5 9 7
read(4, "0104\001\0 =\0\0", 8) = 8
read(4, 0xFFBDD918, 61) = 61
\r . D O C U M E N T _ R O O T / e x p o r t / h t t p d / D O M
A I N S / t e s t 2 . f o r w a r d . c o m / h t d o c s
The poll seems to return with a 1, but the data that's read in is the
same. Is there something about the submit from different users that
would cause the poll() to return differently? I have network snoops,
as well.
Previous Comments:
------------------------------------------------------------------------
[2006-09-11 07:55:00] dmitry@php.net
From the strace log I see: PHP FastCGI server accepts connection and
waits 1 sec (in pool()) for any input from HTTP client. It doesn't get
any data in a second and does save connection close.
Could you describe your environment: CPU speed, WebServer, fastcgi
plugin, fastcgi configuraion...
------------------------------------------------------------------------
[2006-09-09 21:09:16] tony2001@php.net
Dmitry, could you plz check it out?
------------------------------------------------------------------------
[2006-09-09 02:05:01] davidb at pins dot net
Well, I tried with the latest 5.2b snapshot, and now it's broken for my
PC at home also. Appears to be the identical problem - php just
silently stops processing after it reads in the POST data, closes the
socket, and then waits for the next request, throwing a 500 server
error.
Please.
------------------------------------------------------------------------
[2006-09-08 22:09:08] tony2001@php.net
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
------------------------------------------------------------------------
[2006-09-08 22:04:15] davidb at pins dot net
Description:
------------
Greetings.
I'm currently observing a reproducible version of bug #26647 in the PHP
5.1 train. For a subset of users running mostly Mac but some PC
browsers, the PHP process unceremoniously exists witout comment when
the form is POST'ed. A truss of the PHP FastCGI process shows PHP
reading in the text (incidently, it's also pointed out a performance
issue where php's doing a read() of 8 bytes at a time from the FastCGI
stream instead of 8kB at at a time, but I digress). The problem
appears to go away when I switch to a non-FastCGI version.
The broken users are broken consistently - it would be possible (and
easy) to gdb trace it and see why it's exiting. Here's the start/end
of the truss:
accept(0, 0xFFBEDA50, 0xFFBED99C, 1) = 4
fcntl(0, F_SETLK, 0xFFBEDA28) = 0
poll(0xFFBED8F0, 1, 1000) = 0
shutdown(4, 1, 1) = 0
recv(4, "0101\001\0\b\0\0", 8, 0) = 8
recv(4, "\001\0\0\0\0\0\0", 8, 0) = 8
recv(4, "0104\001\015\0\0", 8, 0) = 8
recv(4, "0E05 C O N T E N", 8, 0) = 8
recv(4, " T _ L E N G T H", 8, 0) = 8
recv(4, " 8 3 5 1 90104\0", 8, 0) = 8
recv(4, "01\0 d\0\0\f V C", 8, 0) = 8
recv(4, " O N T E N T _ T", 8, 0) = 8
recv(4, " Y P E m u l t i", 8, 0) = 8
recv(4, " p a r t / f o r", 8, 0) = 8
recv(4, " m - d a t a ; ", 8, 0) = 8
recv(4, " b o u n d a r y", 8, 0) = 8
recv(4, " m L b O u N d A", 8, 0) = 8
(many many lines)
recv(4, " r Y - -\r\n0105", 8, 0) = 8
recv(4, "\001\0\0\0\0", 8, 0) = 6
recv(4, 0xFFBEDA28, 8, 0) = 0
close(4) = 0
fcntl(0, F_SETLKW, 0xFFBEDA28) = 0
accept(0, 0xFFBEDA50, 0xFFBED99C, 1) (sleeping...)
Bam. Goodbye. No error, no nothing.
Reproduce code:
---------------
<html>
<head>
</head>
<body>
<form method="post" action="response.php"
enctype="multipart/form-data">
<input name="test" type="file">
<input name="submit" value="submit" type="submit" />
</form>
</body>
</html>
Expected result:
----------------
The response.php should work - note, however, that php never even
attempts to open the response.php file, which is just a trivial "file
uploaded" message, no attempt to save.
Actual result:
--------------
See above truss - php just exits.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=38757&edit=1