Php πώς να προφέρετε. Εργασία με αρχεία σε php: άνοιγμα, εγγραφή, ανάγνωση. Παραδοσιακές μέθοδοι αφαίρεσης

Τελευταία ενημέρωση: 1/11/2015

Όπως οι περισσότερες γλώσσες προγραμματισμού, η PHP υποστηρίζει την εργασία με αρχεία, τα οποία είναι ένας από τους τρόπους αποθήκευσης πληροφοριών.

Ανάγνωση και εγγραφή αρχείων

Άνοιγμα και κλείσιμο αρχείων

Για να ανοίξετε αρχεία στην PHP, ορίζεται η συνάρτηση fopen(). Έχει τον ακόλουθο ορισμό: πόρος fopen(string $filename, string $mode) . Η πρώτη παράμετρος $filename αντιπροσωπεύει τη διαδρομή προς το αρχείο και η δεύτερη είναι η λειτουργία ανοίγματος. Ανάλογα με τον σκοπό ανοίγματος και τον τύπο του αρχείου, αυτή η παράμετρος μπορεί να λάβει τις ακόλουθες τιμές:

    "r" : Το αρχείο ανοίγει μόνο για ανάγνωση. Εάν το αρχείο δεν υπάρχει, επιστρέφει false

    "r+" : Το αρχείο ανοίγει μόνο για ανάγνωση και εγγράψιμο. Εάν το αρχείο δεν υπάρχει, επιστρέφει false

    "w" : Το αρχείο ανοίγει για εγγραφή. Εάν ένα τέτοιο αρχείο υπάρχει ήδη, τότε αντικαθίσταται, αν όχι, τότε δημιουργείται.

    "w+" : Το αρχείο ανοίγει για εγγραφή και αναγνώσιμο. Εάν ένα τέτοιο αρχείο υπάρχει ήδη, τότε αντικαθίσταται, αν όχι, τότε δημιουργείται.

    "a" : Το αρχείο ανοίγει για εγγραφή. Εάν ένα τέτοιο αρχείο υπάρχει ήδη, τότε τα δεδομένα εγγράφονται στο τέλος του αρχείου και παραμένουν τα παλιά δεδομένα. Εάν το αρχείο δεν υπάρχει, δημιουργείται

    "a+" : Το αρχείο ανοίγει για ανάγνωση και γραφή. Εάν το αρχείο υπάρχει ήδη, τότε τα δεδομένα προστίθενται στο τέλος του αρχείου. Εάν το αρχείο δεν υπάρχει, δημιουργείται

Η έξοδος της συνάρτησης fopen θα είναι ένας περιγραφέας αρχείου. Αυτή η λαβή χρησιμοποιείται για λειτουργίες αρχείων και για το κλείσιμο του αρχείου.

Μετά την ολοκλήρωση της εργασίας, το αρχείο πρέπει να κλείσει χρησιμοποιώντας τη συνάρτηση fclose(), η οποία λαμβάνει ως παράμετρο έναν περιγραφέα αρχείου. Για παράδειγμα, ας ανοίξουμε και να κλείσουμε ένα αρχείο:

$fd = fopen("form.php", "r") ή die("δεν μπορούσα να ανοίξω το αρχείο"); fclose($fd);

Η κατασκευή ή die ("κείμενο σφάλματος") επιτρέπει στο σενάριο να σταματήσει να εκτελείται και να εμφανίσει κάποιο μήνυμα σφάλματος εάν η συνάρτηση fopen δεν μπορούσε να ανοίξει το αρχείο.

Διαβάζοντας ένα αρχείο

Μπορείτε να χρησιμοποιήσετε πολλές λειτουργίες για να διαβάσετε ένα αρχείο. Για ανάγνωση γραμμή προς γραμμή, χρησιμοποιείται η συνάρτηση fgets(), η οποία λαμβάνει έναν περιγραφέα αρχείου και επιστρέφει ανάγνωση μιας γραμμής. Ας δούμε ολόκληρο το αρχείο γραμμή προς γραμμή:

Κάθε φορά που καλείται η fgets(), η PHP θα τοποθετεί τον δείκτη στο τέλος της γραμμής που διαβάζεται. Για την παρακολούθηση του τέλους ενός αρχείου, χρησιμοποιείται η συνάρτηση feof(), η οποία επιστρέφει true όταν ολοκληρωθεί το αρχείο. Και μέχρι να φτάσουμε στο τέλος του αρχείου, μπορούμε να χρησιμοποιήσουμε τη συνάρτηση fgets().

Διαβάζοντας ολόκληρο το αρχείο

Σε αυτήν την περίπτωση, δεν χρειάζεται να ανοίξουμε ρητά το αρχείο, να αποκτήσουμε μια λαβή και, στη συνέχεια, να κλείσουμε το αρχείο.

Αποκλεισμός ανάγνωσης

Μπορείτε επίσης να κάνετε ανάγνωση μπλοκ προς μπλοκ, δηλαδή να διαβάσετε έναν ορισμένο αριθμό byte από ένα αρχείο χρησιμοποιώντας τη συνάρτηση fread():

Η συνάρτηση fread() λαμβάνει δύο παραμέτρους: τη λαβή του αρχείου για ανάγνωση και τον αριθμό των byte προς ανάγνωση. Όταν διαβάζεται ένα μπλοκ, ο δείκτης στο αρχείο μετακινείται στο τέλος αυτού του μπλοκ. Επίσης, χρησιμοποιώντας τη συνάρτηση feof() μπορείτε να παρακολουθήσετε την ολοκλήρωση ενός αρχείου.

Γράψτε ένα αρχείο

Για να γράψετε ένα αρχείο, χρησιμοποιήστε τη συνάρτηση fwrite(), η οποία γράφει την ακόλουθη γραμμή στο αρχείο:

Μια άλλη συνάρτηση fputs() λειτουργεί παρόμοια:

Εργασία με τον δείκτη του αρχείου

Όταν ανοίγετε ένα αρχείο για ανάγνωση ή εγγραφή σε λειτουργία "w", ο δείκτης στο αρχείο τοποθετείται στην αρχή. Κατά την ανάγνωση δεδομένων, η PHP μετακινεί τον δείκτη στο αρχείο στο τέλος του μπλοκ των δεδομένων που διαβάζονται. Ωστόσο, μπορούμε επίσης να χειριστούμε χειροκίνητα τον δείκτη στο αρχείο και να τον ορίσουμε σε μια αυθαίρετη θέση. Για να γίνει αυτό πρέπει να χρησιμοποιήσετε τη λειτουργία fseek, το οποίο έχει τον ακόλουθο επίσημο ορισμό:

Int fseek (πόρος $handle , int $offset [, int $whence = SEEK_SET ])

Η παράμετρος $handle αντιπροσωπεύει μια λαβή αρχείου. Η παράμετρος $offset είναι η μετατόπιση σε byte σε σχέση με την αρχή του αρχείου από το οποίο θα ξεκινήσει η ανάγνωση/εγγραφή. Η τρίτη προαιρετική παράμετρος καθορίζει τον τρόπο ρύθμισης της μετατόπισης. Μπορεί να πάρει τρεις τιμές:

    SEEK_SET: προεπιλεγμένη τιμή, ορίζει τη μετατόπιση σε byte μετατόπισης σε σχέση με την αρχή του αρχείου

    SEEK_CUR: ορίζει τη μετατόπιση σε byte μετατόπισης σε σχέση με την αρχή της τρέχουσας θέσης στο αρχείο

    SEEK_END : ορίζει τη μετατόπιση ώστε να αντισταθμίζει τα byte από το τέλος του αρχείου

