Κεφάλαιο 19. Aπομακρυσμένα αρχεία

Όσο το allow_url_fopen είναι ενεργοποιημήνο στο php.ini, μπορείτε να χρησιμοποιείτε τα HTTP και FTP URL με τις περισσότερες συναρτήσεις που παίρνουν ένα όνομα αρχείου σαν παράμετρο. Επιπλέον, τα URL μπορούν να χρησιμοποιηθούν με τις include(), include_once(), require() και require_once() δηλώσεις. Δείτε το Παράρτημα J για περισσότερες πληροφορίες σχετικά με τα πρωτόκολλα που υποστηρίζονται από την PHP.

Σημείωση: Στην PHP 4.0.3 και παλαιότερα, για να χρησιμοποιήσετε ταURL wrappers, χρειαζόταν να κάνετε configure τη PHP χρησιμοποιώντας την επιλογή του configure --enable-url-fopen-wrapper.

Σημείωση: Οι Windows εκδόσεις της PHP πριν την PHP 4.3 δεν υποστήριζαν πρόσβαση απομακρυσμένων αρχείων για τις ακόλουθες συναρτήσεις: include(), include_once(), require(), require_once(), και τις imagecreatefromXXX συναρτήσεις στην Αναφορά XLII, Image συναρτήσεις επέκταση.

Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το εξής για να ανοίξετε ένα αρχείο σε ένα remote web server, να διαβάσετε τα δεδομένα που θέλετε, και μετά να χρησιμοποιήσετε τα δεδομένα σε μια ερώτηση βάσης δεδομένων, ή απλά να κάνετε output σε ένα στυλ που ταιριάζει την υπόλοιπη ιστοσελίδα σας.

Παράδειγμα 19-1. Παίρνοντας τον τίτλο μιας απομακρυσμένης σελίδας

<?php
$file
= fopen ("http://www.example.com/", "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);
?>

Μπορείτε επίσης να γράψετε αρχεία σε ένα FTP server (δεδομένου του ότι έχετε συνδεθεί σαν ένας χρήστης με τα σωστά δικαιώματα πρόσβασης). Μπορείτε μόνο να δημιουργήσετε νέα αρχεία με αυτή τη μέθοδο, αν προσπαθήσετε να κάνετε overwrite ένα αρχείο που υπάρχει ήδη, η κλήση της fopen() θα αποτύχει.

Για να συνδεθείτε σαν ένας χρήστης άλλος από τον 'anonymous', πρέπει να ορίσετε το username (και πιθανώς το password) μέσα στο URL, κάπως έτσι: 'ftp://user:password@ftp.example.com/path/to/file'. (Μπορείτε να χρησιμοποιήσετε την ίδια μορφή σύνταξης για να προσπελάσετε αρχεία μέσω του HTTP όταν απαιτούν βασική αναγνώριση.)

Παράδειγμα 19-2. Αποθήκευση δεδομένων σε ένα απομακρυσμένο server

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

Σημείωση: Μπορεί να πήρατε την ιδέα από το παραπάνω παράδειγμα πως μπορείτε να χρησιμοποιήσετε αυτή την τεχνική για να γράψετε σε ένα απομακρυσμένο logfile. Δυστυχώς αυτό δεν θα δουλέψει επειδή η κλήση της fopen() θα αποτύχει αν το απομακρυσμένο αρχείο υπάρχει ήδη. Για να κάνετε κατανεμημένο logging έτσι, πρέπει να ρίξετε μια ματιά στην syslog().