2014-11-14 4 views
0

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

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

$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».

Чтобы избежать этого, я использую метод «скандир», удаляю «.». и ".." из массива и передать этот массив 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 возвращают пустой результат ,

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

С наилучшими пожеланиями

Брус

EDIT: использовать "$ прод = Глоб (". $ Каталог/* FLAC ");" решили проблему. Надежда помогает другим.

ответ

0

Как заявляет Marc B, вам нужен каталог для отсутствующих файлов. Я бы просто использовал glob, так как он вернет именно то, что вам нужно:

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

Спасибо большое! Это решило мою проблему. Я понимаю свою ошибку. – Bebbolin

2

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

например.

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

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

e.g. scan dir вернет file1.flac, но вам необходимо иметь flac/file1.flac. Поскольку вы не включаете информацию о пути, вы пытаетесь сделать file_get_contents() на имя файла, которого не существует, и отправляют логическое ложное (file_get failed) в google.

+0

Спасибо вам, ваше объяснение было превосходным. Он решил проблему, которая у меня есть в другой части моего проекта. – Bebbolin

Смежные вопросы