web-dev-qa-db-de.com

PHP: fopen Fehlerbehandlung

Ich hole eine Datei mit

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

und die Methode gibt es dann als Bild zurück. Wenn fopen () jedoch fehlschlägt, weil die Datei nicht vorhanden ist, wird ein Fehler ausgegeben:

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

Dies kommt offensichtlich als Json zurück.

Die Frage ist jetzt: Wie kann ich den Fehler abfangen und verhindern, dass die Methode diesen Fehler direkt an den Client ausgibt?

16
humpdi

Sie sollten zuerst das Vorhandensein einer Datei mit file_exists () testen.

    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
    } 

oder einfache Lösung ohne Ausnahmen:

    $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  
    }
37
Cendak

Sie können die Funktion file_exists () vor dem Aufruf von fopen () verwenden.

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);
}
3
Refazul Refat
[{"message":"Warning: fopen(uploads\/Team\/img\/1.png): failed to open stream: No such file or directory in C:\...

der Fehler ist klar: Sie haben das falsche Verzeichnis eingegeben, Sie können versuchen, was Sie wollen, aber es funktioniert nicht. Sie können es damit zum Laufen bringen:

  1. nimm deine Datei und lege sie in den gleichen Ordner deiner PHP-Datei (Du kannst sie verschieben, wenn du dir keine Sorgen machst, es geht um deinen Fehler) oder in einem Ordner "höher" deines Skripts (nur nicht außerhalb Ihres WWW-Ordners)
  2. ändere das fopen auf ('./$team_id.'png',"rb"); 
  3. führen Sie Ihre Skriptdatei erneut aus

vergiss das nicht: Du kannst nicht auf eine Datei zugreifen, die sich nicht in deinem "www" -Ordner befindet. (er hat deine Datei nicht gefunden, weil er dir ihren Namen gibt: der Name kommt aus der $ team_id-Variablen)

0
yyg