У меня есть php-скрипт, который хранит изображения из положенного запроса. Скрипт размещен на Host Monster
Вот мой сценарий
<?php
$path = 'test.png';
$put = fopen("php://input", "r");
$fp = fopen($path, "w");
while ($data = fread($put, 1024))
fwrite($fp, $data);
fclose($fp);
fclose($put);
echo 'done';
?>
Мой сценарий работает хорошо. Теперь я перенес этот скрипт на google-appengine, и теперь он хранит недействительные изображения. Вот скрипт app-engine
<?php
$path = 'gs://my-bucket/test.png';
$options = ['gs' => ['Content-Type' => 'image/jpeg' , 'acl'=>'public-read']];
$ctx = stream_context_create($options);
$put = fopen("php://input", "r");
$fp = fopen($path, "w",false,$ctx);
while ($data = fread($put, 1024))
fwrite($fp, $data);
fclose($fp);
fclose($put);
echo 'done';
?>
Файлы созданы с недопустимым содержанием. Может кто-нибудь помочь / указать, что я делаю неправильно?
Я попробовал тот же сценарий, и он отлично работает для меня, возможно, вы столкнулись с проблемой из-за размера изображения, так как это была проблема в библиотеке PHP, которая генерирует ключ memcache. Memcache не может сгенерировать ключ длиной более 250 байт. Теперь эта ошибка исправлена. Найдите ниже фрагмент кода, который я попробовал. Он такой же, как ваш.
<?php
use google\appengine\api\cloud_storage\CloudStorageTools;
use google\appengine\api\log\LogService;
$object_url = 'gs://my-bucket/test1.png';
$options = stream_context_create( ['gs' => ['acl' => 'public-read',
'Content-Type' => 'image/jpg']] );
$my_file = fopen($object_url, 'w', false, $options);
$put = fopen("image.jpg", "r");
while ($data = fread($put, 1024))
fwrite($my_file, $data);
fclose($my_file);
fclose($put);
echo 'done';
?>
Других решений пока нет …