2016-06-08 5 views
0

Also versuche ich, Dateien mit cURL zusammen mit anderen POST-Variablen zu einer anderen Seite zu senden. Das meiste funktioniert, außer dem Senden der Datei. Aber es funktioniert nur auf meinem localhost nicht. Wenn es auf den gehosteten Webserver hochgeladen wird, funktioniert es genauso wie es sollte.Das Posten einer Datei mit cURL funktioniert nicht mit @ am Anfang des Pfades

Ich möchte auch nicht CURLFile verwenden, weil der Webserver es nicht unterstützt. Hier

ist der Code:

 // Output the image 
     imagejpeg($fileData['imageBackground'], $newFileName, 75); 

     // Get Old Background 
     $query['getBackground'] = $this->PDO->prepare("SELECT backgroundImage FROM accounts WHERE token = :token"); 
     $query['getBackground']->execute(array(':token' => $token)); 

     $queryData = $query['getBackground']->fetch(PDO::FETCH_ASSOC); 

     $verificationKey = self::newVerificationKey($token); 
     // Send the file to the remote 
     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $uploadURL); 
     curl_setopt($ch, CURLOPT_POST, true); 
     $postArgs = array(
       'action' => 'updateBackground', 
       'verificationKey' => $verificationKey, 
       'file' => '@' . realpath($newFileName), 
       'oldBackground' => $queryData['backgroundImage'] 
      ); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs); 
     curl_setopt($ch, CURLOPT_SAFE_UPLOAD, 0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
     $result = curl_exec($ch); 
     curl_close($ch); 
     unlink($newFileName); 

Vielen Dank im Voraus!

Antwort

0

Sehr wahrscheinlich läuft auf Ihrem Webserver eine ältere Version, die das "@" - aber nicht die CRL-Datei unterstützt. Ihre lokale Maschine unterstützt curlfile - aber nicht die „@“ (in der Standardkonfiguration) ...

Sie

verwenden können
if (class_exists("CurlFile")){ 
    $postArgs = array(
       'action' => 'updateBackground', 
       'verificationKey' => $verificationKey, 
       'file' => new CurlFile($newFileName), 
       'oldBackground' => $queryData['backgroundImage'] 
      ); 
}else{ 
$postArgs = array(
       'action' => 'updateBackground', 
       'verificationKey' => $verificationKey, 
       'file' => '@' . realpath($newFileName), 
       'oldBackground' => $queryData['backgroundImage'] 
      ); 
} 

, die empfohlen wird, weil der @ -Wege wird als unsicher, so Verwendung CurlFile, wenn verfügbar.

Allerdings haben die @ -Wege lokaly so gut funktioniert, Sie

curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 

Dieser Verzug geraten zu false vor PHP 5.5, aber standardmäßig true für spätere Versionen verwenden können.

Hinweis, spielen Sie mit der "Reihenfolge". Es scheint ein Problem mit CURLOPT_POSTFIELDS zu geben, das gegenüber bestehenden Optionen etwas empfindlich ist. So

curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs); 
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 

könnte nicht funktionieren, während

curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postArgs); 

Macht.

+0

Arbeitete wie ein Charme. Ich habe einfach die ganze Klasse gemacht, und es funktioniert perfekt. Vielen Dank! – Joaquim

Verwandte Themen