كيف يمكنني معرفة ما إذا كان الدليل هو قابل للكتابة في PHP?

StackOverflow https://stackoverflow.com/questions/109188

  •  01-07-2019
  •  | 
  •  

سؤال

لا أحد يعرف كيف يمكن أن تحقق لمعرفة ما إذا كان الدليل هو قابل للكتابة في PHP?

وظيفة is_writable لا تعمل مجلدات.(تحرير:أنها لا تعمل.انظر الجواب المقبول.)

هل كانت مفيدة؟

المحلول

نعم, أنها لا تعمل مجلدات....

ترجع صحيح إذا كان اسم الملف موجود و هو قابل للكتابة.اسم الملف الحجة قد يكون اسم الدليل مما يسمح لك للتحقق ما إذا كان الدليل هو قابل للكتابة.

نصائح أخرى

هذا هو الكود :)

<?php 

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

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

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

    // blah blah blah
}

أن تكون أكثر تحديدا عن مالك/المجموعة/العالم

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

السلام...

قد يتم إرسال ملف كامل مسار is_writable() وظيفة. is_writable() سوف return false إذا لم يكن الملف موجودا بالفعل في الدليل.تحتاج إلى التحقق من الدليل نفسه مع اسم الملف إزالتها ، إذا كان هذا هو الحال.إذا كنت تفعل ذلك ، is_writable بشكل صحيح سوف أقول لكم ما إذا كان الدليل هو قابل للكتابة أو لا.إذا $file يحتوي على مسار الملف تفعل هذا:

$file_directory = dirname($file);

ثم استخدام is_writable($file_directory) لتحديد ما إذا كان المجلد غير قابل للكتابة.

آمل أن يساعد هذا شخص.

وفقا وثائق is_writable, ، يجب أن تعمل فقط - لكنك قلت "مجلد" ، لذلك يمكن أن يكون هذا ويندوز المسألة.التعليقات توحي الحل.

(هرع القراءة في وقت سابق جعلني أعتقد أن زائدة مائلة مهمة ، ولكن التي تحولت إلى أن تكون محددة لهذا العمل).

لقد كتبت السيناريو قليلا (أنا أسميها 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>';
    } 
}
?>

القانون الأساسي()

مثل الكثير من النظام الأساسي ، ولكن في PHP.ماذا تريد أن تحقق هو وضع قيمة ، مثل الكثير كنت من أي دعوة إلى القانون الأساسي في اللغات الأخرى (I. E.C/C++).

http://us2.php.net/stat

وفقا PHP دليل is_writable يجب أن تعمل بشكل جيد على الدلائل.

هذا هو كيف نفعل ذلك:

إنشاء ملف مع file_put_contents() والتحقق من قيمة المقابل ، إذا كان إيجابيا (عدد مكتوب في بايت) ثم يمكنك المضي قدما ونفعل ما عليك فعله إن كان خطأ فمن غير قابل للكتابة

$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');

في حالتي ، is_writable عاد صحيح ، ولكن عندما حاولت كتابة ملف - خطأ تم إنشاؤها.
هذا القانون يساعد على التحقق إذا كان $dir موجود للكتابة:

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

// try to create this directory if it doesn't exist
$booExists     = is_dir($dir) || (mkdir($dir, 0774, true) && is_dir($dir));
$booIsWritable = false;
if ($booExists && is_writable($dir)) {
    $tempFile = tempnam($dir, 'tmp');
    if ($tempFile !== false) {
        $res = file_put_contents($tempFile, 'test');

        $booIsWritable = $res !== false;
        @unlink($tempFile);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top