开发者

echo + file_get_contents() adds extra line breaks to the output

The following code transfers an image that is created on the fly from a server to a client site using cURL. It stopped working recently and have not been able to find out what the problem is:


    // 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);

The file get_image.php is located in a client site and calls the file image.php located in my server.

After running this code the image in the client site is about 7 bytes larger than the original, these bytes seem to be line breaks. After debugging for several hours I found out that these bytes are added when I echo $imageFile. If the 7 bytes are manually removed from the resulting image, the image displays correctly.

There are no errors nor exceptions thrown. The image created in the server is created with no issues. The only output in FF is "The image 'url/to/image.php' cannot be displayed, because it contains errors"

I am not sure what is causing this. Help is greatly appreciated.

  • 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


Some things to check.

That both files are stored without BOMs

That '<?php' are the first five characters and '?>' the last two in both files.

That when you remove the ob_start() and ob_end-clean(() it should show no error messages.

If you put the unlink before the genereation, you can see the genereated file - check it is valid.


You might want to start the practice of leaving the final ?> from the end of your files - it isn't necessary, and can cause problems if there is whitespace and newlines following the php delimiter.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