2013-12-20 25 views
0

我試圖讓它檢索服務器上的圖像文件,但如果圖像文件的名稱中有一個空格,它將無法工作..例如,死亡與空氣之間存在一個空間,即使我在添加%20後轉義它,函數返回一個空字符串..但是如果它是一個沒有空格的文件,如'http://www.m.trialsite.com/images/thumb/Espresso.jpg';它會工作! ..我哪裏錯了?爲什麼PHP不會讀這個文件?

$filename = 'http://www.m.trialsite.com/images/thumb/dead air.jpg'; 



function readfile_chunked($filename,$retbytes=true) { 
    $chunksize = 1*(1024*1024); // how many bytes per chunk 
    $buffer = ''; 
    $cnt =0; 

    // $handle = fopen($filename, 'rb'); 
    $filename = str_replace(' ','%20',$filename); 
    $handle = fopen($filename, 'rb'); 

    if ($handle === false) { 
     return false; 
    } 
    $filename = str_replace(' ','%20',$filename); 
    while (!feof($handle)) { 
     $buffer = fread($handle, $chunksize); 
     echo $buffer; var_dump($buffer); exit; 
     ob_flush(); 
     flush(); 
     if ($retbytes) { 
      $cnt += strlen($buffer); 
     } 
    } 
     $status = fclose($handle); 
    if ($retbytes && $status) { 
     return $cnt; // return num. bytes delivered like readfile() does. 
    } 
    return $status; 

} 
+1

遠程文件使用本地文件操作是巨大的kludge,並且有一些完全不可預知和不可處理的奇怪現象,我希望PHP從未實現過這些包裝。使用cURL。 – Sammitch

+0

出於好奇:你能直接在瀏覽器中打開文件嗎? – Lasse

+0

是的,我可以在瀏覽器上看到它.. – user3097566

回答

1

使用preg_replace("/\s+/","_",$nome);重命名的文件,然後恢復它,它會工作

$directory = '/public_html/testfolder/';//example 
if ($handle = opendir($directory)) { 
    while (false !== ($fileName = readdir($handle))) {  
     $newName = preg_replace("/\s+/","_",$fileName); 
     rename($directory . $fileName, $directory . $newName); 
    } 
    closedir($handle); 
} 
+0

我不允許更改服務器的文件名 – user3097566

+1

看看它是否有幫助[如何使用GD或cURL下載遠程圖像](http://www.bitrepository。 com/download-image.html) –

+0

它適用於所有其他圖像,除非有空間,我不認爲允許我更改圖像檢索方式,這不是個人項目。 – user3097566

0

,如果你正在做的事情是這樣的:

$filename = str_replace(' ','%20', 'http://www.m.trialsite.com/images/thumb/dead air.jpg'); 
相關問題