2013-03-23 25 views
0

我有一个博客显示一堆图片。为了最大限度地减少服务器请求,我使用简单的PHP函数将每个图像编码为base64。base64_encode图片未能通过AJAX请求打开流

我在我的博客上有一个无限的滚动功能,它使用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这就是为什么我使用图像修剪第一个斜杠。没有它,file_get_contents()无法在任何地方工作。

+0

尝试添加'var_dump($ sFile)'或其他一些调试实际路径的方法,当你看到$ sFile是什么时,错误可能会变得很明显。 – Vatev 2013-03-23 18:02:23

+0

似乎没有正确提供$ sFile的位置,echo $ sFile或找到$ sFile – Vineet1982 2013-03-23 18:05:40

+0

的校正位置,如果没有正确提供'$ sFile',那么为什么其他图像在不通过AJAX时正确显示? – 2013-03-23 18:06:40

回答

0

“警告:的file_get_contents(上传/博客/照片/ 24c94e5fff96ea2c9a2e525e99bcd31d52f505a4. JPG)function.file-GET-内容]:未能打开流:在/测试/班/串没有这样的文件或目录第91行的.class.php“这是自我解释。如果您确定该文件存在于该路径中。然后尝试使用文件的绝对路径而不是string.class.php中的相对路径,这可能是文件路径没有得到的原因之一。