Εάν ο δείκτης εγκατασταθεί με επιτυχία, η συνάρτηση fseek() επιστρέφει 0 και εάν ο δείκτης δεν είναι επιτυχής, επιστρέφει -1.

Παράδειγμα χρήσης της συνάρτησης:

$fd = fopen("hello.txt", "w+") ή die("δεν ήταν δυνατό να ανοίξει το αρχείο"); $str = "Γεια σου κόσμο!"; // γραμμή για εγγραφή fwrite($fd, $str); // γράψτε τη γραμμή στην αρχή fseek($fd, 0); // τοποθετήστε τον δείκτη του αρχείου στην αρχή fwrite($fd, "Oink"); // γράψτε τη γραμμή στην αρχή fseek($fd, 0, SEEK_END); // τοποθετήστε τον δείκτη στο τέλος fwrite($fd, $str); // γράψτε μια άλλη γραμμή στο τέλος fclose($fd);

Σχετικά με τη χρήση των συναρτήσεων fopen, fclose, feof, fgets, fgetss και fscanf

Ας απαριθμήσουμε όλες τις πιθανότητες

Ένα από τα πλεονεκτήματα της εργασίας με σύγχρονες γλώσσες προγραμματισμού όπως η PHP είναι ο αριθμός των διαθέσιμων δυνατοτήτων. Η PHP θα μπορούσε εύκολα να υιοθετήσει το μότο της Perl, «Υπάρχουν περισσότεροι από ένας τρόποι να κάνεις κάτι», ειδικά όταν πρόκειται για την επεξεργασία αρχείων. Αλλά με την πληθώρα των διαθέσιμων εργαλείων, το ερώτημα είναι ποιο είναι το καλύτερο για να ολοκληρώσετε τη δουλειά. Φυσικά, η απάντηση σε αυτήν την ερώτηση εξαρτάται πραγματικά από τους στόχους σας κατά την επεξεργασία του αρχείου, επομένως η εκμάθηση όλων των δυνατοτήτων της γλώσσας αξίζει τον χρόνο σας.

Παραδοσιακές μέθοδοι αφαίρεσης

Οι μέθοδοι fopen είναι ίσως οι πιο γνωστές στους προγραμματιστές C και C++ του παρελθόντος, καθώς είναι λίγο πολύ τα εργαλεία που βρίσκονται στα χέρια σας εδώ και χρόνια, αν έχετε εργαστεί με αυτές τις γλώσσες προγραμματισμού. Για οποιαδήποτε από αυτές τις μεθόδους, ακολουθείτε την τυπική διαδικασία, χρησιμοποιώντας το fopen για να ανοίξετε το αρχείο, μια συνάρτηση για την ανάγνωση των δεδομένων και, στη συνέχεια, το fclose για να κλείσετε το αρχείο, όπως φαίνεται στην Λίστα 1.

Λίστα 1. Άνοιγμα και ανάγνωση αρχείου χρησιμοποιώντας fgets
$file_handle = fopen("myfile", "r"); ενώ (!feof($file_handle)) ( $line = fgets($file_handle); echo $line; ) fclose($file_handle);

Αν και αυτές οι λειτουργίες είναι γνωστές στους περισσότερους έμπειρους προγραμματιστές, επιτρέψτε μου να αναλύσω πώς λειτουργούν. Στην πραγματικότητα ακολουθείτε αυτά τα βήματα:

  1. Ανοίξτε το αρχείο. Το $file_handle αποθηκεύει έναν σύνδεσμο προς το ίδιο το αρχείο.
  2. Ελέγξτε για να δείτε αν έχετε φτάσει στο τέλος του αρχείου.
  3. Συνεχίστε να διαβάζετε το αρχείο μέχρι να φτάσετε στο τέλος, εκτυπώνοντας κάθε γραμμή που διαβάζετε.
  4. Κλείστε το αρχείο.

Έχοντας αυτό κατά νου, θα εξετάσω κάθε συνάρτηση αρχείου που χρησιμοποιείται εδώ.

λειτουργία fopen

Η συνάρτηση fopen δημιουργεί μια σύνδεση με ένα αρχείο. Λέω "καθιερώνει μια σύνδεση", επειδή, εκτός από το άνοιγμα ενός αρχείου, το fopen μπορεί επίσης να ανοίξει μια διεύθυνση URL:

$fh = fopen("http://127.0.0.1/", "r");

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

Σημείωση:Η επιλογή "r" που χρησιμοποιείται στο fopen υποδεικνύει ότι το αρχείο είναι ανοιχτό μόνο για ανάγνωση. Εφόσον η εγγραφή σε ένα αρχείο δεν περιλαμβάνεται στο εύρος των θεμάτων που συζητούνται σε αυτό το άρθρο, δεν θα απαριθμήσω όλες τις πιθανές τιμές της παραμέτρου. Ωστόσο, πρέπει να αλλάξετε το "r" σε "rb" εάν διαβάζετε από δυαδικά αρχεία για συμβατότητα μεταξύ πλατφορμών. Παρακάτω είναι ένα παράδειγμα αυτού του τύπου.

λειτουργία feof

Η εντολή feof καθορίζει εάν η ανάγνωση έχει φτάσει στο τέλος του αρχείου και επιστρέφει True ή False. Ο βρόχος που εμφανίζεται συνεχίζεται μέχρι το τέλος του αρχείου "myfile". Λάβετε υπόψη ότι το feof επιστρέφει επίσης False εάν διαβάζετε μια διεύθυνση URL και ο χρόνος σύνδεσης λήγει επειδή δεν υπάρχουν άλλα δεδομένα για ανάγνωση.

Λειτουργία fclose

Ας παραλείψουμε τη μέση της Καταχώρισης 1 και ας πάμε στο τέλος. Το fclose κάνει το αντίθετο από το fopen: κλείνει τη σύνδεση με το αρχείο ή τη διεύθυνση URL. Μετά την εκτέλεση αυτής της λειτουργίας, δεν θα μπορείτε πλέον να διαβάζετε από το αρχείο ή την υποδοχή.

λειτουργία fgets

Επιστρέφοντας μερικές γραμμές πίσω στη Λίστα 1, θα φτάσετε στην καρδιά της διαδικασίας επεξεργασίας αρχείων: στην πραγματικότητα την ανάγνωση του αρχείου. Η συνάρτηση fgets είναι το όπλο της επιλογής σας για το πρώτο παράδειγμα. Αρπάζει μια γραμμή δεδομένων από ένα αρχείο και τα επιστρέφει ως συμβολοσειρά. Από εκεί μπορείτε να εμφανίσετε τα δεδομένα ή να τα επεξεργαστείτε με άλλο τρόπο. Το παράδειγμα στη Λίστα 1 εκτυπώνει ολόκληρο το αρχείο.

Εάν αποφασίσετε να περιορίσετε το μέγεθος του κομματιού δεδομένων με το οποίο εργάζεστε, μπορείτε να προσθέσετε ένα όρισμα fgets για να περιορίσετε το μέγιστο μήκος της συμβολοσειράς δεδομένων που καταγράφεται. Για παράδειγμα, χρησιμοποιήστε τον ακόλουθο κώδικα για να περιορίσετε το μήκος μιας γραμμής στους 80 χαρακτήρες:

$string = fgets($file_handle, 81);

