Написание файлов в Google Cloud с использованием PHP

Поэтому я пытаюсь написать PPT-файл с использованием PHP в моем Google Cloud App Engine.

Окончательный код для записи файла

$xmlWriter = IOFactory::createWriter($phpPresentation, "PowerPoint2007");
$xmlWriter->save("php://output");

Это работает в моем Localhost, но когда я развертываю его в облаке Google, он выдает ошибку ERR_INVALID_RESPONSE в Google Chrome и File Not Found в Mozilla Firefox.

Когда я получил доступ к журналам, он говорит

PHP Fatal error:  Uncaught exception 'Exception' with message 'Could not close zip file vfs://root/temp/.//phppttmp569a45e921e8a8.63056743.' in /base/data/home/apps/s~frrolefrontend/mediascout:ms-080.390023055217794078/mediascout/ppt_export/src/PhpPresentation/Writer/PowerPoint2007.php:320
Stack trace:
#0 /base/data/home/apps/s~frrolefrontend/mediascout:ms-080.390023055217794078/mediascout/ppt_export/samples/Sample_Header.php(72): PhpOffice\PhpPresentation\Writer\PowerPoint2007->save('php://output')
#1 /base/data/home/apps/s~frrolefrontend/mediascout:ms-080.390023055217794078/mediascout/ppt_export/samples/scout_temp.php(381): write(Object(PhpOffice\PhpPresentation\PhpPresentation), 'scout_temp', Array)
#2 {main}
  thrown in /base/data/home/apps/s~frrolefrontend/mediascout:ms-080.390023055217794078/mediascout/ppt_export/src/PhpPresentation/Writer/PowerPoint2007.php on line 320

Проведя некоторое исследование, я обнаружил, что Uncaught exception 'Exception' with message 'Could not close zip file потому что каталог не доступен для записи.

Можете ли вы сказать мне, как я могу сделать каталог в App Engine Writable?

1 ответ

Ты не можешь. Appengine Apps не имеет доступа для записи в файловую систему. Из документов:

Песочница изолирует ваше приложение от надежности, масштабируемости и безопасности. По этой причине небольшое количество функций PHP недоступно в App Engine, а другие вызовут исключение при неправильном использовании. Например, приложение не может записывать данные в локальную файловую систему. Вместо этого приложения могут использовать масштабируемые службы, предоставляемые Google, для хранения и обработки данных и обмена данными через Интернет.

(из https://cloud.google.com/appengine/features/)

Вы должны использовать корзину Google Cloud Storage для записи файлов:

<?php
file_put_contents('gs://my_bucket/hello.txt', 'Hello');

Вот несколько примеров https://cloud.google.com/appengine/docs/php/googlestorage/

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