Запись файлов в Google Cloud с использованием переполнения стека

Поэтому я пытаюсь написать 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?

0

Решение

Ты не можешь. 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/

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]