Σκεφτείτε το "\0", την ένδειξη τέλους γραμμής στο C και ορίστε το μήκος σε έναν χαρακτήρα μεγαλύτερο από αυτό που πραγματικά χρειάζεστε. Όπως μπορείτε να δείτε, το παραπάνω παράδειγμα χρησιμοποιεί 81, ενώ χρειάζεστε 80 χαρακτήρες. Κάντε συνήθεια να προσθέτετε έναν επιπλέον χαρακτήρα κάθε φορά που χρειάζεται να ορίσετε ένα όριο μήκους γραμμής για μια δεδομένη συνάρτηση.

λειτουργία fread

Η συνάρτηση fgets είναι μόνο μία από τις πολλές διαθέσιμες λειτουργίες για την ανάγνωση ενός αρχείου. Αυτή είναι μια από τις πιο συχνά χρησιμοποιούμενες λειτουργίες, καθώς η επεξεργασία ενός αρχείου γραμμή προς γραμμή στις περισσότερες περιπτώσεις έχει τη μεγαλύτερη λογική. Στην πραγματικότητα, πολλά άλλα χαρακτηριστικά προσφέρουν παρόμοιες δυνατότητες. Όπως και να έχει, η ανάλυση γραμμή προς γραμμή δεν είναι πάντα αυτό που χρειάζεστε.

Και εδώ έχουμε πρόσβαση στο fread. Η συνάρτηση fread έχει ελαφρώς διαφορετικό σκοπό από το fgets: προορίζεται για ανάγνωση από δυαδικά αρχεία (δηλαδή αρχεία που αρχικά δεν αποτελούνται από κείμενο αναγνώσιμο από τον άνθρωπο). Δεδομένου ότι η έννοια των "γραμμών" δεν είναι σχετική με τα δυαδικά αρχεία (οι λογικές δομές δεδομένων συνήθως δεν χωρίζονται σε γραμμές), πρέπει να καθορίσετε τον αριθμό των byte που θα διαβαστούν.

$fh = fopen("myfile", "rb"); $data = fread($file_handle, 4096);

Το παραπάνω παράδειγμα διαβάζει 4096 byte (4 KB) δεδομένων. Σημειώστε ότι, ανεξάρτητα από την τιμή που καθορίζετε, το fread θα διαβάσει το πολύ 8192 byte (8 KB).

Υποθέτοντας ότι το αρχείο δεν είναι μεγαλύτερο από 8 KB, το παρακάτω απόσπασμα προγράμματος θα πρέπει να διαβάσει ολόκληρο το αρχείο σε μία γραμμή.

$fh = fopen("myfile", "rb"); $data = fread($fh, μέγεθος αρχείου("myfile")); fclose($fh);

Εάν το μέγεθος του αρχείου είναι μεγαλύτερο, θα πρέπει να χρησιμοποιήσετε έναν βρόχο για να διαβάσετε το υπόλοιπο.

λειτουργία fscanf

Επιστρέφοντας στην επεξεργασία συμβολοσειρών, το fscanf είναι επίσης ο διάδοχος της παραδοσιακής λειτουργίας βιβλιοθήκης αρχείων C. Εάν δεν είστε εξοικειωμένοι με αυτήν, το fscanf διαβάζει πεδία δεδομένων σε μεταβλητές από ένα αρχείο.

λίστα ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");

Οι συμβολοσειρές μορφής που χρησιμοποιούνται σε αυτήν τη συνάρτηση περιγράφονται σε πολλές πηγές όπως το PHP.net, επομένως δεν θα επαναλάβω αυτές τις πληροφορίες εδώ. Αρκεί να πούμε ότι η μορφοποίηση συμβολοσειρών είναι πολύ ευέλικτη. Θα πρέπει επίσης να αναφερθεί ότι όλα τα πεδία τοποθετούνται στη μεταβλητή που επιστρέφει η συνάρτηση. (Στο C, αυτά θα περνούν ως ορίσματα.)

συνάρτηση fgetss

Η συνάρτηση fgetss είναι διαφορετική από τις παραδοσιακές λειτουργίες χειρισμού αρχείων και σας δίνει μια καλύτερη κατανόηση των δυνατοτήτων της PHP. Λειτουργεί όπως τα fgets, αλλά απορρίπτει τυχόν ετικέτες HTML ή PHP που εντοπίζει, αφήνοντας μόνο το γυμνό κείμενο. Ας πάρουμε το αρχείο HTML παρακάτω.

Λίστα 2. Παράδειγμα αρχείου HTML
Ο τίτλος μου

Αν καταλαβαίνετε τι σημαίνει το "Cause there ain't noone for to give you no pain" τότε ακούτε πάρα πολλά από το συγκρότημα America



Ας το περάσουμε από τη συνάρτηση fgetss.

Λίστα 3. Χρήση fgetss
$file_handle = fopen("myfile", "r"); ενώ (!feof($file_handle)) ( echo = fgetss($file_handle); ) fclose($file_handle);

Αυτό θα λάβετε ως έξοδο:

Ο τίτλος μου Αν καταλαβαίνεις τι σημαίνει το "Cause there ain't noone for to give you no pain", τότε ακούς πάρα πολλά από το συγκρότημα America

λειτουργία fpassthru

Ανεξάρτητα από το πώς διαβάζετε δεδομένα από ένα αρχείο, μπορείτε να εκτυπώσετε τα υπόλοιπα δεδομένα χρησιμοποιώντας το τυπικό κανάλι εξόδου χρησιμοποιώντας τη συνάρτηση fpassthru.

fpassthru($fh);

Αυτή η συνάρτηση εκτυπώνει τα δεδομένα, ώστε να μην χρειάζεται να τα τοποθετήσετε σε μια μεταβλητή.

Μη γραμμική επεξεργασία αρχείων: κίνηση μέσα σε ένα αρχείο

Φυσικά, οι λειτουργίες που περιγράφονται παραπάνω σας επιτρέπουν μόνο να διαβάζετε από ένα αρχείο διαδοχικά. Τα πιο σύνθετα αρχεία ενδέχεται να απαιτούν μετακίνηση σε διαφορετικά μέρη του αρχείου στην αρχή ή στο τέλος του αρχείου. Για να το κάνετε αυτό χρειάζεστε τη συνάρτηση fseek.

fseek($fh, 0);

Το παραπάνω παράδειγμα πηγαίνει πίσω στην αρχή του αρχείου. Εάν δεν θέλετε να μετακινηθείτε στην αρχή του αρχείου - ας πούμε, ένα kilobyte είναι αρκετό - απλά γράψτε:

fseek($fh, 1024);

Από την PHP V4.0, πολλές άλλες επιλογές είναι επίσης διαθέσιμες. Για παράδειγμα, εάν πρέπει να προχωρήσετε 100 byte από την τρέχουσα θέση σας, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα:

fseek($fh, 100, SEEK_CUR);

Ομοίως, η μετακίνηση 100 byte προς τα πίσω γίνεται με:

fseek($fh, -100, SEEK_CUR);

Εάν θέλετε να επιστρέψετε στη θέση των 100 byte πριν από το τέλος του αρχείου, χρησιμοποιήστε το SEEK_END.

fseek($fh, -100, SEEK_END);

Μόλις φτάσετε στη νέα θέση, μπορείτε να χρησιμοποιήσετε fgets, fscanf ή άλλη συνάρτηση για να διαβάσετε τα δεδομένα.

Σημείωση:δεν μπορείτε να χρησιμοποιήσετε το fseek σε περιγραφείς αρχείων που αναφέρονται σε μια διεύθυνση URL.

