echo + file_get_contents()为输出添加额外的换行符

时间:2011-01-12 20:02:26

标签: php image curl echo file-get-contents

以下代码使用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

更新:
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 个答案:

答案 0 :(得分:2)

要检查的一些事情。

两个文件都没有BOM存储

那'<?php'是前五个字符和'?>'两个文件中的最后两个。

当你删除ob_start()和ob_end-clean(()时,它应该没有显示错误信息。

如果你在生成之前放置unlink,你可以看到生成的文件 - 检查它是否有效。

答案 1 :(得分:1)

您可能想要开始离开决赛的做法?>从文件末尾开始 - 没有必要,如果php分隔符后面有空格和换行符,可能会导致问题。