Aussi longtemps que le support des gestionnaires d'URL ("URL fopen wrapper") est activé dans le php.ini, avec l'option allow_url_fopen, vous pouvez 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). Reportez-vous à Liste des protocoles et des gestionnaires supportés pour plus d'informations sur les protocoles supportés par PHP.
Par exemple, vous pouvez suivre l'exemple suivant pour ouvrir un fichier sur un serveur web distant, analyser les résultats pour extraire les informations dont vous avez besoin, et ensuite l'utiliser dans une requête de base de données, ou simplement éditer les informations dans le style de votre 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);
?>Vous pouvez aussi écrire des fichiers sur un serveur FTP (à condition d'être connecté en tant qu'utilisateur ayant les bons droits d'accès). Vous ne pouvez créer que de nouveaux fichiers avec cette méthode ; si vous essayez d'écraser un fichier existant, l'appel à fopen() échouera.
Pour vous connecter avec un utilisateur autre qu'anonyme, vous devez
spécifier un nom d'utilisateur (et certainement le mot de passe) dans
l'URL, comme ftp://user:password@ftp.example.com/path/to/file.
(Vous pouvez 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:
Vous pourriez 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, vous devriez plutôt regarder du côté de syslog().