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

Διαγραφή αρχείων με αποσύνδεση PHP

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

αποσύνδεση (όνομα αρχείου)

Αυτή η συνάρτηση είναι boolean και επομένως επιστρέφει TRUE σε επιτυχή διαγραφή του αρχείου και FALSE σε αποτυχία. Σκεφτείτε να χρησιμοποιήσετε αποσύνδεση ()Για παράδειγμα:

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

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

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

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

Αυτή η συμβουλή θα σας βοηθήσει να μάθετε πώς διαγραφή αρχείου σε phpχρησιμοποιώντας τη συνάρτηση αποσύνδεση.

Οδηγία βήμα προς βήμα:

Για να διαγράψετε ένα αρχείο στην PHP, μπορείτε να χρησιμοποιήσετε τη συνάρτηση αποσύνδεση. Χρησιμοποιώντας το παράδειγμα ενός απλού σεναρίου, ας αναλύσουμε το έργο αποσύνδεση:

  1. Δημιουργώ αρχείο κειμένουσε επεξεργαστής κειμένου(vi/vim, nano, gedit ή απλώς τυπικό Σημειωματάριο).
  2. Πληκτρολογήστε ή απλώς αντιγράψτε τον ακόλουθο κώδικα σε αυτόν:$file="example.log";
    unlink($file);
    ?>
  3. Αποθηκεύστε (για παράδειγμα κάτω από το όνομα testunlink.php) και τοποθετήστε το αρχείο δέσμης ενεργειών που δημιουργήθηκε στον δοκιμαστικό διακομιστή ιστού σας. Στον ίδιο κατάλογο, δημιουργήστε ένα αρχείο example.log με οποιοδήποτε περιεχόμενο. Αυτό πρόκειται να αφαιρέσουμε.
  4. Εκτελέστε το σενάριο καλώντας το στο πρόγραμμα περιήγησης και όταν κοιτάξετε ξανά στον κατάλογο, θα διαπιστώσετε ότι το αρχείο example.log δεν υπάρχει πλέον. αποσύνδεσηέκανε τη δουλειά του!

Πώς λειτουργούν όλα:

Η πρώτη γραμμή του κώδικα σεναρίου: ορίζουμε τον τύπο του σεναρίου μας.

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

Τρίτη γραμμή κώδικα: Διαγράψτε το αρχείο example.log περνώντας το ως όρισμα στη συνάρτηση αποσύνδεσης.

Τέταρτη γραμμή κώδικα σεναρίου: τέλος κώδικα php.

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

PHP unlink() συνάρτηση

Και θα ξεκινήσω με τη συνάρτηση unlink() php, η οποία αφαιρεί το αρχείο:

bool αποσύνδεση(σειρά$filename[, πόρος$context])

Εδώ το $filename είναι η διαδρομή προς το αρχείο και το $context (προαιρετικό) είναι μια περιγραφή των πλαισίων για εργασία με ροές (υποστηρίζεται σε PHP από την 5.0.0). Η συνάρτηση επιστρέφει TRUE με επιτυχία ή FALSE σε σφάλμα.

Ένα παράδειγμα χρήσης της συνάρτησης unlink() php:

$filename = "./path/to/file.txt";

Γιατί αυτή η συνάρτηση ονομάζεται unlink();

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

Είναι επίσης αξιοσημείωτο ότι στο Unix είναι δυνατό να συσχετιστούν πολλά τέτοια σημεία με τα ίδια δεδομένα. Τέτοια δεδομένα θα υπάρχουν εφόσον υπάρχει τουλάχιστον ένας σύνδεσμος προς αυτά. Αν όμως καταστραφούν όλοι οι σύνδεσμοι, τότε τα ίδια τα δεδομένα θα καταστραφούν. Έτσι, η συνάρτηση unlink() έχει σχεδιαστεί για να αφαιρεί συνδέσμους, και ήδη ως συνέπεια των δεδομένων του αρχείου.

Στα Windows, δεν υπάρχει τέτοιο πράγμα και η συνάρτηση unlink() διαγράφει το αρχείο. Επιπλέον, ορισμένες εκδόσεις της PHP για Windows δεν υποστηρίζουν καθόλου το unlink(). Σε αυτήν την περίπτωση, η εντολή del χρησιμοποιείται μέσω system() ή exec() , για παράδειγμα:

$filename = "/2014/04/file.txt";
if (isset($_ENV["WINDIR"])) (
@exec("del ". $filename);
if (file_exists($filename)) die("Σφάλμα Διαγραφή αρχείου.");
) αλλιώς εάν (!(@unlink($filename))) (
die ("Σφάλμα Διαγραφή αρχείου.");
}

Σε αυτήν την περίπτωση, η μεταβλητή περιβάλλοντος $_ENV["WINDIR"] μπορεί να χρησιμεύσει ως σημάδιχρησιμοποιώντας την πλατφόρμα των Windows και ο έλεγχος εάν το αρχείο έχει διαγραφεί γίνεται μέσω της συνάρτησης php file_exists() , η οποία ελέγχει την ύπαρξη του αρχείου.

Πώς να διαγράψετε αρχεία στην PHP;

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

Μια ενδιαφέρουσα επιλογή για την εργασία με διαδρομές αρχείων είναι η χρήση των συναρτήσεων getcwd() php (λαμβάνει το όνομα του τρέχοντος καταλόγου εργασίας)και chdir() (αλλάζει τον τρέχοντα κατάλογο στον καθορισμένο), για παράδειγμα:

$file_path = "διαδρομή/προς";
$file_name = "/2014/04/file.txt";
$old = getcwd();
if (!(@chdir($file_path))) die("Σφάλμα ανοιχτής διαδρομής.");
if (!(@unlink($file_name))) die("Σφάλμα Διαγραφή αρχείου.");
chdir($old);

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

