Exemplo n.º 1
0
 /**
  * Équivalent de file_get_contents pour récupérer un fichier sur un serveur distant.
  * Méthode déclarée comme statique ("static") afin de pouvoir y accéder sans avoir besoin d'instancier la classe : cURL::get_contents(...)
  * 
  * On peut aussi l'utiliser pour récupérer le résultat d'un script PHP exécuté sur un serveur distant.
  * On peut alors envoyer au script des paramètres en POST.
  * 
  * On n'utilise pas file_get_contents() car certains serveurs n'acceptent pas d'utiliser une URL comme nom de fichier (gestionnaire fopen non activé).
  * On utilise donc la bibliothèque cURL en remplacement.
  * 
  * Concernant le timeout.
  * La fonction set_time_limit(), tout comme la directive de configuration de php.ini max_execution_time, n'affectent que le temps d'exécution du script lui-même. Tout temps passé en dehors du script, comme un appel système utilisant system(), des opérations sur les flux, les requêtes sur base de données, etc. n'est pas pris en compte lors du calcul de la durée maximale d'exécution du script.
  * Un appel cURL est un exemple d'opération de flux et n'est donc pas limité parun max_execution_time.
  * Du point du vue de l'administrateur système, un timeout cURL élevé n'est pas un souci : une connexion ouverte sans trafic dessus, tant qu'il n'y en a pas des milliers, c'est pas important.
  * Le timeout cURL sert juste à fixer "à partir de X secondes je n'attends plus et j'annonce que ça a planté", donc avec un timeout cURL élevé l'utilisateur risque juste de poireauter davantage avant de se prendre une erreur.
  * Le timeout cURL sert aussi à ne pas laisser de connexion ouverte indéfiniment.
  * 
  * @param string $url
  * @param array  $tab_post   tableau[nom]=>valeur de données à envoyer en POST (facultatif)
  * @param int    $timeout    valeur du timeout en s ; facultatif, par défaut 10
  * @return string
  */
 public static function get_contents( $url , $tab_post=FALSE , $timeout=10 )
 {
   $cURL = new cURL( $url , $tab_post , $timeout );
   $cURL->url = $cURL->setopt_redirection();
   $cURL->setopt_commun();
   $cURL->setopt_proxy();
   $cURL->setopt_auth();
   $cURL->setopt_post();
   $requete_reponse = $cURL->exec();
   if($requete_reponse === FALSE)
   {
     $requete_reponse = 'Erreur : '.curl_error($cURL->handle);
   }
   curl_close($cURL->handle);
   return $requete_reponse;
 }