Χειρισμός αρχείων

Άνοιγμα αρχείου
Για το χειρισμό ενός αρχείου, απαιτείται αρχικά το άνοιγμά του με τη βοήθεια της συνάρτησης fopen().

Σύνταξη της fopen
fopen ($filename, $mode)

Επιστρέφει έναν δείκτη αρχείου (file pointer) που βοηθάει τον προγραμματιστή να πραγματοποιεί τις ενέργειες που θέλει στο αρχείο που άνοιξε.

Η fopen δέχεται δύο τα εξής δύο ορίσματα:

Παράμετρος Περιγραφή
$filename Το όνομα του αρχείο που θέλουμε να ανοίξουμε
$mode Ο τύπος της πρόσβασης που θέλουμε να έχουμε στο αρχείο

Η παράμετρος $mode δέχεται συγκεκριμένες τιμές ανάλογα με την πρόσβαση που θέλουμε να έχουμε στο αρχείο.

Παράμετρος της mode Πρόσβαση
'r' Άνοιγμα του αρχείου μόνο για ανάγνωση. Ο δείκτης αρχείου τοποθετείται στην αρχή του αρχείου.
'r+' Άνοιγμα του αρχείου για ανάγνωση και εγγραφή δεδομένων. Ο δείκτης αρχείου τοποθετείται στην αρχή του αρχείου.
'w' Άνοιγμα του αρχείου μόνο για εγγραφή. Ο δείκτης αρχείου τοποθετείται στην αρχή του αρχείου και το διαγράφει. Αν δεν υπάρχει το αρχείο, γίνεται προσπάθεια δημιουργίας του.
'w+' Άνοιγμα του αρχείου για ανάγνωση και εγγραφή. Ο δείκτης αρχείου τοποθετείται στην αρχή του αρχείου και το διαγράφει. Αν δεν υπάρχει το αρχείο, γίνεται προσπάθεια δημιουργίας του.
'a' Άνοιγμα του αρχείου μόνο για εγγραφή. Ο δείκτης αρχείου τοποθετείται στο τέλος του αρχείου. Αν δεν υπάρχει το αρχείο, γίνεται προσπάθεια δημιουργίας του.
'a+' Άνοιγμα του αρχείου για ανάγνωση και εγγραφή. Ο δείκτης αρχείου τοποθετείται στο τέλος του αρχείου. Αν δεν υπάρχει το αρχείο, γίνεται προσπάθεια δημιουργίας του.
'x' Άνοιγμα του αρχείου μόνο για εγγραφή. Αν υπάρχει ήδη το αρχείο, επιστρέφει false, διαφορετικά γίνεται προσπάθεια δημιουργίας του.
'x+' Άνοιγμα του αρχείου για ανάγνωση και εγγραφή. Αν υπάρχει ήδη το αρχείο, επιστρέφει false, διαφορετικά γίνεται προσπάθεια δημιουργίας του.

Παράδειγμα fopen
Έστω το αρχείο test.txt, το οποίο αν ανοίξουμε με κάποιο επεξεργαστή κειμένου, περιέχει τα εξής δεδομένα:

Test line 1
Test line 2
Test line 3

Για να ανοίξουμε το αρχείο με τη βοήθεια της fopen, μπορούμε να γράψουμε:

<?php
    if (file_exists ( 'test.txt' ) ) {
        $handle = fopen ( 'test.txt', 'r' );
        echo "To αρχείο ανοίχθηκε με επιτυχία.";
        fclose ( $handle );
    } else {
        echo "Δεν υπάρχει το αρχείο.";
    }
?>

Στη μεταβλητή $handle καταχωρείται ο file pointer του αρχείου. Τυπώνεται στην οθόνη μήνυμα ανάλογα με το αν ήταν επιτυχές το άνοιγμα ή οχι του αρχείου.

 

Κλείσιμο αρχείου
Κάθε φορά που ανοίγουμε ένα αρχείο και αφού πραγματοποιήσουμε όλες τις ενέργειες που θέλουμε, καλό είναι να το κλείνουμε. Το κλείσιμο του αρχείου γίνεται με τη βοήθεια της συνάρτησης fclose, η οποία δέχεται σαν όρισμα τον file pointer του αρχείου. Επομένως, ο παραπάνω κώδικας μπορεί να γίνει:


<?php
    $handle = fopen ( 'test.txt', 'r' ); // Άνοιγμα του αρχείου test.txt μόνο για ανάγνωση

    if ( $handle )
    {
        echo "Το αρχείο άνοιξε με επιτυχία.";
        // Κώδικας που εκτελείται
        fclose ( $handle ); // Κλείσιμο του αρχείου
    } // end if
    else
    {
        echo "Αποτυχία ανοίγματος του αρχείου.";
    } // end else
?>

 

