2014-11-28 3 views
0

У меня есть скрипт php, который хранит изображения из запроса на печать. Сценарий размещается на Host MonsterStream Write Invalid Image Content

Вот мой сценарий

<?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 и теперь сохранял недопустимые изображения. Вот сценарий приложения-двигателя

<?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';  
?> 

Файлы создаются с использованием недопустимого содержимого. Может ли кто-нибудь помочь/указать, что я делаю неправильно?

+0

Можете ли вы предоставить больше данных о том, что на самом деле записывается в ведро? Правильно ли длина файла? Чем отличается от того, что загружается? –

+0

Неверная длина файла. В данных есть дополнительные байты. Я открыл сохраненный файл в блокноте и сравнил его с другим файлом изображения, и данные не совпадают. Вот ссылка на исходный файл https://www.dropbox.com/s/fhysugy74jopklf/source.png, и вот ссылка выходного файла https://www.dropbox.com/s/lqfi3dm4fbtxtd5/stored_file.png – junto

ответ

0

Я пробовал один и тот же скрипт, и он отлично работает для меня, возможно, вы столкнулись с проблемой из-за размера изображения, так как это было проблемой в библиотеке 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';  
?>