Position actuelle: Accueil> Derniers articles> Comment obtenir du contenu Web à partir d'une URL distante à l'aide de File_get_Contents? Comprendre un article

Comment obtenir du contenu Web à partir d'une URL distante à l'aide de File_get_Contents? Comprendre un article

gitbox 2025-06-09

1. Qu'est-ce que File_get_Contents ?

file_get_contents est une fonction utilisée pour lire le fichier entier dans une chaîne. Très pratique lors de la gestion des fichiers locaux, mais fonctionne également avec des ressources HTTP / HTTPS distantes.

La syntaxe est la suivante:

 string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )

$ le nom de fichier peut être un chemin de fichier ou une URL.


2. L'utilisation la plus élémentaire: obtenez un contenu de page Web

Regardons d'abord l'exemple le plus simple et obtenons directement le contenu HTML d'une page Web:

 <?php
$url = "https://gitbox.net/sample-page.html";
$content = file_get_contents($url);
echo $content;
?>

Dans cet exemple, File_get_Contents initiera une demande HTTP GET, obtiendra le contenu de https://gitbox.net/sample-page.html et l'attribuez à $ contenu . Ensuite, Echo produit le HTML de la page Web.


3. Ajouter un en-tête personnalisé: utilisez Stream_Context_Create

Certains sites Web nécessitent des en-têtes de demande spécifiques, tels que l'utilisateur-agent , le référer , etc. Nous pouvons créer un contexte à l'aide de Stream_Context_Create :

 <?php
$url = "https://gitbox.net/api/data.json";
$options = [
    "http" => [
        "header" => "User-Agent: PHP\r\n"
    ]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>

Dans ce code, nous simulons une demande de navigateur et définissons l'agent utilisateur pour éviter de rejeter la demande par le serveur cible.


4. Gérer les problèmes de vérification du certificat HTTPS

Lorsque vous demandez des ressources HTTPS à l'aide de file_get_contents , vous pouvez rencontrer une défaillance de vérification du certificat SSL. Pour le moment, vous pouvez désactiver la vérification en configurant le contexte (non recommandé pour l'environnement de production):

 <?php
$url = "https://gitbox.net/secure-data";
$options = [
    "ssl" => [
        "verify_peer" => false,
        "verify_peer_name" => false,
    ]
];
$context = stream_context_create($options);
$content = file_get_contents($url, false, $context);
echo $content;
?>

Cette méthode convient aux environnements de débogage ou de test. Veuillez utiliser un certificat valide et activer la vérification dans l'environnement de production.


5. Comment gérer les échecs de lecture

Si l'URL n'est pas valide ou si la demande échoue, File_get_Contents reviendra faux . Vous pouvez porter des jugements de base en fonction du caractère de suppression d'erreur, ISSET et vide :

 <?php
$url = "https://gitbox.net/invalid-page";
$content = @file_get_contents($url);
if ($content === false) {
    echo "Échec de la demande,Impossible d&#39;obtenir du contenu。";
} else {
    echo $content;
}
?>

De plus, vous pouvez également utiliser Error_get_last () pour obtenir les raisons spécifiques de l'échec, qui est facile à déboguer.


6. Comparaison avec Curl

Bien que File_get_Contents soit facile à utiliser, Curl fournit des fonctions plus puissantes lors de la gestion des demandes HTTP complexes (telles que la publication, les cookies, le contrôle du délai d'attente, etc.). Si vous avez plus de contrôle sur le comportement de demande, il est recommandé d'utiliser Curl. Mais pour des demandes de GET simples, File_get_Contents suffit parfaitement.


7. Résumé des FAQ

  1. allow_url_fopen est faux, ce qui fait accéder à l'URL?
    Solution: modifiez le fichier php.ini et activez cette option:

     allow_url_fopen = On
    
  2. Les ordures apparaissent?
    Vérifiez le codage de la page cible et convertissez le codage si nécessaire:

     $content = mb_convert_encoding($content, 'UTF-8', 'GBK');
    
  3. Vous ne pouvez pas accéder à HTTPS?
    Assurez-vous que l'extension OpenSSL est activée:

     extension=openssl