Браузер не может загрузить скрипт PHP, но терминал может?

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

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

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

<?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"
));

?>

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

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

Спасибо, Натан

Я бы посоветовал проверить журналы ошибок сервера, если там написано «Эта страница не работает», что обычно указывает на внутреннюю ошибку сервера 500. Единственное, что я могу предположить, это то, что путь к файлу автозагрузки не совпадает, когда вы загружаете его через веб. Попробуйте использовать абсолютный путь или относительный путь к $_SERVER['DOCUMENT_ROOT']

aynber 08.04.2019 20:02

Нет, журнал ошибок не часто хранится в папке скрипта. Загляните в /Applications/MAMP/logs/

aynber 08.04.2019 20:09

Привет @aynber, я нашел журнал ошибок. Вот что у него было внутри. Я убедился, что очистил файл и снова попытался загрузить страницу, hastebin.com/ocoyomemuz.sql. Это было в папке MAMP. :)

Nathanna 08.04.2019 20:11

Похоже, он не может найти учетные данные. Убедитесь, что он может загрузить ваш файл учетных данных. Для получения дополнительной информации см. URL-адрес, указанный в сообщении об ошибке.

aynber 08.04.2019 20:13

Привет, @aynber, я немного не понимаю, что делать.

Nathanna 08.04.2019 20:37

Обратитесь к связанной странице Developers.google.com/accounts/docs/… для получения подробной информации о настройке учетных данных. Вы можете либо предоставить его с помощью переменной среды, как описано в этом документе, либо загрузить ключевой файл и передать его непосредственно в свой клиент: new TextToSpeechClient(['credentials' => '/path/to/keyfile.json']);

jdp 08.04.2019 21:10

@jdp спасибо за помощь! Теперь работает безотказно. :)

Nathanna 08.04.2019 21:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
7
225
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме