Следующий код передает изображение, созданное на лету, с сервера на клиентский сайт с использованием 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' не может быть отображено, поскольку оно содержит ошибки"
Я не уверен, что является причиной этого. Помощь очень ценится.
UPDATE:
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