У меня есть функция в PHP, которая вызывает завиток, чтобы получить изображение. Когда я печатаю это в файл и просматриваю его в браузере, изображение выглядит великолепно. Когда я использую «эхо» результатов завивки в качестве возвращаемого значения из моего PHP-скрипта, браузер показывает значок сломанного изображения (см. Пример этого значка: http://www.artifacting.com/blog/wp-content /uploads/2007/01/error_icon.gif ).
$ch = curl_init(); $options = array( CURLOPT_CONNECTTIMEOUT => 120, CURLOPT_TIMEOUT => 120, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_FRESH_CONNECT => 1, CURLOPT_HEADER => 0, CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)", CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTPPROXYTUNNEL => 1, CURLOPT_POST => 1, CURLOPT_RETURNTRANSFER => 1, CURLOPT_BINARYTRANSFER => 1, ); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt_array($ch, $options); curl_setopt($ch, CURLOPT_POSTFIELDS, $param_list); // The http response code is 200, and the body length is 50kb. $body = curl_exec($curl_params); // This produces a file containing an image that looks good when viewed in a browser. $bodyFile = @fopen("img.jpg", "w"); fprintf($bodyFile, "%s", $body. "\n"); fclose($bodyFile); // This does not render in the browser. Instead I see the broken image icon. $contentType = "image/jpeg"; header('Content-type: ' . $contentType); echo $body;
Есть идеи? Помогите!
Ответ зависит от того, что вы подразумеваете под сломанным. Если верхняя половина изображения появляется, а нижняя половина – нет, то либо у вас есть плохая версия в кеше из упавшего пакета (пустой кеш, обновление, попробуйте еще раз), либо скрипт отключается преждевременно от использования слишком много ресурсов или слишком продолжительное время. Если очистка кеша не решит проблему, проверьте настройки php.ini и посмотрите, улучшает ли это время работы сценария или макс. Память.
Если изображение представляет собой кучу бессмысленного ASCII, вы что-то эхоили или отправили заголовок перед этой точкой в своем коде. Наиболее распространенной невидимой причиной этого является наличие одной пустой строки перед вашим <?php
в верхней части страницы. Убедитесь, что перед <?php
нет ни одного байта (даже непечатаемого!), Если это так.
Если изображение, безусловно, является файлом изображения, но оно является статичным, серым ящиком, случайными цветами и т. Д., То это проблема с типом контента. Попытка разобрать изображение в формате JPG в виде PNG иногда дает серый квадрат или другие случайные «сбои» изображений.
Убедитесь, что вы установите правильные параметры cURL.
Этот пример отлично подходит для меня:
<?php $ch = curl_init ("http://img.ruphp.com/php/ps_logo2.png"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); $image=curl_exec($ch); curl_close ($ch); header("Content-Type: image/png"); echo $image; ?>
Оказалось, что у меня появился еще один файл PHP, в котором был добавлен дополнительный символ новой строки. В конце этого файла появилась строка новой строки после строки «?>».