Russian Ukraine English
Catalog RSS


Chapter 20. Using remote files

As long as support for the "URL fopen wrapper" is enabled when you configure PHP (which it is unless you explicitly pass the --disable-url-fopen-wrapper flag to configure (for versions up to 4.0.3) or set allow_url_fopen to off in php.ini (for newer versions), you can use HTTP and FTP URLs with most functions that take a filename as a parameter, including the require() and include() statements.

Note: You can't use remote files in include() and require() statements on Windows.

For example, you can use this to open a file on a remote web server, parse the output for the data you want, and then use that data in a database query, or simply to output it in a style matching the rest of your website.

Example 20-1. Getting the title of a remote page


 <?php $file = fopen ("http://www.php.net/", "r"); if (!$file) {     echo "<p>Unable to open remote file.\n";     exit; } while (!feof ($file)) {     $line = fgets ($file, 1024);     /* This only works if the title and its tags are on one line */     if (eregi ("<title>(.*)</title>", $line, $out)) {         $title = $out[1];         break;     } } fclose($file); ?>      

You can also write to files on an FTP as long you connect as a user with the correct access rights, and the file doesn't exist already. To connect as a user other than 'anonymous', you need to specify the username (and possibly password) within the URL, such as 'ftp://user:password@ftp.example.com/path/to/file'. (You can use the same sort of syntax to access files via HTTP when they require Basic authentication.)

Example 20-2. Storing data on a remote server


 <?php $file = fopen ("ftp://ftp.php.net/incoming/outputfile", "w"); if (!$file) {     echo "<p>Unable to open remote file for writing.\n";     exit; } /* Write the data here. */ fputs ($file, "$HTTP_USER_AGENT\n"); fclose ($file); ?>        

Note: You might get the idea from the example above to use this technique to write to a remote log, but as mentioned above, you can only write to a new file using the URL fopen() wrappers. To do distributed logging like that, you should take a look at syslog().

Led