たくさんの写真を表示するブログがあります。サーバーリクエストを最小限に抑えるために、単純な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()
どこでも動作しません。