0

たくさんの写真を表示するブログがあります。サーバーリクエストを最小限に抑えるために、単純なPHP関数を使用して各画像をbase64にエンコードしています。

私のブログには無限スクロール機能があり、AJAXを使用してサーバーにリクエストを送信し、ページスクロールでさらにブログを取得します。

ここでの問題は、base64でエンコードされた画像がAJAXリクエストを介して届くと、エラーが発生することです。[function.file-get-contents]: failed to open stream: No such file or directory

base64でエンコードされた画像は、ajax呼び出しを経由していないときに完全に表示されます。

これが私が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の相対パスではなく、ファイルの絶対パスを使用してみてください。これは、ファイルパスが取得されない理由の1つである可能性があります。

于 2013-03-24T04:14:00.697 に答える