У меня есть рабочий веб-сайт Apache 2.4, который работает со страницами Php 7 на сервере Ubuntu 18.10.
Мой пример основан на: https://cloud.google.com/bigquery/docs/quickstarts/quickstart-client-libraries#client-libraries-install-php
Когда я запускаю страницу как я из командной строки
php filex.php
bigquery работает, и я вижу данные. Когда я пытаюсь просмотреть его с веб-сервера apache, первая часть страницы отображается, тогда возникает ошибка, а часть bigquery отсутствует.
Ошибка в / var / log / apache2
Неустранимая ошибка PHP Неперехваченное исключение Google Cloud






Я догадался, что это проблема с разрешениями Apache и моего идентификатора пользователя. Я думал, что у Apache могут возникнуть проблемы с доступом к файлам клиента Bigquery php из-за разрешений на каталог.
Однако проблема заключалась в том, что я неправильно установил переменную среды.
Я смотрел здесь: https://help.ubuntu.com/community/EnvironmentVariables и установить общесистемные переменные среды / и т. д. / окружающая среда
GOOGLE_APPLICATION_CREDENTIALS = "/bigquery/project1/accountdetails-xxxxxxxxxxxx.json"
Это было видно при входе в систему как userx
echo $GOOGLE_APPLICATION_CREDENTIALS
Потом я наткнулся на https://medium.com/@william.b/setting-dynamic-environmental-variables-in-apache-from-the-os-1d5c1e2e9e6c
что дало мне решение
nano /etc/apache2/envvars
Я добавил строку внизу (в основном пустого) скрипта
export GOOGLE_APPLICATION_CREDENTIALS = "/bigquery/project1/accountdetails-xxxxxxxxxxxx.json"
Я перезапустил сервер. Теперь веб-страница работает должным образом.
===================
Nginx
nginx также необходимо настроить для работы (Ubuntu 18.10, nginx 1.14.)
/etc/php/7.2/fpm/pool.d$
отредактировал www.conf
uncomment
;clear_env = no
добавленная строка
env[GOOGLE_APPLICATION_CREDENTIALS] = /bigquery/project1/accountdetails-xxxxxxxxxxxx.json
перезапустил nginx, и он сработал.
это довольно сложно, потому что этот файл
.jsonможно загрузить в PHP ... и, как это, можно даже иметь более одного проекта на сервер - что невозможно при установке глобальных переменных среды - и это также ограничивает переносимость сценарий (например, у одного виртуального хостинга не было бы шанса сделать это).