Следующий код передает изображение, созданное «на лету», с сервера на клиентский сайт с помощью cURL. Он перестал работать недавно и не смог выяснить, в чем проблема:
// get_image.php
ob_start();
// create a new CURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, 'url/to/image.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// set timeouts
set_time_limit(30);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
// open a stream for writing
$outFile = fopen($fileDestination, 'wb');
curl_setopt($ch, CURLOPT_FILE, $outFile);
// grab file from URL
curl_exec($ch);
fclose($outFile);
// close CURL resource, and free up system resources
curl_close($ch);
ob_end_clean();
//image.php
/*
* Create image based on client site ...
*/
$filePath = 'path/to/image.png'
$imageFile = file_get_contents($filePath);
header("content-type: image/png");
echo $imageFile;
unlink($filePath);
Файл get_image.php находится на клиентском сайте и вызывает файл image.php, расположенный на моем сервере.
После запуска этого кода изображение на клиентском сайте примерно на 7 байт больше, чем исходное, эти байты кажутся разрывами строк. После нескольких часов отладки я обнаружил, что эти байты добавляются, когда я повторяю $imageFile. Если из результирующего изображения вручную удалить 7 байт, изображение отображается правильно.
Никаких ошибок и исключений не возникает. Образ, созданный на сервере, создается без проблем. Единственный вывод в FF: «Изображение« url/to/image.php »не может быть отображено, поскольку оно содержит ошибки»
Я не уверен, что вызывает это. Помощь приветствуется.
- Онема
ОБНОВЛЕНИЕ:
http://files.droplr.com/files/38059844/V5Jd.Screen%20shot%202011-01-12%20at%2012.17.53%20PM.png
http://files.droplr.com/files/38059844/QU4Z.Screen%20shot%202011-01-12%20at%2012.23.37%20PM.png