#49921 [Fbk->Opn]: Curl post upload functions changed

From: Date: Mon, 19 Oct 2009 17:44:23 +0000
Subject: #49921 [Fbk->Opn]: Curl post upload functions changed
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-143704@lists.php.net to get a copy of this message
 ID:               49921
 User updated by:  jon at feburman dot co dot uk
 Reported By:      jon at feburman dot co dot uk
-Status:           Feedback
+Status:           Open
 Bug Type:         cURL related
 Operating System: Redhat 5
 PHP Version:      5.2.11
 New Comment:

I have had to go back to 5.2.10 (which works correctly) as this bug
broke our live site, so I cannot test this - and you will need 
to fill in some values for the variables at the bottom.

But, off the top of my head, something like:

<?PHP


function upload($dir, $file, $userpass, $url) {

	$ch = curl_init();
	if($ch) {
		$data = array('dir' => $dir, 'filedata0' => "@$file");
			
		if( !curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ) return false;
		if( !curl_setopt($ch, CURLOPT_URL, $url)) return false;
		if( !curl_setopt($ch, CURLOPT_USERPWD, $userpass)) return false;
		if( !curl_setopt($ch, CURLOPT_POST, 1)) return false;
		if( !curl_setopt($ch, CURLOPT_POSTFIELDS, $data)) return false;
		
		if( !curl_exec($ch) ) return false;
		curl_close($ch);
		return true;
	}
	else return false;
}
$dir = "uploads"; //Not needed - but in our case this was a required
post
$file = "/local/path/to/a/file"; //Local path to a file
$userpass = "auser:apasswd"; //Remote login details
$url = "remote/upload/url"; //A remote upload page

upload($dir, $file, $userpass, $url);
?>

On the remote system see what the upload file is called. If it makes
any difference, our remote system was a Solaris 9 box.


Previous Comments:
------------------------------------------------------------------------

[2009-10-19 14:31:48] jani@php.net

Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc. If the script requires a 
database to demonstrate the issue, please make sure it creates 
all necessary tables, stored procedures etc.

Please avoid embedding huge scripts into the report.



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

[2009-10-19 13:50:47] jon at feburman dot co dot uk

Description:
------------
Files being uploaded via http post come across with a url encoded 
version of the whole file path rather than just the name part as it did

in older versions of PHP. 

Reproduce code:
---------------
	function upload($dir, $file, $userpass) {
		if( ! $this->cURLcheckBasicFunctions() ) return false;
		$ch = curl_init();
		if($ch) {
			$data = array('dir' => $dir, 'filedata0' => "@$file");
			
			if( !curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ) return false;
			if( !curl_setopt($ch, CURLOPT_URL, $this->url)) return false;
			if( !curl_setopt($ch, CURLOPT_USERPWD, $userpass)) return false;
			if( !curl_setopt($ch, CURLOPT_POST, 1)) return false;
			if( !curl_setopt($ch, CURLOPT_POSTFIELDS, $data)) return false;
		
			if( !curl_exec($ch) ) return false;
			curl_close($ch);
			return true;
		}
		else return false;
	}


Expected result:
----------------
File arrives on remote server called 
"SAV2906_A4L_4pp_D_shipping_label.pdf"

Actual result:
--------------
File arrives on remote server called 
":2Fvar:2Fwww:2Fvhosts:2Ffeburman.co.uk:2Fhttpdocs:2Fsprint:2Fjobs:2Fjob
2906:2FSAV2906_A4L_4pp_D_shipping_label.pdf"


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


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



Thread (6 messages)

« previous php.bugs (#143704) next »