Come convertire il file di arricciatura post dalla row di command in PHP cURL

Sto cercando di submit file a un'API di terze parti dalla mia app PHP. Funziona dalla row di command:

curl -F "[email protected]_file.MOV" "https://upload.wistia.com?project_id=pbmcmua3ot&username=api&api_password=xxxxx_apikey_yyyyy" 

Ma non riesco a farlo funzionare usando il curl di PHP:

  $data = arrays( 'username' => $username, 'api_password' => $api_password, 'file' => fopen($tmp_filename, 'r'), 'project_id' => $project_hashed_id, ); $ch = curl_init(); //curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout curl_setopt($ch, CURLOPT_INFILE, fopen($tmp_filename, 'r') ); curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($tmp_filename)); curl_setopt($ch, CURLOPT_VERBOSE, 1); //for debugging curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $result = curl_exec($ch); curl_close($ch); return json_decode($result); 

Penso che CURLOPT_INFILE sia il problema ma non ne sono sicuro. Grazie in anticipo per qualsiasi aiuto tu possa darmi.

Update1

  $data = arrays( 'username' => $username, 'api_password' => $api_password, 'file' => '@'.$tmp_filename, 'project_id' => $project_hashed_id, ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_UPLOAD, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 86400); // 1 Day Timeout curl_setopt($ch, CURLOPT_NOPROGRESS, false); curl_setopt($ch, CURLOPT_BUFFERSIZE, 128); curl_setopt($ch, CURLOPT_INFILESIZE, filesize($tmp_filename)); curl_setopt($ch, CURLOPT_VERBOSE, 1); //for debugging curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); curl_close($ch); return json_decode($result); 

AGGIORNAMENTO 2 (lavoro)

  $data = arrays( 'api_password' => $api_password, 'file' => '@'.$tmp_filename, 'project_id' => $project_id ); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_URL, "https://upload.wistia.com" ); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $result = curl_exec($ch); curl_close($ch); 

Non è necessario aprire una maniglia per arricciare, basta avere

 $data = arrays( 'file' => '@move_file.MOV' ); 

Curl vedrà il @ e lo tratterà come un tentativo di upload di file. Inoltre non devi fare anche http_build_query() . Curl può accettare direttamente una matrix e fare la query costruendo se stessa:

 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);