Καταγράψτε ένα ολόκληρο αρχείο

Τώρα προχωράμε για να δούμε μερικές από τις μοναδικές δυνατότητες επεξεργασίας αρχείων της PHP: επεξεργασία μεγάλων μπλοκ δεδομένων σε μία ή δύο γραμμές. Για παράδειγμα, πώς μπορείτε να πάρετε ένα αρχείο και να εμφανίσετε ολόκληρο το περιεχόμενό του στην ιστοσελίδα σας; Λοιπόν, έχετε δει ένα παράδειγμα χρήσης βρόχου με fgets. Πώς όμως μπορείτε να το κάνετε πιο εύκολο; Η διαδικασία είναι σχεδόν γελοία εύκολη χρησιμοποιώντας το fgetcontents, το οποίο βάζει ολόκληρο το αρχείο σε μια γραμμή.

$my_file = file_get_contents ("myfilename"); echo $my_file;

Αν και αυτή δεν είναι η καλύτερη επιλογή, μπορείτε να γράψετε αυτήν την εντολή ακόμη πιο σύντομη:

echo file_get_contents("myfilename");

Αυτό το άρθρο εστιάζει κυρίως στην επεξεργασία τοπικών αρχείων, ωστόσο, αξίζει να σημειωθεί ότι μπορείτε επίσης να καταγράψετε, να εμφανίσετε και να αναλύσετε άλλες ιστοσελίδες χρησιμοποιώντας τις λειτουργίες που περιγράφονται.

echo file_get_contents("http://127.0.0.1/");

Αυτή η εντολή είναι στην πραγματικότητα η ίδια με:

$fh = fopen("http://127.0.0.1/", "r"); fpassthru($fh);

Μπορεί να κοιτάτε αυτά τα παραδείγματα και να σκέφτεστε, "Είναι πολλή δουλειά." Οι προγραμματιστές της PHP συμφωνούν μαζί σας. Έτσι, μπορείτε να συντομεύσετε την παραπάνω εντολή σε:

readfile("http://127.0.0.1/");

Η συνάρτηση readfile εξάγει ολόκληρο το περιεχόμενο ενός αρχείου ή ιστοσελίδας στην προεπιλεγμένη προσωρινή μνήμη εξόδου. Από προεπιλογή, αυτή η εντολή εμφανίζει ένα μήνυμα σφάλματος όταν αποτυγχάνει. Για να αποφύγετε αυτήν τη συμπεριφορά (αν το θέλετε), δοκιμάστε την εντολή:

@readfile("http://127.0.0.1/");

Φυσικά, εάν χρειάζεται να επεξεργαστείτε τα περιεχόμενα των αρχείων, τότε η μοναδική γραμμή που επιστρέφεται από το file_get_contents είναι πιθανώς υπερβολική. Ίσως θελήσετε πρώτα να το χωρίσετε σε μέρη χρησιμοποιώντας τη συνάρτηση split().

$array = split("\n", file_get_contents("myfile"));

Γιατί όμως χρειάζεσαι όλη αυτή την πολυπλοκότητα αν υπάρχει μια απόλυτα κατάλληλη λειτουργία που θα σου κάνει τη δουλειά; Η συνάρτηση PHP file() ολοκληρώνει αυτήν την εργασία σε ένα βήμα: επιστρέφει έναν πίνακα συμβολοσειρών του οποίου τα στοιχεία είναι οι γραμμές του αρχείου.

$array = file("myfile");

Πρέπει να σημειωθεί ότι υπάρχει μια μικρή διαφορά μεταξύ των δύο παραπάνω παραδειγμάτων. Η εντολή split αφαιρεί τις νέες γραμμές, ενώ η εντολή αρχείου τερματίζει τις γραμμές του πίνακα με νέες γραμμές (όπως και το fgets).

Οι δυνατότητες της PHP, ωστόσο, υπερβαίνουν κατά πολύ αυτές που περιγράφονται παραπάνω. Μπορείτε να αναλύσετε ολόκληρα αρχεία .ini σε στυλ PHP με μία μόνο εντολή parse_ini_file. Η εντολή parse_ini_file ισχύει για αρχεία παρόμοια με αυτά που εμφανίζονται στην Λίστα 4.

Λίστα 4. Παράδειγμα αρχείου .ini
; Όνομα σχολίου = αναζήτηση "King Arthur" = Να αναζητήσετε το αγαπημένο χρώμα του ιερού δισκοπότηρου = Μπλε Samuel Clemens = Mark Twain Caryn Johnson = Whoopi Goldberg

Οι ακόλουθες εντολές αντιπροσωπεύουν ένα αρχείο ως πίνακα και στη συνέχεια εκτυπώνουν τον πίνακα:

$file_array = parse_ini_file("holy_grail.ini"); print_r $file_array;

Το αποτέλεσμα θα είναι η ακόλουθη έξοδος:

Λίστα 5. Έξοδος
Σειρά ( => Βασιλιάς Αρθούρος => Να αναζητήσετε το Άγιο Δισκοπότηρο => Μπλε => Μαρκ Τουέιν => Γούπι Γκόλντμπεργκ)

Φυσικά, μπορεί να παρατηρήσετε ότι αυτή η εντολή έχει συγχωνεύσει τις ενότητες. Αυτή είναι η προεπιλεγμένη ενέργεια, αλλά μπορείτε εύκολα να την προσαρμόσετε χρησιμοποιώντας το δεύτερο όρισμα του parse_ini_file: process_sections, το οποίο είναι μια μεταβλητή Boolean. Ορίστε το process_sections σε True.

$file_array = parse_ini_file("holy_grail.ini", true); print_r $file_array;

Και η έξοδος σας θα μοιάζει με αυτό:

Λίστα 6. Έξοδος
Πίνακας ( => Πίνακας ( => Βασιλιάς Αρθούρος => Να αναζητήσετε το Άγιο Δισκοπότηρο => Μπλε) => Σειρά ( => Μαρκ Τουέιν => Γούπι Γκόλντμπεργκ))

Η PHP τοποθετεί τα δεδομένα σε έναν εύκολα αναλύσιμο πολυδιάστατο πίνακα.

Αλλά αυτή είναι μόνο η κορυφή του παγόβουνου όταν πρόκειται για την επεξεργασία αρχείων σε PHP. Πιο πολύπλοκες λειτουργίες όπως το tidy_parse_file και το xml_parse μπορούν να σας βοηθήσουν να αναλύσετε έγγραφα HTML και XML, αντίστοιχα. Ανατρέξτε στην ενότητα για πιο λεπτομερείς πληροφορίες σχετικά με τον τρόπο λειτουργίας αυτών των λειτουργιών. Αξίζει να εξετάσετε και τα δύο εάν θα εργάζεστε με αυτούς τους τύπους αρχείων, αλλά αντί να εξετάσετε όλους τους πιθανούς τύπους αρχείων, ίσως θελήσετε να ρίξετε μια πιο προσεκτική ματιά στα περιεχόμενα αυτού του άρθρου, το οποίο έχει μερικούς καλούς γενικούς κανόνες για δουλεύοντας με τις λειτουργίες που έχω περιγράψει μέχρι τώρα.

Καλό στυλ προγραμματισμού

