2014-07-15 25 views
6

zrobić pobrać plik zPHP: fopen obsługi błędów

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

a następnie metoda daje go jako obraz. Ale kiedy fopen() nie powiedzie się, ponieważ plik nie istnieje, to zgłasza błąd:

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

ten wraca jako JSON, oczywiście.

Pytanie brzmi teraz: Jak mogę złapać błąd i zapobiec metodzie zgłaszania tego błędu bezpośrednio do klienta?

+0

Próbowałem coś takiego 'if ($ fp = fopen ('uploads/Zespół/img /'.$ team_id.'. Png ' "rb")) {throw this-> createNotFoundException (' No obraz znaleziony dla id '. $ team_id); } ' ale nie zadziałało. – humpdi

+0

Próbowałem również spróbować catch catch, ale nie działało. błąd był czytelny dla klienta. – humpdi

+0

'try {$ fp = fopen ('uploads/Team/img /'.$ team_id.'. Png '," rb "); } catch (Exception $ e) {throw $ this-> createNotFoundException ("Nie znaleziono obrazu dla id". $ team_id); } ' – humpdi

Odpowiedz

23

Powinieneś najpierw przetestować istnienie pliku według 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 
    } 

lub proste rozwiązanie bez wyjątków:

$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

dziękuję koleś, o to chodzi! :) – humpdi

0

błąd jest jasny: ustawiłeś zły katalog, możesz spróbować, co chcesz, ale to nie zadziała. można zrobić to praca z tym:

  1. wziąć plik i umieścić go w tym samym folderze pliku php (będziesz mógł przenieść go po nie martw się, że chodzi o swoim błędzie) lub w folderze „wyższy” od skryptu (nie tylko poza swoim www folderu)
  2. zmiany fopen do ('./$team_id.'png',"rb");
  3. ponownie uruchomić plik skryptu

nie zapomnę tego: można” t uzyskać dostęp do pliku, który nie znajduje się w twoim "w" ww "folder (nie odnalazł Twojego pliku, ponieważ podał ci jej imię: nazwa pochodzi od zmiennej $ team_id)

1

Można użyć funkcji file_exists() przed wywołaniem fopen().

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); 
}