web-dev-qa-db-fra.com

PHP: gestion des erreurs fopen

Je vais chercher un fichier avec

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

puis la méthode le restitue sous forme d'image. Mais lorsque fopen () échoue, le fichier n’existant pas, une erreur est générée:

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

Cela revient comme JSON, évidemment.

La question est maintenant: comment puis-je attraper l'erreur et empêcher la méthode de renvoyer cette erreur directement au client?

16
humpdi

Vous devriez d’abord tester l’existence d’un fichier avec 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
    } 

ou solution simple sans exceptions:

    $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

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

l'erreur est claire: vous avez mis le mauvais répertoire, vous pouvez essayer ce que vous voulez mais cela ne fonctionnera pas. vous pouvez le faire fonctionner avec ceci:

  1. prenez votre fichier et placez-le dans le même dossier que votre fichier php (vous pourrez le déplacer après ne vous inquiétez pas, cela concerne votre erreur) ou sur un dossier "supérieur" de votre script (mais pas en dehors de votre dossier www )
  2. changez le fopen en ('./$team_id.'png',"rb"); 
  3. réexécutez votre fichier de script

n'oubliez pas ceci: vous ne pouvez pas accéder à un fichier qui ne se trouve pas dans votre dossier "www" .__ (il n'a pas trouvé votre fichier car il vous a donné son nom: le nom provient de la variable $ team_id)

0
yyg