хороший способ сделать это с помощью дескриптора файла и CURLOPT_INFILE, он будет работать с файлами любого размера и позволяет начать загрузку до того, как весь файл будет считан с диска, таким образом это быстрее и использует только небольшой объем памяти, независимо от размера файла. однако быстрый и простой способ, при котором весь файл помещается в память одновременно и не начинается загрузка до тех пор, пока весь файл не будет считан в оперативную память, и, следовательно, не подходит для больших файлов, просто: curl_setopt($ch,CURLOPT_POSTFIELDS,file_get_contents($filename));
, но ... грубый эквивалент вашей команды curl с использованием хорошего метода:
$ch = curl_init ();
$filename = "audio-file1.flac";
$fileh = fopen ( $filename, 'rb' );
curl_setopt_array ( $ch, array (
CURLOPT_USERPWD => "{username}:{password}",
CURLOPT_HTTPHEADER => array (
'Content-Type: audio/flac'
),
CURLOPT_POST => 1,
CURLOPT_INFILE => $fileh,
CURLOPT_INFILESIZE => filesize ( $filename ),
CURLOPT_URL => "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?timestamps=true&word_alternatives_threshold=0.9&keywords=%22colorado%22%2C%22tornado%22%2C%22tornadoes%22&keywords_threshold=0.5",
CURLOPT_USERAGENT => 'libcurl/' . curl_version () ['version'] . '; php/' . PHP_VERSION
) );
// curl_setopt ( $ch, CURLOPT_URL, '127.0.0.1:9999' );
curl_exec ( $ch );
fclose ( $fileh );
curl_close ( $ch );