Edit report at https://bugs.php.net/bug.php?id=60788&edit=1

 ID:                 60788
 Comment by:         valentin_grigoras at yahoo dot com
 Reported by:        valentin_grigoras at yahoo dot com
 Summary:            Curl file upload send bogus data to lighttpd web
                     server
 Status:             Bogus
 Type:               Bug
 Package:            cURL related
 Operating System:   Linux/Windows
 PHP Version:        5.3.9
 Block user comment: N
 Private report:     N

 New Comment:

I don't see how it is a curl issue, since if I do the upload from command line, 
it works as expected, including from the servers with PHP 5.3.9:

curl -F "myfile=@/tmp/test_remote.txt" "http://xx.xx.xx.xx/cgi-bin/test.sh"; 
--header "Expect:" > /tmp/response.txt

When I try attached code from PHP 5.3.x the file is sent to Lighttpd server so 
upload actually works (I assume this is "correct" part from your answer) but 
the server variables are not correct and filename is not received properly.

"it is wrong in the sense that a receiver should not assume otherwise"
I'm not sure how to interpret this, since I attached environment variables to 
see that POST_myfile_name=/tmp/test_remote.txt (sender full path) instead of 
POST_myfile_name=test_remote.txt (the name of uploaded file).


Previous Comments:
------------------------------------------------------------------------
[2012-01-18 17:11:36] paj...@php.net

It is not something PHP is responsible for, but here is the comment from the 
cURL project lead:

"it is correct in the sense that libcurl will use the path name specified to 
it. 
it is wrong in the sense that a receiver should not assume otherwise"

If you still consider that this should be different, please discuss this issue 
in the cURL tracker or on their mailing list.

------------------------------------------------------------------------
[2012-01-18 11:48:12] valentin_grigoras at yahoo dot com

Description:
------------
Curl file upload fail when destination server was Lighttpd because received 
data is altered (POST variable FORM_file_name is set to original path of the 
uploaded file instead of actual file name).


Destination server has  lighttpd/1.4.29
Test servers had PHP 5.2.4, 5.3.2 (ubuntu 5.14) and 5.3.8 (Windows).
Last one was updated to 5.3.9

Following code works on PHP 5.2.x and worked on older versions of PHP, but does 
not work on any 5.3.x versions.
Same code was tested against Apache web server and it worked.

Test script:
---------------
<?php
$url_post['myfile']='@/tmp/test_remote.txt';
                
$myHeaders=array(
        "Expect:"
);
                
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://xx.xx.xx.xx/cgi-bin/test.sh";);
curl_setopt($ch, CURLOPT_PORT, 80);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $myHeaders);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, $url_post);

$curl_reponse=curl_exec($ch);           
        
echo 'Response: '.$curl_reponse;
?>


Expected result:
----------------
CONTENT_TYPE=multipart/form-data; 
boundary=----------------------------0de142dacc53
GATEWAY_INTERFACE=CGI/1.1
HASERL_SHELL=/bin/sh
HASERLVER=0.9.27
REMOTE_ADDR=xx.xx.xx.xx
POST_myfile=/tmp/m1fafJ
HASERL_UPLOAD_DIR=/tmp
DOCUMENT_ROOT=/www/
REMOTE_PORT=47209
HTTP_ACCEPT=*/*
CONTENT_LENGTH=195
POST_myfile_name=test_remote.txt
HASERL_UPLOAD_LIMIT=1000
SCRIPT_FILENAME=/www/cgi-bin/test.sh
HTTP_HOST=xx.xx.xx.xx
REQUEST_URI=/cgi-bin/test.sh
HASERL_myfile_path=/tmp/m1fafJ
SERVER_SOFTWARE=lighttpd/1.4.29
HASERL_ACCEPT_ALL=0
FORM_myfile=/tmp/m1fafJ
SERVER_PROTOCOL=HTTP/1.1
SESSIONID=6c004f16ab26
REDIRECT_STATUS=200
FORM_myfile_name=test_remote.txt
REQUEST_METHOD=POST
SERVER_ADDR=0.0.0.0
PWD=/www/cgi-bin/cmh
SERVER_PORT=80
SCRIPT_NAME=/cgi-bin/test.sh
HTTP_CONTENT_LENGTH=195
SERVER_NAME=xx.xx.xx.xx

Actual result:
--------------
CONTENT_TYPE=multipart/form-data; 
boundary=----------------------------bc7136747ad5
GATEWAY_INTERFACE=CGI/1.1
HASERL_SHELL=/bin/sh
HASERLVER=0.9.27
REMOTE_ADDR=xx.xx.xx.xx
POST_myfile=/tmp/Y9JqDF
HASERL_UPLOAD_DIR=/tmp
DOCUMENT_ROOT=/www/
REMOTE_PORT=52983
HTTP_ACCEPT=*/*
CONTENT_LENGTH=10790
POST_myfile_name=/tmp/test_remote.txt
HASERL_UPLOAD_LIMIT=1000
SCRIPT_FILENAME=/www/cgi-bin/test.sh
HTTP_HOST=xx.xx.xx.xx
REQUEST_URI=/cgi-bin/test.sh
HASERL_myfile_path=/tmp/Y9JqDF
SERVER_SOFTWARE=lighttpd/1.4.29
HASERL_ACCEPT_ALL=0
FORM_myfile=/tmp/Y9JqDF
SERVER_PROTOCOL=HTTP/1.1
SESSIONID=6aa54f16ab0a
REDIRECT_STATUS=200
FORM_myfile_name=/tmp/test_remote.txt
REQUEST_METHOD=POST
SERVER_ADDR=0.0.0.0
PWD=/www/cgi-bin
SERVER_PORT=80
SCRIPT_NAME=/cgi-bin/test.sh
HTTP_CONTENT_LENGTH=10790
SERVER_NAME=192.168.8.30


------------------------------------------------------------------------



-- 
Edit this bug report at https://bugs.php.net/bug.php?id=60788&edit=1

Reply via email to