以下代码使用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'无法显示,因为它包含错误”
我不确定是什么原因造成的。非常感谢帮助。
更新:
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
答案 0 :(得分:2)
要检查的一些事情。
两个文件都没有BOM存储
那'<?php'是前五个字符和'?>'两个文件中的最后两个。
当你删除ob_start()和ob_end-clean(()时,它应该没有显示错误信息。
如果你在生成之前放置unlink,你可以看到生成的文件 - 检查它是否有效。
答案 1 :(得分:1)
您可能想要开始离开决赛的做法?>从文件末尾开始 - 没有必要,如果php分隔符后面有空格和换行符,可能会导致问题。