Récupérer une page web en PHP

Il est souvent utile de récupérer une page web en PHP, par exemple lors d'un appel à une API.

Le moyen le plus répandu de le faire est d'utiliser la librairie CURL, mais même pour une simple requête GET, elle doit être initialisée et configurée.

Voici ce que l'on pourrait faire pour récupérer une page :

// initialisation
$resource = curl_init( );

// configuration
curl_setopt( $resource, CURLOPT_URL, 'http://www.toto.fr/page' );
curl_setopt( $resource, CURLOPT_RETURNTRANSFER, true );

// récupération du fichier
$page = curl_exec( $resource );

// libération de la ressource
curl_close( $resource );

Un peu lourd, non ?

Heureusement pour nous, PHP propose nativement une autre fonctionnalité encore peu connue : les flux.

Les flux ont été conçus pour faciliter la lecture et l'écriture de données sur différents supports. Peu importe le type de données ou le support d'enregistrement (requête HTTP, fichier compressé, flux audio et autres), on utilise la même méthode.

Je ne vais pas m'étendre sur les flux, mais le principe de base est de proposer l'accès à une ressource par une url spécifique. On peut accéder à un fichier par file:///chemin/du/fichier, à une page web par http://www.toto.fr/page, ou encore aux données de formulaires par php://input.

Mais rappelez-vous, ce qui nous intéresse ici, c'est toujours de récupérer une page web !

Voici comment le faire en toute simplicité avec les flux :

// récupération du fichier
$page = file_get_contents( 'http://www.toto.fr/page' );

On agit tout simplement comme si on lisait un fichier. Toute la gestion bas-niveau du protocole HTTP est transparente, on s'en sort donc en une ligne, contre cinq avec CURL !

De plus, on gagne beaucoup en lisibilité. La ligne de code au-dessus peut se lire : « ma page, c'est le contenu du fichier situé sur http://www.toto.fr/page ».

Ce sera tout pour aujourd'hui !

Commentaires

    • Intéressant !
      Donc ça crée carrément le tableau dans le scope global ?

      file_get_contents( 'http://toto.fr' );
      var_dump( $http_response_header );

  • Merci pour ce précieux conseil !
    Ca correspond directement à mon besoin. !
    Merci !

  • Bonjour à tous,
    Petit problème pour moi, sans importance mais j’aimerais savoir pourquoi.
    La méthode « lourde » fonctionne très bien sur OVH mais pas sur FREE

    l’autre méthode courte :
    $page = file_get_contents( ‘http://www.toto.fr/page’ );
    // ne fonctionne pas. (erreur PHP)
    Je n’ai donc pas pu la tester.
    Merci

Répondre à Félix Girault Annuler la réponse

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *