كيف يمكنني معرفة ما إذا كان الدليل هو قابل للكتابة في PHP?
-
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++).
وفقا 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);
}
}