Браузер не может загрузить скрипт PHP, но терминал может? - PullRequest
1 голос
/ 08 апреля 2019

Я создаю умный домашний помощник, пробовал использовать базовый Chrome TTS, другие API-интерфейсы, а затем попал на Google Cloud Platform Text To Speech WaveNet. Я использовал пример кода PHP, чтобы поместить аудио в файл в папке (с именем clips.)

Когда я пытаюсь запустить файл PHP в браузере, он не работает, но запуск его с помощью команды php в терминале Mac OS работает и успешно создает файл без ошибок.

Я пытался использовать Node.js, но он не работал, потому что мне нужно было запустить файл со страницы HTML, и я не хотел показывать свои учетные данные API Google Cloud Platform.

<?php

header("Content-Type: application/json");

if(!isset($_GET['text'])) {
  json_encode(array(
    "success" => "false",
    "error" => "missingPhrase"
  ));
}

require 'vendor/autoload.php';

use Google\Cloud\TextToSpeech\V1\AudioConfig;
use Google\Cloud\TextToSpeech\V1\AudioEncoding;
use Google\Cloud\TextToSpeech\V1\SynthesisInput;
use Google\Cloud\TextToSpeech\V1\TextToSpeechClient;
use Google\Cloud\TextToSpeech\V1\VoiceSelectionParams;

$textToSpeechClient = new TextToSpeechClient();

$input = new SynthesisInput();
$input->setText($_GET['text']);
$voice = new VoiceSelectionParams();
$voice->setLanguageCode('en-US-Wavenet-D');
$audioConfig = new AudioConfig();
$audioConfig->setAudioEncoding(AudioEncoding::LINEAR16);

$number = 0;
$fi = new FilesystemIterator("clips", FilesystemIterator::SKIP_DOTS);
foreach ($fi as $f) {
  $number = $number + 1;
}
$number = $number + 1;

$resp = $textToSpeechClient->synthesizeSpeech($input, $voice, $audioConfig);
file_put_contents("clips/" . $number . '.mp3', $resp->getAudioContent());

echo json_encode(array(
  "file_name" => 'clips/' . $number . ".mp3"
));

?>

В результате выполнения кода, приведенного выше, в Chrome по умолчанию отображается надпись «Эта страница не работает».

PS, я посмотрел на некоторые другие ответы о переполнении стека, связанные с моей проблемой, и они НЕ решили мою проблему и не охватывали почти ту же проблему.

Спасибо, Nathan

1 Ответ

1 голос
/ 08 апреля 2019

С помощью @jdp я смог ее решить. Мне нужно было связаться с файлом JSON, содержащим учетные данные авторизации. Это работает сейчас. :)

$textToSpeechClient = new TextToSpeechClient(['credentials' => 'credentials.json']);
...