0

我有一个显示一堆图片的博客。为了最大限度地减少服务器请求,我使用一个简单的 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()在任何地方都行不通。

4

1 回答 1

0

“警告:file_get_contents(uploads/blogs/photos/24c94e5fff96ea2c9a2e525e99bcd31d52f505a4.‌​‌​jpg)[function.file-get-contents]:无法打开流:/beta/classes/string.class.php中没有这样的文件或目录在第 91 行”这是自我解释的。如果您确定该文件存在于该路径中。然后尝试使用文件的绝对路径而不是 string.class.php 中的相对路径,这可能是文件路径未获取的原因之一。

于 2013-03-24T04:14:00.697 回答