2013-03-23 55 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中的相對路徑,這可能是文件路徑沒有得到的原因之一。