Όσον αφορά τα προβλήματα πρόσβασης, εδώ μπορείτε να δοκιμάσετε να χρησιμοποιήσετε τη συνάρτηση php chmod () (αλλάζει τη λειτουργία πρόσβασης στο αρχείο), για παράδειγμα:

$filename = "/2014/04/path/to/file.txt";
@chmod($filename, 0666);
if (!(@unlink($filename))) die("Σφάλμα Διαγραφή αρχείου.");

Αν χρειάζεσαι διαγράψτε όλα τα αρχεία σε έναν κατάλογοΕίναι βολικό να χρησιμοποιήσετε έναν συνδυασμό συναρτήσεων array_map() php (εφαρμόζει μια συνάρτηση επανάκλησης σε όλα τα στοιχεία πίνακα)και glob() (βρίσκει διαδρομές αρχείου που ταιριάζουν με ένα μοτίβο), για παράδειγμα:

array_map("αποσύνδεση", glob("some/dir/*.txt"));

Επίλυση του προβλήματος του multithreading κατά τη διαγραφή αρχείων

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

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

Η συνάρτηση sem_get() χρησιμοποιείται για τη λήψη του πόρου σηματοφόρου. Μια συνάρτηση μπορεί να πάρει έναν σηματοφόρο με τιμή διαφορετική από τη μία και, στη συνέχεια, πολλαπλά νήματα μπορούν να καταγράψουν τον σηματοφόρο. Η συνάρτηση sem_acquire() χρησιμοποιείται για τη λήψη. Παράδειγμα:

$sem = sem_get(1);
if (sem_acquire($sem) && file_exists($filename)) @unlink($filename);
sem_remove($sem);

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

Σημαντικό ρόλο εδώ παίζει η συνάρτηση sem_remove(), η οποία απελευθερώνει τον απασχολημένο σηματοφόρο. Εάν ο σηματοφόρος δεν απελευθερωθεί, τότε το παράλληλο νήμα θα παραμείνει σε κατάσταση αναμονής μέχρι το τέλος του τρέχοντος. Επομένως, η συνάρτηση πρέπει να είναι εκτός συνθήκης.

Αυτό είναι όλο για μένα. Ελπίζω ότι το άρθρο μου ήταν χρήσιμο για εσάς ή απλώς ενημερωτικό. Σας ευχαριστώ για την προσοχή σας. Καλή τύχη!

στις 8:00 Επεξεργασία μηνύματος

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

Διαγραφή αρχείου στην PHP

Εάν πρέπει να αφαιρέσετε ένα αρχείο, χρησιμοποιήστε τη συνάρτηση unlink() της PHP:

αποσύνδεση(όνομα αρχείου);

Όνομα αρχείου - Εισαγάγετε το όνομα του αρχείου που θέλετε να διαγράψετε εδώ.

Ας υποθέσουμε ότι πρέπει να διαγράψουμε το αρχείο " file.txt", ένα παράδειγμα συμπλήρωσης θα είναι ως εξής:

Αποσύνδεση ("file.txt");

Ολοκληρωμένος κωδικός:

Εάν υπήρχε το αρχείο "file.txt", το σενάριό του αφαιρείται.

Αντιγραφή αρχείου σε PHP

Εάν χρειάζεται να αντιγράψετε περιεχόμενο από ένα αρχείο σε άλλο αρχείο, χρησιμοποιήστε τη συνάρτηση copy() της PHP.

Αντιγραφή ("αρχείο1", "αρχείο2");

Αρχείο1 - το όνομα του αρχείου από το οποίο θα αντιγραφεί το κείμενο
- file2 - το όνομα του αρχείου όπου θα αντιγραφεί το κείμενο

Για παράδειγμα, δημιουργήστε ένα αρχείο με το όνομα "file2.txt" στον τοπικό διακομιστή στο φάκελο "test-1". Αφήστε το αρχείο να είναι κενό. Τώρα επικολλήστε αυτόν τον κωδικό copy("file.txt", "file2.txt");στον κώδικα php "file.php":

Τι καναμε? Δημιούργησε ένα αρχείο με το όνομα "file.txt" μέσω PHP, έκανε μια καταχώρηση στο αρχείο "file.txt" μέσω PHP " Χαίρομαι που σας βλέπω στον ιστότοπο του ιστολογίου ", εμφάνισε το αποτέλεσμα στο πρόγραμμα περιήγησης, αντέγραψε το κείμενο από το αρχείο" file.txt"Και επικολλήθηκε στο αρχείο" file2.txt». Δεν πιστεύετε ότι συνέβη αυτό; Θυμάστε ότι το αρχείο "file2.txt" ήταν κενό;! Ανοίξτε το! Και τι βλέπεις; Ναι, αυτό είναι σωστό, το κείμενο που υπήρχε στο αρχείο "file.txt":

Μετονομασία αρχείου σε PHP

Για να μετονομάσετε ένα αρχείο, χρησιμοποιήστε τη συνάρτηση PHP rename():

Μετονομασία ("αρχείο1", "αρχείο2");

File1 είναι το όνομα του αρχείου που πρόκειται να αντικατασταθεί ( μετονομάζω)
- file2 - εδώ πρέπει να δώσετε ένα νέο όνομα αρχείου

Ακολουθεί ένα παράδειγμα προς συμπλήρωση:

Μετονομασία ("file2..txt");

Εδώ τελειωμένος κωδικός:

Αρχείο " file2.txt"Μετονομάστηκε σε αρχείο" site.txt».

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