Aussi longtemps que le support des gestionnaires d'URL ("URL fopen wrapper") est activé dans le php.ini, avec l'option allow_url_fopen, il est possible d'utiliser des URL (HTTP et FTP) avec la majorité des fonctions qui utilisent un nom de fichier comme paramètre. Cela inclut notamment include, include_once, require et require_once (allow_url_include doit être actif pour les utiliser). Se reporter à Liste des protocoles et des gestionnaires supportés pour plus d'informations sur les protocoles supportés par PHP.
Par exemple, il est possible de suivre l'exemple suivant pour ouvrir un fichier sur un serveur web distant, analyser les résultats pour extraire les informations nécessaires, et ensuite les utiliser dans une requête de base de données, ou simplement éditer les informations dans le style du site.
Exemple #1 Connaître le titre d'une page distante
<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
echo "<p>Impossible de lire la page.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
/* Cela ne fonctionne que si le titre et ses balises sont sur une seule ligne */
if (preg_match ("@\<title\>(.*)\</title\>@i", $line, $out)) {
$title = $out[1];
break;
}
}
fclose($file);
?>Il est aussi possible d'écrire des fichiers sur un serveur FTP (à condition d'être connecté en tant qu'utilisateur ayant les bons droits d'accès). Seuls de nouveaux fichiers peuvent être créés avec cette méthode ; toute tentative d'écraser un fichier existant fera que l'appel à fopen() échouera.
Pour se connecter avec un utilisateur autre qu'anonyme, il faut
spécifier un nom d'utilisateur (et certainement le mot de passe) dans
l'URL, comme ftp://user:[email protected]/path/to/file.
(Il est possible d'utiliser le même type de syntaxe pour accéder
aux fichiers via HTTP lorsqu'ils nécessitent une
identification simple).
Exemple #2 Stocker des données sur un serveur distant
<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
echo "<p>Impossible d'ouvrir le fichier distant pour écriture.\n";
exit;
}
/* Ecriture des données. */
fwrite ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>
Note:
On pourrait avoir l'idée, à partir de l'exemple ci-dessus, d'utiliser la même technique pour écrire dans un fichier de log distant. Malheureusement cela ne fonctionnerait pas car l'appel à fopen() échouera si le fichier distant existe déjà. Pour faire de la journalisation distribuée, il est recommandé de plutôt regarder du côté de syslog().