echo + file_get_contents () добавляет дополнительные разрывы строк к выводу - PullRequest
0 голосов
/ 12 января 2011

Следующий код передает изображение, созданное на лету, с сервера на клиентский сайт с использованием 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' не может быть отображено, поскольку оно содержит ошибки"

Я не уверен, что является причиной этого. Помощь очень ценится.

  • Onema

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

Ответы [ 2 ]

2 голосов
/ 12 января 2011

Некоторые вещи проверить.

что оба файла хранятся без спецификаций

То 'последние два в обоих файлах.

То, что при удалении ob_start () и ob_end-clean (() на нем не должно отображаться сообщений об ошибках.

Если вы поставили unlink перед генерацией, вы увидите созданный файлпроверьте, действительно ли это.

1 голос
/ 13 января 2011

Возможно, вы захотите начать практику выхода из финала?> С конца ваших файлов - в этом нет необходимости, и это может вызвать проблемы, если после разделителя php есть пробелы и символы новой строки.

...