我正在尝试在 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
为更大的值,但这并没有帮助。
任何提示将不胜感激!