Поэтому я пытаюсь написать 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?
Ты не можешь. 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/
Других решений пока нет …