W3docs

Comprendre file_get_contents en PHP

file_get_contents est une fonction PHP qui lit le contenu d'un fichier dans une chaîne. Très utile pour les fichiers texte locaux ou distants.

file_get_contents est une fonction PHP qui permet de lire le contenu d'un fichier dans une chaîne. Cette fonction est particulièrement utile pour travailler avec des fichiers texte et peut être utilisée pour récupérer le contenu d'un fichier depuis un serveur distant ou un système de fichiers local.

Syntaxe

La syntaxe de la fonction file_get_contents est la suivante :

Syntaxe de la fonction PHP file_get_contents

file_get_contents(
    string $filename,
    bool $use_include_path = false,
    ?resource $context = null,
    int $offset = 0,
    ?int $maxlen = null
): string|false
  • $filename : Le chemin vers le fichier ou l'URL à lire.
  • $use_include_path : (optionnel) Si défini à TRUE, la fonction recherchera le fichier dans le chemin d'inclusion.
  • $context : (optionnel) Une ressource de contexte valide créée avec stream_context_create().
  • $offset : (optionnel) Indique à partir de quel endroit commencer la lecture dans le fichier. Si $offset est négatif, la fonction commencera la lecture depuis la fin du fichier.
  • $maxlen : (optionnel) Indique le nombre maximum d'octets à lire.

Fonctionnement de file_get_contents

La fonction file_get_contents() prend un chemin de fichier ou une URL comme premier argument et retourne l'intégralité du contenu du fichier sous forme d'une seule chaîne. Comme elle charge tout en mémoire d'un coup, c'est la manière la plus simple de lire un fichier entier — mais aussi le mauvais outil pour les fichiers plus volumineux que la mémoire disponible.

La valeur de retour est le contenu du fichier en cas de succès, ou false en cas d'échec. Comme un fichier vide retourne légitimement une chaîne vide "" (qui est fausse), comparez toujours avec l'opérateur strict !== false plutôt qu'une vérification de véracité souple.

Lecture d'un fichier local

L'utilisation la plus courante consiste à lire un petit fichier local, comme un fichier de configuration ou un fichier modèle :

$content = file_get_contents('config.txt');

if ($content !== false) {
    echo $content;
} else {
    echo "Error: could not read the file.";
}

file_get_contents() retourne false en cas d'échec — par exemple, lorsque le fichier n'existe pas ou que le processus ne dispose pas de la permission de lecture — et émet également un avertissement PHP. Pour supprimer l'avertissement et gérer l'erreur vous-même, préfixez l'appel avec l'opérateur de contrôle d'erreur @ :

$content = @file_get_contents('missing.txt');

if ($content === false) {
    echo "File is unavailable.";
}

Lecture d'une partie d'un fichier avec offset et maxlen

Il n'est pas nécessaire de lire l'intégralité du fichier. Les paramètres $offset et $maxlen permettent de lire une tranche, ce qui est pratique pour inspecter les en-têtes ou les très grands fichiers :

// File contains: "Hello, World!"
// Read 5 bytes starting at offset 7
echo file_get_contents('greeting.txt', false, null, 7, 5); // World

Un cas d'utilisation courant consiste à lire uniquement les premiers octets pour détecter le type d'un fichier, sans charger l'intégralité du fichier en mémoire.

Récupération d'une URL distante

Lorsque le paramètre allow_url_fopen de PHP est activé, vous pouvez passer une URL http:// ou https:// et file_get_contents() téléchargera le corps de la réponse :

$html = file_get_contents('https://example.com');

if ($html !== false) {
    echo substr($html, 0, 100); // first 100 characters
}

C'est pratique pour des scripts rapides, mais pour les appels HTTP en production — où vous avez besoin de délais d'attente, d'en-têtes personnalisés, de corps POST ou de codes d'erreur détaillés — l'extension cURL est un choix plus robuste.

Consommation d'une API JSON

Une tâche fréquente consiste à récupérer du JSON depuis une API et à le décoder dans un array PHP. Combinez file_get_contents() avec json_decode() :

$json = file_get_contents('https://api.example.com/data.json');
$data = json_decode($json, true); // true => associative array

echo $data['name'];

Envoi d'en-têtes avec un contexte de flux

Pour envoyer des en-têtes HTTP personnalisés, définir un délai d'attente ou effectuer une requête POST, passez un contexte de flux créé avec stream_context_create() comme troisième argument :

$context = stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/json\r\n",
        'content' => json_encode(['key' => 'value']),
        'timeout' => 5,
    ],
]);

$response = file_get_contents('https://api.example.com/submit', false, $context);

Avantages

  • Simple : récupère un fichier entier en une seule ligne, sans avoir à ouvrir, lire et fermer manuellement un descripteur de fichier.
  • Rapide pour les petits fichiers : efficace pour lire des fichiers de configuration, de modèles ou de données de petite à moyenne taille.
  • Polyvalent : fonctionne sur les chemins locaux et, avec allow_url_fopen, sur les URLs distantes http/https/ftp via la même API.

Limites et pièges

  • Utilisation de la mémoire : le fichier entier est chargé en mémoire, donc la lecture d'un fichier de plusieurs gigaoctets peut dépasser la memory_limit de PHP. Privilégiez le streaming de grands fichiers avec fopen() et fread() ou la lecture ligne par ligne avec fgets().
  • Pas de détail sur les erreurs HTTP : pour une réponse distante 404 ou 500, l'appel retourne false (ou un contenu partiel) sans code de statut facilement accessible. Utilisez l'extension cURL lorsque vous devez inspecter le statut de la réponse.
  • allow_url_fopen doit être activé : les URLs distantes échouent silencieusement si cette directive php.ini est désactivée, ce qui est courant sur les serveurs renforcés.
  • Fichier vide vs. échec : un fichier vide retourne "", pas false — une raison supplémentaire de tester avec !== false.

Fonctions associées

  • file_put_contents() — le pendant en écriture ; enregistre une chaîne dans un fichier en un seul appel.
  • file() — lit un fichier dans un array de lignes plutôt qu'une seule chaîne.
  • readfile() — lit un fichier et l'écrit directement dans le tampon de sortie (idéal pour servir des téléchargements).
  • fopen() — ouvre un descripteur pour une lecture et une écriture incrémentales en streaming.

Conclusion

file_get_contents() est une fonction simple et polyvalente pour lire le contenu de fichiers locaux et d'URLs distantes dans une chaîne. Sa commodité en fait le premier choix pour les petits fichiers, les données de configuration et les appels API rapides. Pour les très grands fichiers, privilégiez le streaming avec fopen()/fread() ; pour les requêtes HTTP en production, privilégiez cURL. Utilisée avec une vérification stricte !== false sur la valeur de retour, elle reste l'une des fonctions d'entrée/sortie les plus pratiques en PHP.

Pratique

Pratique
Qu'est-ce qui décrit la fonction 'file_get_contents()' en PHP ?
Qu'est-ce qui décrit la fonction 'file_get_contents()' en PHP ?
Was this page helpful?