我有一个显示一堆图片的博客。为了最大限度地减少服务器请求,我使用一个简单的 PHP 函数将每个图像编码为 base64。
我的博客上有一个无限滚动功能,它使用 AJAX 向服务器发送请求以获取更多关于页面滚动的博客。
这里的问题是当 base64 编码的图像通过 AJAX 请求时,我得到了错误[function.file-get-contents]: failed to open stream: No such file or directory
当未通过 ajax 调用时,base64 编码的图像会完美显示。
这是我用来转换为 base64 的 PHP 函数:
// convert images to base64 for image URIs
function base64Data($sFile) {
// Switch to right MIME-type
$sExt = strtolower(substr(strrchr($sFile, '.'), 1));
// trim the first forward slash from the images
if(strpos($sFile, '/', 1)) {
$sFile = ltrim($sFile, '/');
}
switch($sExt)
{
case 'gif':
case 'jpg':
case 'jpeg':
case 'png':
$sMimeType = 'image/'. $sExt;
break;
case 'ico':
$sMimeType = 'image/x-icon';
break;
case 'eot':
$sMimeType = 'application/vnd.ms-fontobject';
break;
case 'otf':
case 'ttf':
case 'woff':
$sMimeType = 'application/octet-stream';
break;
default:
exit('Invalid extension file!');
}
$sBase64 = base64_encode(file_get_contents($sFile));
return "data:$sMimeType;base64,$sBase64";
}
图像路径存储在我的 mysql 数据库中,/uploads/blogs/images/imagefile.jpg
这就是我ltrim()
用来修剪第一个斜线的原因。没有它,file_get_contents()
在任何地方都行不通。