Si il y a une erreur de connexion réseau en faisant un fopen, le code de retour est false. Pour connaître précisément le problème il est nécessaire de gérer une variable d'erreur. Le PHP nous le fournit, mais désactivé par défaut. En mettant le @ devant le fopen, le message n'est pas écrit à l'écran. L'erreur est donc uniquement dans la variable $php_errormsg.
<?php
// The track_errors permit to create the $php_errormsg in case of warning
ini_set('track_errors'1);
$stream = @fopen (WRAPPER);
ini_set('track_errors'0);
if ($stream === FALSE)
  throw new \Exception (sprintf ("Network error in getting '%s' : %s"$url,
                                 substr (strstr ($php_errormsg"stream: "), 8)),
                        500);
Inconvénient, si il y a plusieurs lignes d'erreur, seule la dernière est renvoyée. Il faut alors utiliser le code suivant :
<?php
$old_error_handler set_error_handler (
      function ($errno$errstr$errfile$errline)
      {
        global $erromsg;
        $GLOBALS["errormsg"] .= $errstr."\n";
        return true;
      });
    $fp = @stream_socket_client (WRAPPER);
    restore_error_handler();
    $php_errormsg $GLOBALS["errormsg"];