Ένας από τους πολλούς τρόπους που διαθέτει η php για να αποθηκεύει δεδομένα είναι η έξοδος σε αρχείο κειμένου. Αντίστοιχα για να μπορεί να αποθηκεύει εκεί θα πρέπει να μπορεί να αντλεί κι από εκεί δεδομένα. Σε αυτή την ενότητα θα δούμε πως να αποθηκεύουμε πληροφορίες μέσα σε αρχεία τοπικά στον server μας και αντίστοιχα να τις διαβάζουμε απο αυτά.

Η Έξοδος

Η έξοδος δεδομένων είναι μια χρήσιμη διαδικασία, ειδικά όταν πρόκειται για έξοδο σε κάποιο αρχείο το οποίο μπορεί να χρησιμοποιηθεί ως αρχείο ανάκτησης δεδομένων. Μέσω της εξόδου γράφουμε κάποια δεδομένα σε κάποιο «εξωτερικό» αρχείο, έστω αρχείο κειμένου, και ύστερα αυτό μπορούμε να το εκμεταλλευτούμε όπως εμείς θέλουμε πχ ως αρχείο ανάκτησης δεδομένων. Βέβαια δεν είναι δεσμευτικό το ότι το αρχείο που θα εξάγουμε θα είναι μόνο για ανάκτηση δεδομένων, αλλά μπορεί να είναι ένα απλό αρχείο κειμένου το οποίο απλά να γράφουμε κάτι για να το διαβάσουμε αργότερα.

fwrite

Η εντολή fwrite είναι μια εντολή εξόδου δεδομένων σε αρχείο. Ας δούμε πως χρησιμοποιείται:

  • Χρησιμοποιούμε μια μεταβλητή και την εντολή «fopen» προκειμένου να δημιουργήσουμε ένα στιγμιότυπο αντικειμένου που αναφέρεται στο συγκεκριμένο αρχείο. Η συνάρτηση παίρνει δυο παραμέτρους το όνομα του αρχείου, και έναν χαρακτήρα διαχείρισης του συγκεκριμένου αρχείου. Όλοι οι χαρακτήρες επεξηγούνται παρακάτω αναλυτικά.
  • Ύστερα χρησιμοποιούμε την εντολή «fwrite» σε συνδυασμό με την μεταβλητή του αρχείου που μόλις φτιάξαμε. Η συνάρτηση παίρνει δυο παραμέτρους, η μια είναι η μεταβλητή που αντιπροσωπεύει το αρχείο, και η άλλη είναι το κείμενο που θέλουμε να γράψουμε μέσα σε αυτό.
  • Μόλις τελειώσουμε τις εγγραφές. Χρησιμοποιούμε την εντολή «fclose» για να κλείσουμε την εγγραφή του αρχείου. Η συνάρτηση παίρνει μια μόνο παράμετρο, την μεταβλητή που αντιπροσωπεύει το αρχείο.
<html>
 <head>
  <meta charset="UTF-8">
  <title></title>
 </head>
 <body>
  <?php
   if (isset($_POST['text']) && isset($_POST['file'])) {
    $file = $_POST['file'];
    $f = fopen($file,'w');
    $n = fwrite($f,$_POST['text']);
    echo "Γράφτηκαν επιτυχώς $n bytes στο αρχείο $file .";
   } else {
    ?>
    <form action='write_file.php' method='post'>
     Όνομα αρχείου (λατινικούς χαρακτήρες): <input type="text" name="file"/><br/>
     Κείμενο για εγγραφή <input type='text' name="text"/><br/>
     <input type='submit' value='Αποστολή'/>
    </form>
    <?php
     }
    ?>
 </body>
</html>

fputs

Η συγκεκριμένη συνάρτηση λειτουργεί όπως η fwrite μόνο που γράφει μόνο μια γραμμή κειμένου.

Kostas
Γιάννης
Έλενα
Δημήτρης
Χρήστος
<?php
 $f = fopen("names.txt", "a");
 fputs($f, "Κωνσταντίνος\n");
 fclose($f); 
 echo "ok";
?>

Η είσοδος

Όπως μπορούμε να «βγάλουμε» δεδομένα από μια διαδικτυακή εφαρμογή σε ένα αρχείο έτσι μπορούμε να εισάγουμε κιόλας.

fread

Όπως «ανοίξαμε» ένα αρχείο για να το γράψουμε έτσι μπορούμε να το ανοίξουμε για να το διαβάσουμε, αρκεί να αλλάξουμε δυο πράγματα:

  • Αντί για «w» ως δεύτερη παράμετρο στο fopen θα βάλουμε «r».
  • Αντί για fwrite χρησιμοποιούμε πλέον fread το οποίο παίρνει δυο παραμέτρους ως είσοδο, η πρώτη είναι η μεταβλητή που αντιπροσωπεύει το αρχείο και η δεύτερη είναι μια ακέραια τιμή που ορίζει τον μέγιστο αριθμό bytes που θα διαβαστούν.
