CURLOPT_POSTFIELDS массив содержимого папки

я делаю пост в Google текст в речь. У меня есть набор файлов .flac, которые я хочу отправить в службу Google Text to Speech, чтобы содержимое было записано в текстовый файл.

Это код, который я написал, чтобы сделать это, и это работает:

$url = 'https://www.google.com/speech-api/v2/recognize?output=json&lang=it-IT&key=xxx';

$cont2 = array(

'flac/1.flac',
'flac/2.flac',
'flac/3.flac'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/x-flac; rate=44100'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

foreach ($cont2 as $fn) {
curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($fn));
$result = curl_exec($ch);
$info = curl_getinfo($ch);
//var_dump($info);
if ($result === false) {
die(curl_error());
}else{
echo "<br />".$fn." upload ok"."<br />";
file_put_contents("pum.txt", $result, FILE_APPEND);
}
}

Это работает как шарм, в «pum.txt» у меня есть все содержимое файла написано, и это нормально.

Моя проблема в том, что я не хочу добавлять в массив «cont2», каждый раз, новое имя файлов, которые мне нужно передать, которые находятся в «папке flac».

Чтобы избежать этого, я использую метод «scandir», удалите «.» и «..» строку из массива и передать этот массив в CURL_OPT_POSTFIELD, но вызов GTT возвращает пустое содержимое.

Это код, который я написал для этого (вместо массива $ cont2)

$directory = 'flac/';
$cont = array_diff(scandir($directory), array('..', '.', '.DS_Store'));

Print_r этого аналогичен массиву $ cont2:

array(3) {
[3]=>
string(6) "1.flac"[4]=>
string(6) "2.flac"[5]=>
string(6) "3.flac"}

Но Google TTS возвращает пустой результат.

Кто-нибудь, пожалуйста, скажите мне, где я делаю ошибку?

С уважением

Брус

РЕДАКТИРОВАТЬ: использовать «$ cont = glob (» $ directory / *. Flac «);» решил проблему. Надеюсь помочь другим.

0

Решение

Как утверждает Марк Б, вам нужен каталог с файлами, который отсутствует. Я бы просто использовал glob так как он вернет именно то, что вам нужно:

$cont = glob("$directory/*.flac");
0

Другие решения

scandir () не будет включать полную информацию о пути — он будет возвращать только имена файлов. Поэтому, когда вы создаете свой массив имен файлов для зацикливания и отправки в Google, вы должны будете сами включить эти каталоги.

например

$dir = 'flac';
$files = scandir($dir);

foreach($files as $key => $file);
$files[$key] = $dir . '/' . $file;
}

например Scan Dir вернется file1.flac, но вам нужно иметь flac/file1.flac, Поскольку вы не включаете информацию о пути, вы пытаетесь сделать file_get_contents() на имя файла, который не существует, и отправляет логическое значение false (сбой file_get) в Google.

2

По вопросам рекламы [email protected]