Έλεγχος τέλους αρχείου
Ένας έλεγχος που πρέπει να γίνεται συχνά κατά την ανάγνωση ή επεξεργασία ενός αρχείου είναι αν ο file pointer έχει φτάσει στο τέλος του αρχείου (EOF – End Of File).Ο έλεγχος πραγματοποιείται με τη βοήθεια της συνάρτησης feof ().

Σύνταξη
feof ( $handle )

Επιστρέφει true αν ο file pointer είναι στο τέλος του αρχείου, διαφορετικά false. Για παράδειγμα:

<?php
    $handle = fopen ( 'test.txt', 'r' ); // Άνοιγμα του αρχείου test.txt μόνο για ανάγνωση

    if ( $handle )
    {
        if ( feof ( $handle ) )
        {
            echo "Ο file pointer βρίσκεται στο τέλος του αρχείου.";
        } // end if
        else
        {
            echo "Ο file pointer δε βρίσκεται στο τέλος του αρχείου.";
        } // end else

        fclose ( $handle ); // Κλείσιμο του αρχείου
    } // end if
?>

Ο παραπάνω κώδικας θα τυπώσει το μήνυμα "Ο file pointer δε βρίσκεται στο τέλος του αρχείου.", αφού, όπως είδαμε και στον πίνακα της fopen, η επιλογή “r” τοποθετεί το δείκτη του αρχείου στην αρχή του.

 

Ανάγνωση αρχείου
Η ανάγνωση ενός αρχείου μπορεί να γίνει με τη βοήθεια της συνάρτησης fgets. Η συνάρτηση fgets διαβάζει γραμμή γραμμή του αρχείου μέχρι ο file pointer να φτάσει στο τέλος του. Επιστρέφει τους χαρακτήρες που διαβάζει από το αρχείο ή false στην περίπτωση που ο file pointer είναι στο τέλος του αρχείου.

Σύνταξη
fgets ( $handle, $bytes )

Παράμετρος Περιγραφή
$handle Ο file pointer του αρχείου.
$bytes Ο αριθμός των bytes του αρχείου που θέλουμε να διαβάσουμε. Κάθε χαρακτήρας είναι και 1 byte. Είναι προαιρετική παράμετρος, οπότε στην περίπτωση που την παραλείψουμε, η ανάγνωση του αρχείου συνεχίζει έως ότου φτάσει ο file pointer στο τέλος του.

 

Παράδειγμα
<?php
    $handle = fopen ( 'test.txt', 'r' ); // Άνοιγμα του αρχείου test.txt μόνο για ανάγνωση
    if ( $handle )
    {
        while ( !feof ( $handle ) ) // Ελέγχουμε συνεχώς αν έχουμε φτάσει στο τέλος του αρχείου
        {
            $output = fgets ( $handle );
            echo $output;
        } // end while

        fclose ( $handle ); // Κλείσιμο του αρχείου
    } // end if
?>

Στον παραπάνω κώδικα, στη μεταβλητή $output καταχωρούμε τους χαρακτήρες που διαβάζουμε από το αρχείο test.txt και τους εκτυπώνουμε στην οθόνη. Το αποτέλεσμα στο φυλλομετρητή θα είναι:

Test line 1 Test line 2 Test line 3

 

Εγγραφή αρχείου
Σε κάποιες περιπτώσεις θέλουμε είτε να επεξεργαστούμε ένα υπάρχον αρχείο, να αλλάξουμε δηλαδή τα δεδομένα του είτε να δημιουργήσουμε ένα καινούριο αρχείο. Η εγγραφή ενός αρχείου γίνεται με τη βοήθεια της συνάρτησης fwrite (ή fputs).

Σύνταξη
fwrite ($handle, $string, $bytes);

Επιστρέφει τον αριθμό των bytes που εγγράφηκαν στο αρχείο ή false σε περίπτωση αποτυχίας της εγγραφής.

Παράμετρος Περιγραφή
$handle Ο file pointer του αρχείου.
$string Το κείμενο που θέλουμε να γράψουμε στο αρχείο.
$bytes Προαιρετική. Αν δοθεί αριθμός των bytes, η εγγραφή θα σταματήσει στον αριθμό αυτό ανεξάρτητη αν η μεταβλητή $string περιέχει επιπλέον κείμενο.

 

Παράδειγμα
<?php
    $handle = fopen ( 'new_file.txt', 'w' ); // Άνοιγμα του αρχείου test.txt μόνο για εγγραφή
    $text1 = "Hello ";
    $text2 = "world!";

    if ( $handle )
    {
        fwrite ( $handle, $text1 ); // Εγγραφή της πρώτης μεταβλητής
        fwrite ( $handle, $text2 ); // Εγγραφή της δεύτερης μεταβλητής

        fclose ( $handle ); // Κλείσιμο του αρχείου
    } // end if
?>

Μετά την εκτέλεση του κώδικα, θα δούμε ότι έχει δημιουργηθεί ένα αρχείο με όνομα 'new_file.txt', το οποίο αν ανοίξουμε με έναν editor, θα δούμε ότι περιέχει το εξής:

Hello world!