Κώστας
Γιάννης
Έλενα
Δημήτρης
Χρήστος
<?php
 $f = fopen('names.txt','r');
 $s = fread($f,20);
 fclose($f);
 echo $s;
?>

fgets

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

Κώστας
Γιάννης
Έλενα
Δημήτρης
Χρήστος
<?php
 $f = fopen('names.txt','r');
 $s = fgets($f);
 fclose($f);
 echo $s;
?>

fgetc

Διαβάζει ένα αρχείο και επιστρέφει έναν μόνο χαρακτήρα από αυτό. Εάν διαβάσει το τέλος του αρχείου τότε επιστρέφει false. Παίρνει ένα μόνο όρισμα, την μεταβλητή του αρχείου που αντιστοιχεί στο fopen. Θυμηθείτε πως οι ελληνικοί χαρακτήρες δεν αποτελούνται από έναν μόνο χαρακτήρα κειμένου, αλλά κάθε ελληνικό γράμμα είναι τρία ή και τέσσερα λατινικά γράμματα.

Kostas
Γιάννης
Έλενα
Δημήτρης
Χρήστος
<?php
 $f = fopen('names.txt','r');
 $s = fgetsc($f);
 fclose($f);
 echo $s;
?>

fgetcsv

Διαβάζει μια γραμμή και επιστρέφει έναν πίνακα μόνο αν αυτό που διαβάσει βρίσκεται σε μορφή csv. Αν αποτύχει επιστρέφει false. Ως είσοδο παίρνει την μεταβλητή που αντιπροσωπεύει το αρχείο.

Kostas,Giannis,Xrhstos
<?php
 $f=fopen("names.txt",'r');
 $array = fgetcsv($f);
 echo "<pre>";
 print_r($array);
 echo "</pre>";
 fclose($f);
?>

feof

Ελέγχει αν ο δείκτης έχει φτάσει στο τέλος του αρχείου, αν ναι επιστρέφει true αλλιώς false. Ως είσοδο παίρνει την μεταβλητή που αντιπροσωπεύει το αρχείο.

Kostas,Giannis,Xrhstos
<?php
 $file=fopen("names.txt",'r');
 while(!feof($file)){
  echo fgets($file);
  echo "<br/>";
 }
 fclose($file);
?>

filesize

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

Kostas,Giannis,Xrhstos

<?php
 echo filesize("names.txt");
?>

Χαρακτήρες διαχείρησης

Κάθε χαρακτήρας καθορίζει το πώς θα συμπεριφερθεί η fopen στο αρχείο.

Χαρακτήρας Επεξήγηση
f Μόνο ανάγνωση.
w Μόνο γραφή. Αν το αρχείο δεν υπάρχει, δημιουργείται.
r+ Γραφή και ανάγνωση.
w+ Γραφή και ανάγνωση. Αν το αρχείο δεν υπάρχει, δημιουργείται.
a Πρόσθεση σε ήδη υπάρχων αρχείο. Αν δεν υπάρχει δημιουργείται.
a+ Γραφή και ανάγνωση σε ήδη υπάρχων αρχείο. Αν δεν υπάρχει, δημιουργείται.

Δείκτης

Ο δείκτης μας βοηθά να γνωρίζουμε που βρισκόμαστε κατά την διάρκεια της εγγραφής και ανάγνωσης ενός αρχείου. Όταν αλληλεπιδρούμε με ένα αρχείο … πχ γράφουμε σε αυτό μια λέξη, τότε η επόμενη λέξη θα γραφτεί αμέσως μετά την προηγούμενη, και όχι στην αρχή του αρχείου. Επομένως υπάρχει «κάτι» το οποίο κρατάει το σημείο στο οποίο «έφτασε» η εγγραφή ή η ανάγνωση.

Γι αυτό τον λόγο χρησιμοποιούνται οι παρακάτω συναρτήσεις.

fseek

Τοποθετεί τον δείκτη αρχείου σε συγκεκριμένη θέση μέσα στο αρχείο. Αν αποτύχει επιστρέφει -1 αλλιώς 0. Παίρνει δυο παραμέτρους μία μεταβλητή που αναφέρεται στο συγκεκριμένο αρχείο και έναν αριθμό που αναφέρεται σε ποιο σημείο να μεταφερθεί ο δείκτης.

Kostas,Giannis,Xrhstos
<?php
 $file = fopen("names.txt","r");
 echo fgets($file);  // διαβάζει την πρώτη γραμμή
 fseek($file,0);// μεταφέρει τον δείκτη στην αρχή
 echo fgets($file); //ξανά διαβάζει την πρώτη γραμμή
 fclose($file);
?>

rewind

Τοποθετεί τον δείκτη στην αρχή του αρχείου. Αν αποτύχει επιστρέφει false αλλιώς true.

Kostas,Giannis,Xrhstos
<?php
 $file = fopen("names.txt","r");
 echo fgets($file);  // διαβάζει την πρώτη γραμμή
 rewind($file);// μεταφέρει τον δείκτη στην αρχή.
 echo fgets($file); //ξανά διαβάζει την πρώτη γραμμή
 fclose($file);
?>