2017-11-06 6 views
0

Die Ausführung dieses Curl-Befehls vom Terminal funktioniert und ich bekomme meine Ergebnisse zurück.Wie führe ich diesen Curl-Befehl in PHP aus?

curl -F "[email protected]/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv" http://10.0.0.106:8089/uploadAndMatch/ -o ~/out.txt 

Aber wenn es von PHP mit dem folgenden Code versuche ich 400 httpcode bin immer:

$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/'); 
    curl_setopt($request, CURLOPT_POST, true); 
    curl_setopt($request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@/var/www/html/uploads/fb5bc34e1f0f03c759e92010f6a1a302_modified.csv' 
    )); 
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
    echo curl_exec($request); 
    $httpcode = curl_getinfo($request, CURLINFO_HTTP_CODE); 
    echo $httpcode; 
    curl_close($request); 

Ich habe auch versucht, einen Header hinzuzufügen:

$header = array('Content-Type: multipart/form-data'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($ch, CURLOPT_POST, 1); 

Aber es ist immer noch die gleiche Error! 400 bad request Irgendwelche Gedanken?

Es war kein Debug-Problem, dann ist es, weil die changes in php5.5 +

+0

können Sie die tatsächlichen Anfragen (curl, php + curl) mit wireshark vergleichen? hast du Zugriff auf die Server-code/logs? – BNT

+0

auch, vielleicht unterstützt Ihr Server keine Formulardaten wie angegeben [hier] (https://Stackoverflow.com/a/28411/7926064), also versuchen Sie [http_build_query] (http://php.net/manual/en /function.http-build-query.php) – BNT

+0

Mögliches Duplikat von [Php - Debugging Curl] (https://stackoverflow.com/questions/3757071/php-debugging-curl) – Nic3500

Antwort

0

Das Problem der curl Befehl von PHP wurde, wird der Inhalt der Datei nicht lesen, aber es war der Pfad der Datei zu lesen als ein Post-Parameter.

$request = curl_init('http://10.0.0.106:8089/uploadAndMatch/'); 
    // send a file 
    curl_setopt($request, CURLOPT_POST, true); 
    $fileName = explode("/", $file); 
    $fileName = end($fileName); 
    if (function_exists('curl_file_create')) { // php 5.5+ 
     $cFile = curl_file_create($file,'text/csv',$fileName); 
    } else { // 
     $cFile = '@' . realpath('/var/www/html/uploads/ss.csv'); 
    } 
    $post = array('file'=> $cFile); 
    curl_setopt($request,CURLOPT_POSTFIELDS,$post); 
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 

und das zweite Problem, das ich gelöst war, dass die Datei in curl_create_file($fileName) auf den Server als vollständigen Pfad gesendet wurde, und unter Verwendung von curl_file_create($filename, $mimetype = '', $postname = '') es für mich fixiert.