Ποτέ μην υποθέτετε ότι όλα στο πρόγραμμά σας θα λειτουργούν όπως πρέπει. Για παράδειγμα: τι γίνεται αν το αρχείο που αναζητάτε έχει μετακινηθεί; Τι γίνεται αν μια αλλαγή άδειας σας κάνει να μην μπορείτε να διαβάσετε τα περιεχόμενα ενός αρχείου; Μπορείτε να ελέγξετε την ύπαρξη ενός αρχείου και τα δικαιώματα ανάγνωσης του εκ των προτέρων χρησιμοποιώντας τις μεθόδους file_exists και is_readable.

Λίστα 7. Χρήση αρχείου_υπάρχει και είναι_αναγνώσιμο
$filename = "myfile"; if (file_exists($filename) && is_readable ($filename)) ( $fh = fopen($filename, "r"); # Επεξεργασία fclose($fh); )

Ωστόσο, στην πράξη αυτό το κομμάτι του προγράμματος θα είναι πιθανότατα υπερβολικό για την εργασία σας. Ο χειρισμός των τιμών που επιστρέφονται από το fopen είναι απλούστερος και ακριβέστερος.

if ($fh = fopen($filename, "r")) ( # Επεξεργασία fclose($fh); )

Εφόσον το fopen επιστρέφει False εάν αποτύχει, αυτό θα διασφαλίσει ότι το αρχείο θα υποβληθεί σε επεξεργασία μόνο εάν μπορεί να ανοίξει το αρχείο. Φυσικά, εάν το αρχείο δεν υπάρχει ή δεν είναι αναγνώσιμο, θα περιμένατε ότι η τιμή επιστροφής θα είναι αρνητική. Επομένως, ένας τέτοιος έλεγχος είναι μια παγίδα στην οποία πέφτουν όλα τα πιθανά προβλήματα. Εναλλακτικά, μπορείτε να βγείτε από το πρόγραμμα ή να εμφανίσετε ένα μήνυμα σφάλματος εάν το αρχείο δεν μπορεί να ανοίξει.

Όπως το fopen, οι συναρτήσεις file_get_contents, file και readfile επιστρέφουν False εάν το αρχείο δεν μπορεί να ανοίξει ή να υποβληθεί σε επεξεργασία. Οι συναρτήσεις fgets, fgetss, fread, fscanf και fclose επιστρέφουν επίσης False εάν παρουσιαστεί σφάλμα. Φυσικά, με εξαίρεση το fclose , πιθανότατα έχετε ήδη επεξεργαστεί τα αποτελέσματα που επιστρέφουν. Όσον αφορά το fclose, δεν υπάρχουν πολλά που μπορούν να γίνουν εάν η λαβή του αρχείου δεν κλείνει σωστά, επομένως ο έλεγχος της τιμής επιστροφής του fclose είναι γενικά υπερβολικός.

Η επιλογή είναι δική σου

Η PHP δεν έχει έλλειψη αποτελεσματικών τρόπων ανάγνωσης και ανάλυσης αρχείων. Κλασικές λειτουργίες όπως το fread μπορεί να σας εξυπηρετούν αξιόπιστα τις περισσότερες φορές ή μπορεί να σας ελκύει περισσότερο η απλότητα του readfile, αν αυτό είναι που χρειάζεστε για να ολοκληρώσετε τη δουλειά. Η επιλογή εξαρτάται πραγματικά από το τι προσπαθείτε να επιτύχετε.

Εάν επεξεργάζεστε μεγάλους όγκους δεδομένων, πιθανότατα θα βρείτε το fscanf πιο χρήσιμο και αποτελεσματικό από ό,τι, για παράδειγμα, η χρήση αρχείου σε συνδυασμό με τις επόμενες εντολές split και sprintf. Ωστόσο, εάν απλώς εμφανίζετε μεγάλο όγκο κειμένου με μικρές αλλαγές, η χρήση του αρχείου , των συναρτήσεων file_get_contents ή readfile μπορεί να έχει πιο νόημα. Αυτή η λύση θα είναι πιθανώς σωστή όταν χρησιμοποιείτε την PHP για προσωρινή αποθήκευση ή ακόμα και τη δημιουργία ενός προσωρινού διακομιστή μεσολάβησης.

Η PHP παρέχει πολλά εργαλεία για εργασία με αρχεία. Γνωρίστε το καθένα καλύτερα και μάθετε ποια εργαλεία είναι καλύτερα για το έργο στο οποίο εργάζεστε. Σας προσφέρεται μια μεγάλη ποικιλία εργαλείων λογισμικού, χρησιμοποιήστε τα πιο αποτελεσματικά και διασκεδάστε με την επεξεργασία των αρχείων σας χρησιμοποιώντας PHP.

Η PHP εμφανίστηκε πολύ αργότερα από ό,τι οι γλώσσες προγραμματισμού ενίσχυσαν τις θέσεις τους και διατύπωσαν γενικές ιδέες σχετικά με τη σύνταξη, τη λογική, τις μεταβλητές και άλλα αντικείμενα προγράμματος. Τα αρχεία και οι λειτουργίες για την εργασία μαζί τους δεν σημείωσαν πρόοδο και ακόμη και το πρόβλημα της κωδικοποίησης αρχείων, που προέκυψε για φυσικούς λόγους, δεν οδήγησε σε ριζικά νέες λύσεις.

Γενικές παρατηρήσεις

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

Ένα σημαντικό σημείο στην PHP είναι η αφθονία των λειτουργιών για την εργασία με αρχεία και οι επιλογές για τη χρήση τους. Στην πράξη, αρκεί να χρησιμοποιήσετε απλές αλλά λειτουργικές επιλογές. Ένα αρχείο είναι, πρώτα απ 'όλα, μνήμη προγράμματος. Μπορείτε να αποθηκεύσετε πληροφορίες σε αυτό. Σκοπός οποιουδήποτε προγράμματος, σκοπός κάθε ιστοσελίδας είναι η παρουσίαση, η επεξεργασία και η διασφάλιση της ασφάλειας των πληροφοριών.

Ουσιαστική περίσταση

Παλαιότερα, η απαίτηση για συμβατότητα, τουλάχιστον από κάτω προς τα πάνω, ήταν ακλόνητη. Δηλαδή, ένα πρόγραμμα που έχει γραφτεί σε μια έκδοση μιας γλώσσας προγραμματισμού ιδανικά μεταγλωττίζεται/ερμηνεύεται στην επόμενη έκδοση. Στον σύγχρονο προγραμματισμό αυτό δεν συμβαίνει. Η απαίτηση για συμβατότητα των συντακτικών δομών μιας γλώσσας έχει γίνει ιστορία και ο αγώνας μεταξύ στυλ και εργαλείων προγραμματισμού και εκδόσεων ορισμένων εργαλείων έχει γίνει ο κανόνας της ζωής τους.

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

Διαβάστε και αλλάξτε τον εαυτό σας

Μπορεί ένα πρόγραμμα να αλλάξει μόνο του, δηλαδή να βελτιωθεί ένα σενάριο; Μέχρι σήμερα, αυτή η ερώτηση ενδιαφέρει πολλούς. Αλλά η εργασία ακούγεται πολύ πιο πρακτική: η PHP διαβάζει ένα αρχείο PHP. Ένας προγραμματιστής δεν μπορεί πάντα να λύσει ένα συγκεκριμένο πρόβλημα γράφοντας συγκεκριμένο κώδικα. Μερικές φορές είναι απαραίτητο να το αλλάξετε όταν ένας επισκέπτης έρχεται στον ιστότοπο και διατυπώνει μια ερώτηση που δεν είχε προβλεφθεί στο στάδιο ανάπτυξης.

Όπως σε όλες τις άλλες περιπτώσεις, πρώτα απ 'όλα πρέπει να ανοίξετε το αρχείο. Δεν έχει σημασία αν αυτό το αρχείο υπάρχει ή όχι. Εάν είναι γνωστό ότι το αρχείο υπάρχει (η συνάρτηση file_exists() δίνει θετική απάντηση), η συνάρτηση fopen() χρησιμοποιείται με πρόσβαση 'r', 'r+', 'a', 'a+'. Εάν το αρχείο δεν υπάρχει ακόμα, τότε με πρόσβαση «a», «a+», «w», «w+». Το αποτέλεσμα ανοίγματος ενός αρχείου θα είναι ο περιγραφέας του. Το αρχείο κλείνει με τη συνάρτηση fclose().

Είναι βολικό να χρησιμοποιείτε την PHP για να διαβάσετε ένα αρχείο σε έναν πίνακα όταν δεν χρειάζεται να το επεξεργαστείτε τη στιγμή της ανάγνωσης.

if (file_exists($fName)) (

$aLines = αρχείο ($fName)

Σε αυτήν την επιλογή, κάθε γραμμή του αρχείου πηγαίνει στο στοιχείο του πίνακα διαδοχικά. Θα πρέπει να σημειωθεί ότι οι συναρτήσεις file() ή file_get_contents() δεν χρειάζεται να ανοίξουν το αρχείο και να το κλείσουν.

Όταν το αρχείο εισόδου είναι πολύ μεγάλο και χρειάζεται να βρείτε μόνο λίγες πληροφορίες ή για άλλους λόγους, μπορείτε να χρησιμοποιήσετε την PHP για να διαβάσετε το αρχείο γραμμή προς γραμμή. Η PHP παρέχει τη δυνατότητα να γίνει αυτό με τις συναρτήσεις fgets() και fgetc().

$fvs = fopen($fName, "r")

ενώ ((λάθος !== ($cLine = fgets($fvs, 2000)))) (

$cLines .= "
" . $i . "). $cLine

Και οι δύο επιλογές λειτουργούν άψογα. Ωστόσο, κατά την εκτέλεση ανάγνωσης PHP ενός αρχείου PHP για μεταγενέστερη τροποποίηση, θα πρέπει να λαμβάνονται προφυλάξεις. Δεν είναι πάντα δυνατό να προβλεφθεί πώς θα το χρησιμοποιήσει ένας επισκέπτης στο στάδιο ανάπτυξης του ιστότοπου. Είναι καλύτερα να αλλάξουν τα σενάρια εντός των λειτουργιών του ιστότοπου και ο έλεγχος αυτής της αλλαγής δεν είναι διαθέσιμος στον επισκέπτη, συμπεριλαμβανομένου του διαχειριστή των πόρων.

Αποθήκευση αποτελεσμάτων

Οι πληροφορίες που λαμβάνονται και ενημερώνονται εγγράφονται στο αρχείο από τη συνάρτηση fputs() γραμμή προς γραμμή ή από τη συνάρτηση file_put_contents() ως σύνολο.

$fName = $_SERVER["DOCUMENT_ROOT"] . "/tmp/scData.php"

$fvs = fopen($fName, "a")

flock ($fvs, LOCK_EX)

$cLine = "1 γραμμή". chr(10)

fputs ($fvs, $cLine)

$cLine = "2 γραμμή" . chr(10)

fputs ($fvs, $cLine)

flock ($fvs, LOCK_UN)

Στην επιλογή εγγραφής γραμμή προς γραμμή, μπορείτε να χειριστείτε δεδομένα κατά τη διαδικασία εγγραφής· στη δεύτερη περίπτωση, η γραπτή συμβολοσειρά ή ο πίνακας τοποθετείται σε ολόκληρο το αρχείο.

$file = " scData.php "

$cContents = file_get_contents($file)

// προσθήκη μιας καταχώρησης

$cContents .= "νέα καταχώρηση\n"

// γράψτε το αρχείο πίσω

file_put_contents ($file, $cContents)

Η ανάγνωση και η εγγραφή αρχείων PHP είναι εύκολη και φυσική. Ωστόσο, είναι σημαντικό να έχετε κατά νου: κάθε αρχείο έχει όνομα, επέκταση και διαδρομή (φάκελο). Για να μπορεί ένα σενάριο PHP να διαβάζει και να γράφει αρχεία, αυτό το σενάριο πρέπει να έχει τα κατάλληλα δικαιώματα. Εκτίθενται αυτόματα στη φιλοξενία, αλλά σε ορισμένες περιπτώσεις πρέπει να επεκταθούν.

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

Χαρακτηριστικό χαρακτηριστικό της PHP, της MySQl, της JavaScript και ειδικά των προγραμμάτων περιήγησης: αθόρυβη δυνατότητα εμφάνισης ορισμένων σφαλμάτων. Το "Δεν αναγνωρίζεται, δεν γίνεται..." δεν είναι μια πολύ καλή πρακτική στην αιχμή της τεχνολογίας πληροφοριών, αλλά διδάσκει στους προγραμματιστές να μην κάνουν λάθη και να γράφουν καθαρό κώδικα υψηλής ποιότητας, κάτι που επίσης δεν είναι κακό.

PHP και εργασία με πραγματικά έγγραφα

Η ανάγνωση ενός αρχείου PHP έχει σίγουρα πρακτικό ενδιαφέρον, αλλά αυτό είναι το βασίλειο του προγραμματισμού. Ο χρήστης και ο επισκέπτης του ιστότοπου ενδιαφέρονται για πληροφορίες εφαρμοσμένου χαρακτήρα, τις οποίες έχει συνηθίσει να βλέπει με τη μορφή πινάκων και εγγράφων, ιδίως σε μορφές αρχείων *.xlsx και *.docx. Πρόκειται για αρχεία σε μορφή MS Excel και MS Word.

Οι λίστες αγαθών, τιμών, χαρακτηριστικών συνήθως σχηματίζονται με τη μορφή πινάκων, επομένως η ανάγνωση του αρχείου Excel από την PHP είναι απαραίτητη.

Οι βιβλιοθήκες PHPExcel και PHPWord έχουν αναπτυχθεί για να λειτουργούν με τέτοια αρχεία. Ωστόσο, τα περιεχόμενα των αρχείων *.xlsx και *.docx παρουσιάζονται στο πρότυπο OOXML, δηλαδή το πραγματικό, κατανοητό έγγραφο παρουσιάζεται σε ένα αρχείο zip. Το αρχείο Zip είναι ένα σύνολο αρχείων, συμπεριλαμβανομένων εικόνων, αντικειμένων, τύπων και ένθετων από άλλα προγράμματα. Τα αρχεία κειμένου εδώ αντιπροσωπεύονται από περιγραφές με τη μορφή ετικετών. Η ανάγνωση ενός τέτοιου αρχείου δεν αρκεί· πρέπει να το αναλύσετε για να λάβετε τα περιεχόμενα και τη δομή για χρήση και τροποποίηση.

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

πίνακες Excel

include_once 'PhpOffice/PhpExcel/IOFactory.php'

συνάρτηση scGetExcelFile($xls)(

$objPHPExcel = PHPExcel_IOFactory::load($xls)

$objPHPExcel->setActiveSheetIndex(0)

//αυτός ο πίνακας περιέχει πίνακες συμβολοσειρών

$aSheet = $objPHPExcel->getActiveSheet()

$array = array()

//θεραπεία

foreach($aSheet->getRowIterator() ως $row)(

$cellIterator = $row->getCellIterator()

foreach($cellIterator ως $cell)(

array_push($item, iconv("utf-8", "cp1251", $cell->getCalculatedValue()))

array_push($array, $item)

Η ανάγνωση και η επεξεργασία αρχείων Excel είναι πολύ πιο δύσκολη από την επεξεργασία εγγράφων του Word. Η καλύτερη επιλογή, εάν χρειάζεται να υλοποιήσετε ένα σοβαρό έργο για την ανάγνωση και την επεξεργασία εφαρμοζόμενων πληροφοριών, είναι πρώτα να κυριαρχήσετε στη βιβλιοθήκη PHPWord. Αυτό θα σας δώσει καλή εμπειρία και γρήγορη κατανόηση των ιδιαιτεροτήτων του ζητήματος.

Έγγραφα Word

Μόνο δύο γραμμές:

$oWord = νέο \PhpOffice\PhpWord\PhpWord()

$oDocx = $this->oWord->loadTemplate($cFileName)

Το έγγραφο $cFileName είναι πλέον διαθέσιμο για επεξεργασία. Στη συνέχεια, ανοίγει το αρχείο, επιλέγεται και αναλύεται το περιεχόμενό του, το οποίο μπορεί να εμφανιστεί στον ιστότοπο, να αλλάξει και να αναγραφεί.

$zipClass = νέο ZipArchive()

$zipClass->open($this->tempFileName)

// διαβάστε ολόκληρο το περιεχόμενο του εγγράφου

για ($i=0; $i<$zipClass->numFiles; $i++) (

$cNameIn = $zipClass->getNameIndex($i)

$cNameInExt = substr($cNameIn, -4)

if (($cNameInExt == ".xml") || ($cNameInExt == "rels")) (

// αρχεία με επεκτάσεις ".xml" και ".xml.rels" αποθηκεύονται στον πίνακα εγγράφων

// Κάθε γραμμή xml γράφεται με έναν μοναδικό αριθμό με τη σειρά

$cBodyIn = $zipClass->getFromName($cNameIn)

$cBodyInLen = strlen($cBodyIn)

// Όλα τα άλλα αρχεία εγγράφονται στο φάκελο εγγράφων ως έχουν

$cNameOnly = substr($cNameIn, strrpos($cNameIn, "/") + 1)

$zipClass->getFromName($cNameIn, $cWorkPath); // περιεχόμενο ως αρχείο

Οι ευκαιρίες που προσφέρονται από το PHP Excel και το PHP Word σάς επιτρέπουν να χειρίζεστε πραγματικά έγγραφα και να κάνετε το περιεχόμενό τους σχετικό ανά πάσα στιγμή. Στον σημερινό δυναμικό κόσμο, αυτό γίνεται πολύ σημαντικό. Το κέντρο βάρους έχει μετακινηθεί εδώ και καιρό από την τοπική χρήση της τεχνολογίας των υπολογιστών στον εικονικό χώρο του Διαδικτύου. Επομένως, η δημιουργία πινάκων και εγγράφων σε τοπικά προϊόντα της Microsoft είναι λιγότερο αποτελεσματική από την εργασία με τέτοια έγγραφα σε αυτόματη και ημιαυτόματη λειτουργία σε έναν ιστότοπο, στον οποίο έχουν πρόσβαση όχι μόνο ο δημιουργός του πίνακα ή του εγγράφου, αλλά και οι καταναλωτές του.

Αρχεία κειμένου, μια άλλη ζωή

Σε μια πρώτη προσέγγιση, τα αρχεία κειμένου είναι απλούστερα από τα αρχεία PHP ή τα έγγραφα εφαρμογής. Ωστόσο, υπάρχει κάτι να σκεφτούμε εδώ. Οι λειτουργίες ανάγνωσης/εγγραφής τέτοιων αρχείων αναφέρονται ήδη παραπάνω, αλλά η σημασία τέτοιων αρχείων είναι πολύ πιο σημαντική.

Εφόσον υπάρχει ένα δεδομένο ως πελάτης και διακομιστής (το πρώτο κυριαρχείται από JavaScript, το δεύτερο από την PHP), τότε ακόμη και οι μηχανισμοί cookie και συνεδριών δεν μπορούν να αντιμετωπίσουν την ανάγκη μεταφοράς πληροφοριών μεταξύ σεναρίων, σελίδων ή ορισμένων διεργασιών.

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

Η ανάγνωση ενός αρχείου κειμένου από την PHP είναι γρήγορη, μπορεί να αναλυθεί αμέσως σε δομή, πίνακα ή αντικείμενο. Το τελευταίο είναι πολύ σημαντικό, καθώς σας επιτρέπει να δημιουργήσετε αντικείμενα που ζουν εκτός του χρόνου που έχει δοθεί σε ένα σενάριο PHP, το οποίο, όπως γνωρίζετε, μπορεί να υπάρχει μόνο στον διακομιστή και μόνο τη στιγμή που φορτώνεται η σελίδα, μια απάντηση AJAX που δημιουργείται ή για άλλο λόγο που προκαλεί την εκκίνηση του διερμηνέα PHP.

Εάν σκεφτείτε το γεγονός ότι ένα αρχείο κειμένου είναι το περιεχόμενο και η δομή από τον προγραμματιστή, ένα αρχείο PHP είναι η σύνταξη του διερμηνέα συν τη λογική του προγραμματιστή και οι περιγραφές με "ετικέτες" html, css, xml είναι πιο σημασιολογικά στοιχεία, αλλά ρυθμίζονται με στατικά πρότυπα. Κάποιος μπορεί να καταλήξει στο συμπέρασμα ότι μάλλον είναι καιρός τα αρχεία να αποκτήσουν νέο περιεχόμενο και αυτό από μόνο του θα πρέπει να καθορίσει την ποιότητα και τη λογική χρήσης τους. Ακριβώς επειδή ο προγραμματισμός δεν είναι ακόμη έτοιμος για το επόμενο στάδιο της ανάπτυξής του, τα αρχεία σήμερα παραμένουν απλά αρχεία που δημιουργεί ο προγραμματιστής και καθορίζει τη χρήση τους.

Το πιο ενδιαφέρον και πολλά υποσχόμενο είναι όταν η PHP διαβάζει ένα αρχείο PHP ανεξάρτητα όταν παραστεί ανάγκη. Και μια απλή PHP που διαβάζει μια γραμμή από ένα αρχείο έχει ως αποτέλεσμα τη δημιουργία ενός αντικειμένου, τουλάχιστον στην κατάσταση στην οποία αποθηκεύτηκε. Αυτές δεν είναι εντελώς γνωστές ιδέες, αλλά στον σύγχρονο κόσμο όλα αλλάζουν τόσο γρήγορα.

16,5 χιλ

Στην πραγματικότητα, το πώς να ανοίξετε ένα αρχείο php δεν είναι μεγάλο πρόβλημα. Μπορεί να είναι πιο δύσκολο να ανοίξετε ένα μπουκάλι μπύρα όταν βρίσκεστε στη μέση ενός δάσους. Αλλά μόνο οι μανιώδεις προγραμματιστές σκέφτονται έτσι. Και για αρχάριους, θα σας πούμε για όλες τις δυνατότητες της PHP για εργασία με αρχεία:

php αρχεία

Τα αρχεία με την επέκταση php περιέχουν κώδικα γραμμένο στην ομώνυμη γλώσσα προγραμματισμού. Σε αντίθεση με άλλες γλώσσες, η php είναι μια γλώσσα προγραμματισμού από την πλευρά του διακομιστή. Δηλαδή, τρέχει από την πλευρά του διακομιστή. Επομένως, για τον εντοπισμό σφαλμάτων του κώδικά του, πρέπει να εγκατασταθεί ένας τοπικός διακομιστής στον υπολογιστή-πελάτη.

Για εργασία με αρχεία php, χρησιμοποιούνται ειδικές εφαρμογές - επεξεργαστές λογισμικού. Τα πιο συνηθισμένα είναι:

  • Dreamweaver.
  • PHPEdit.
  • Ανάπτυξη PHP Eclipse.
Όταν δημιουργείτε ιστότοπους που βασίζονται σε PHP, ίσως χρειαστεί να επαναχρησιμοποιήσετε τον κώδικα προγράμματος. Σε τέτοιες περιπτώσεις, είναι βολικό να συνδέσετε έτοιμες λύσεις που βρίσκονται σε άλλο αρχείο. Η κατασκευή περιλαμβάνει για αυτό. Η σύνταξή του είναι:

συμπεριλάβετε το όνομα αρχείου

Παράδειγμα σύνδεσης:

Περιλαμβανόμενο αρχείο:


Η συμπερίληψη ενός αρχείου είναι επίσης δυνατή χρησιμοποιώντας την κατασκευή απαιτήσεων. Σε αντίθεση με τη συμπερίληψη, περιλαμβάνει το αρχείο πριν από την εκτέλεση του κώδικα του προγράμματος. Χρησιμοποιώντας την απαίτηση στον κώδικα, είναι δυνατή μόνο μία κλήση σε αυτό το αρχείο. Όταν γίνει ξανά πρόσβαση, το σύστημα θα εμφανίσει ένα γενικό μήνυμα σφάλματος και θα σταματήσει την εκτέλεση του προγράμματος.

Η κατασκευή περιλαμβάνει μόνο την πηγή κατά την εκτέλεση του προγράμματος. Υποστηρίζει πολλαπλή ανάγνωση αρχείου php. Εάν παρουσιαστεί σφάλμα, θα εμφανιστεί μόνο ένα προειδοποιητικό μήνυμα και η εκτέλεση του κώδικα θα συνεχιστεί από την επόμενη γραμμή.

Άνοιγμα και κλείσιμο αρχείων

Στην php, όλες οι λειτουργίες με αρχεία εκτελούνται σε διάφορα στάδια:

  • Άνοιγμα αρχείου.
  • Επεξεργασία περιεχομένου.
  • Κλείσιμο του αρχείου.

Η συνάρτηση fopen() χρησιμοποιείται για το άνοιγμα ενός αρχείου. Η σύνταξή του είναι:

int fopen (όνομα αρχείου συμβολοσειράς, λειτουργία συμβολοσειράς [, int use_include_path])

Αποδεκτά επιχειρήματα:

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

  • λειτουργία συμβολοσειράς – υποδεικνύει τη λειτουργία ανοίγματος του αρχείου. Τιμές που γίνονται δεκτές από το επιχείρημα:
  • r – το αρχείο ανοίγει μόνο για ανάγνωση, ο δείκτης αρχείου ορίζεται στην αρχή.
  • r+ – το αρχείο είναι ανοιχτό για ανάγνωση και γραφή.
  • w – δημιουργεί ένα νέο αρχείο μόνο για εγγραφή. Εάν υπάρχει ήδη ένα αρχείο με το ίδιο όνομα, όλα τα δεδομένα σε αυτό διαγράφονται αυτόματα.
  • w+ - δημιουργεί ένα νέο αρχείο για γραφή και ανάγνωση. Όταν υπάρχει ένα τέτοιο αρχείο, τα δεδομένα του αντικαθίστανται πλήρως με νέα.
  • α – το αρχείο είναι ανοιχτό για εγγραφή. Ο δείκτης ορίζεται στο τέλος. Δηλαδή, η εγγραφή στο αρχείο php θα ξεκινήσει όχι από την αρχή, αλλά από το τέλος.
  • a+ – άνοιγμα αρχείου σε λειτουργία ανάγνωσης-εγγραφής. Η ηχογράφηση θα ξεκινήσει από το τέλος.
  • β – τρόπος εργασίας με αρχείο που περιέχει δυαδικά δεδομένα (στο δυαδικό σύστημα αριθμών). Αυτή η λειτουργία είναι διαθέσιμη μόνο στο λειτουργικό σύστημα Windows.

Για να κλείσετε την πρόσβαση σε ένα αρχείο, χρησιμοποιήστε τη συνάρτηση fclose(). Σύνταξη:

int fclose (αρχείο int) , όπου το αρχείο int είναι μια λαβή στην τοποθεσία για κλείσιμο.

Μετά από κάθε ανάγνωση ή εγγραφή, το αρχείο πρέπει να κλείνει με αυτήν τη λειτουργία. Διαφορετικά, η ροή που δημιουργήθηκε για το αρχείο παραμένει ανοιχτή. Και αυτό οδηγεί σε περιττή κατανάλωση της χωρητικότητας του διακομιστή.

Παράδειγμα:

Ανάγνωση και εγγραφή αρχείων

Για να εμφανίσετε απλά ολόκληρο το περιεχόμενο ενός αρχείου, η συνάρτηση readfile() είναι ιδανική. Η σύνταξή του είναι:

readfile (όνομα αρχείου συμβολοσειράς) , όπου το όνομα αρχείου συμβολοσειράς είναι το όνομα αρχείου συμβολοσειράς (όχι λαβή).


Το ίδιο αρχείο μπορεί να διαβαστεί χρησιμοποιώντας τη συνάρτηση fpassthru(). Διαβάζει δεδομένα από τη θέση του τελικού δείκτη μέχρι το τέλος του αρχείου. Η σύνταξή του είναι:

int fpassthru (αρχείο int)

Η λειτουργία απαιτεί άνοιγμα και κλείσιμο αρχείου. Παράδειγμα:

Το αποτέλεσμα είναι παρόμοιο με το προηγούμενο.

Οι λειτουργίες για εργασία με αρχεία σε php σάς επιτρέπουν να διαβάζετε το περιεχόμενο γραμμή προς γραμμή και χαρακτήρα προς χαρακτήρα:

  • συμβολοσειρά fgets (αρχείο int, μήκος int)– η συνάρτηση διαβάζει μια συμβολοσειρά μήκους . Παράδειγμα:

  • fread συμβολοσειρών (αρχείο int, μήκος int)– η ενέργεια είναι ίδια με την προηγούμενη.

Για να γράψετε δεδομένα κειμένου σε ένα αρχείο, υπάρχουν δύο ίδιες λειτουργίες:

  • int fputs (αρχείο int, συμβολοσειρά [, μήκος int ])
  • int fwrite (αρχείο int, συμβολοσειρά [, μήκος int ])

Οι συναρτήσεις γράφουν σε ένα αρχείο int μια συμβολοσειρά με καθορισμένο μήκος int ( προαιρετικό όρισμα). Παράδειγμα:

Δημιουργία και διαγραφή αρχείων

Για να δημιουργήσετε ένα αρχείο php, μπορείτε να χρησιμοποιήσετε τη συνάρτηση fopen() σε λειτουργία πρόσβασης "w" ή "w+". Ή τη συνάρτηση touch(). Ορίζει τον χρόνο τροποποίησης του αρχείου. Εάν δεν υπάρχει στοιχείο με το αναζητούμενο όνομα, θα δημιουργηθεί. Η σύνταξή του.




Μπλουζα