我正在尝试在AppFog PaaS系统上使用WordPress。不幸的是,AppFog没有持久存储,因此数据库外部的所有内容都需要存储在某些外部系统上(如S3)。我成功地使用了一个插件,将我的所有WordPress媒体推送到S3,但是在加载某些图像时出现问题。
为了调查,我部署了以下脚本:
// get the image name from the query string
// and make sure it's not trying to probe your file system
if (isset($_GET['pic'])) {
$pic = $_GET['pic'];
// get the filename extension
$ext = substr($pic, -3);
// set the MIME type
switch ($ext) {
case 'jpg':
$mime = 'image/jpeg';
break;
case 'gif':
$mime = 'image/gif';
break;
case 'png':
$mime = 'image/png';
break;
default:
$mime = false;
}
// if a valid MIME type exists, display the image
// by sending appropriate headers and streaming the file
if ($mime) {
header('Content-type: '.$mime);
header('Content-length: '.filesize($pic));
$file = fopen($pic, 'rb');
if ($file) {
fpassthru($file);
exit;
}
}
}
?>
这允许我直接测试我在PHP中读写图像的能力。这个代理脚本适用于大约10KB以下的图像 - 也就是说,当我在浏览器中打开脚本,将其指向我的S3存储桶中的某个“小”图像文件时,我能够看到它。
但是,当我尝试加载“大”文件(超过10KB)时,我收到错误。在Firefox中,那是:
The image “http://myssite.com/iproxy.php?pic=http://aws.amazon.com%2Fmybucket%2Fwp-content%2Fuploads%2F2013%2F01%2Fmylargeimage.png” cannot be displayed because it contains errors.
我几个小时都在努力,似乎无法解决任何问题。我已经尝试将output_buffering
更改为更大的值,但这没有帮助。
任何提示都将不胜感激!