Πώς μπορώ να ελέγξω εάν ένας κατάλογος είναι εγγράψιμο σε PHP;

ψήφοι
50

Ξέρει κανείς πώς μπορώ να ελέγξετε για να δείτε αν ένας κατάλογος είναι εγγράψιμο σε PHP;

Η λειτουργία is_writableδεν λειτουργεί για τους φακέλους. (edit: Θα λειτουργεί Δείτε την αποδεκτή απάντηση.).

Δημοσιεύθηκε 20/09/2008 στις 19:07
πηγή χρήστη
Σε άλλες γλώσσες...                            


10 απαντήσεις

ψήφοι
83

Ναι, αυτό δεν λειτουργεί για τους φακέλους ....

Επιστρέφει TRUE αν υπάρχει το όνομα του αρχείου και είναι εγγράψιμο. Το επιχείρημα όνομα αρχείου μπορεί να είναι ένα όνομα καταλόγου που σας επιτρέπει να ελέγξετε αν ένας κατάλογος είναι εγγράψιμος.

Απαντήθηκε 20/09/2008 στις 19:09
πηγή χρήστη

ψήφοι
0

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

Απαντήθηκε 20/09/2008 στις 19:09
πηγή χρήστη

ψήφοι
3

Σύμφωνα με την τεκμηρίωση για is_writable , θα πρέπει μόνο δουλειά - αλλά είπατε «φάκελο», έτσι αυτό θα μπορούσε να είναι ένα θέμα των Windows . Τα σχόλια προτείνουν μια λύση .

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

Απαντήθηκε 20/09/2008 στις 19:10
πηγή χρήστη

ψήφοι
1

stat ()

Μοιάζει πολύ με ένα stat σύστημα, αλλά σε PHP. Τι θέλετε να ελέγξετε είναι η αξία λειτουργία, όπως και εσείς θα από οποιαδήποτε άλλη πρόσκληση για stat σε άλλες γλώσσες (IE C / C ++).

http://us2.php.net/stat

Απαντήθηκε 20/09/2008 στις 19:12
πηγή χρήστη

ψήφοι
4

Μπορεί να σας στείλει μια πλήρη διαδρομή του αρχείου με την is_writable()λειτουργία του. is_writable()θα επιστρέψει false αν το αρχείο δεν υπάρχει ήδη στον κατάλογο. Θα πρέπει να ελέγξετε το ίδιο το directory με το όνομα του αρχείου αφαιρεθεί, αν αυτή είναι η περίπτωση. Αν το κάνετε αυτό, is_writableθα σας πει σωστά εάν ο κατάλογος είναι εγγράψιμος ή όχι. Αν $fileπεριέχει διαδρομή του αρχείου σας να το κάνετε αυτό:

$file_directory = dirname($file);

Στη συνέχεια, χρησιμοποιήστε is_writable($file_directory)για να καθορίσει εάν ο φάκελος είναι εγγράψιμο.

Ελπίζω ότι αυτό βοηθά κάποιος.

Απαντήθηκε 13/10/2009 στις 15:31
πηγή χρήστη

ψήφοι
14

Αυτό είναι ο κωδικός :)

<?php 

$newFileName = '/var/www/your/file.txt';

if ( ! is_writable(dirname($newFileName))) {

    echo dirname($newFileName) . ' must writable!!!';
} else {

    // blah blah blah
}
Απαντήθηκε 23/09/2010 στις 21:58
πηγή χρήστη

ψήφοι
5

για να γίνω πιο συγκεκριμένος για τον ιδιοκτήτη / ομάδα / κόσμος

$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";

ειρήνη...

Απαντήθηκε 25/05/2011 στις 06:38
πηγή χρήστη

ψήφοι
0

Αυτό είναι το πώς θα το κάνετε:

δημιουργήσετε ένα αρχείο με file_put_contents()και να ελέγξετε την τιμή επιστροφής, εάν είναι θετική (αριθμός γραμμένο σε Bytes), τότε μπορείτε να προχωρήσετε και να κάνει ό, τι πρέπει να κάνετε, αν είναι FALSE τότε δεν είναι εγγράψιμος

$is_writable = file_put_contents('directory/dummy.txt', "hello");

if ($is_writable > 0) echo "yes directory it is writable";

else echo  "NO directory it is not writable";

Στη συνέχεια μπορείτε να διαγράψετε το αρχείο κινήσεις με τη χρήση αποσύνδεσης ()

unlink('directory/dummy.txt');
Απαντήθηκε 16/06/2015 στις 11:11
πηγή χρήστη

ψήφοι
0

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

<?php
// isWritable.php detects all directories in the same directory the script is in
// and writes to the page whether each directory is writable or not.

$dirs = array_filter(glob('*'), 'is_dir');

foreach ($dirs as $dir) {
    if (is_writable($dir)) {
        echo $dir.' is writable.<br>';
    } else {
        echo $dir.' is not writable. Permissions may have to be adjusted.<br>';
    } 
}
?>
Απαντήθηκε 10/08/2017 στις 01:39
πηγή χρήστη

ψήφοι
0

Στην περίπτωσή μου, is_writableεπέστρεψε αλήθεια, αλλά όταν προσπάθησε να γράψει το αρχείο - σφάλμα δημιουργήθηκε.
Αυτός ο κωδικός βοηθά να ελέγξετε αν η $dirυπάρχει και είναι εγγράψιμο:

<?php
$dir = '/path/to/the/dir';

$booExists     = is_dir($dir) || (mkdir($dir, 0774, true) && is_dir($dir));
$booIsWritable = false;
if ($booExists) {
    $tempFile = tempnam($dir, 'tmp');
    if ($tempFile !== false) {
        $res = file_put_contents($tempFile, 'test');

        $booIsWritable = $res !== false;
        @unlink($tempFile);
    }
}
Απαντήθηκε 07/03/2019 στις 13:30
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more