2014-07-15 189 views
6

我取一個文件PHP:FOPEN錯誤處理

$fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb"); 
$str = stream_get_contents($fp); 
fclose($fp); 

,然後的方法進行回作爲圖像。但是,當的fopen()失敗,因爲該文件不存在,它拋出一個錯誤:

[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\... 

這回來爲JSON,效果顯着。

現在的問題是:如何捕獲錯誤並防止該方法直接向客戶端拋出此錯誤?

+0

我想是這樣的'如果($計劃生育=的fopen( '上傳/團隊/ IMG /'.$ TEAM_ID。' 巴 ' 「RB」)){拋出這個 - > createNotFoundException(' 不image for found for id'。$ team_id); }' 但它沒有奏效。 – humpdi

+0

我也曾嘗試嘗試catch塊,但沒有工作。該錯誤對客戶端可讀。 – humpdi

+0

'try {$ fp = fopen('uploads/Team/img /'。team_id。'。png',「rb」); } catch(Exception $ e){throw $ this-> createNotFoundException('沒有找到id的圖像。$ team_id); }' – humpdi

回答

23

你應該首先通過file_exists()來測試一個文件的存在。

try 
    { 
     $fileName = 'uploads/Team/img/'.$team_id.'.png'; 

     if (!file_exists($fileName)) { 
     throw new Exception('File not found.'); 
     } 

     $fp = fopen($fileName, "rb"); 
     if (!$fp) { 
     throw new Exception('File open failed.'); 
     } 
     $str = stream_get_contents($fp); 
     fclose($fp); 

     // send success JSON 

    } catch (Exception $e) { 
     // send error message if you can 
    } 

或簡單的解決方案,而例外:

$fileName = 'uploads/Team/img/'.$team_id.'.png'; 
    if (file_exists($fileName) && ($fp = fopen($fileName, "rb"))!==false) { 

     $str = stream_get_contents($fp); 
     fclose($fp); 

     // send success JSON  
    } 
    else 
    { 
     // send error message if you can 
    } 
+0

非常感謝你的傢伙,這就是要點! :) – humpdi

0
[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\... 

錯誤是明確的:你已經把錯誤的目錄,你可以試試你whant什麼,但它會無法正常工作。你可以把它與這方面的工作:

  1. 把你的文件,並把它放在你的PHP文件 的同一文件夾(你可以以後移動它不用擔心,這是你的錯誤) 或文件夾腳本的「高」(只是沒有外面您的www 文件夾)
  2. 變化則fopen到('./$team_id.'png',"rb");
  3. 重新運行腳本文件

不要忘記:你可以」 t訪問一個不存在於你的文件中的文件ww「文件夾 (他沒有找到你的文件,因爲他給了你她的名字:這個名字來自$ team_id變量)

1

您可以調用fopen()之前使用file_exists()功能。

if(file_exists('uploads/Team/img/'.$team_id.'.png') 
{ 
    $fp = fopen('uploads/Team/img/'.$team_id.'.png', "rb"); 
    $str = stream_get_contents($fp); 
    fclose($fp); 
}