题
有谁知道如何查看目录是否可以在PHP中编写?
is_writable
的功能不会适用于文件夹。 (编辑:它确实有效。请参阅接受的答案。)
解决方案
是的,它适用于文件夹......
如果文件名存在且可写,则返回TRUE。 filename参数可以是目录名,允许您检查目录是否可写。
其他提示
这是代码:)
<?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()
将返回false。如果是这种情况,您需要检查目录本身并删除文件名。如果这样做, is_writable
将正确地告诉您目录是否可写。如果 $ file
包含您的文件路径,请执行以下操作:
$file_directory = dirname($file);
然后使用 is_writable($ file_directory)
来确定文件夹是否可写。
我希望这有助于某人。
根据 is_writable的文档,它应该只是工作 - 但你说“文件夹”,所以这可能是 Windows问题一>。评论建议解决方法。
(早先的匆匆阅读使我认为尾随斜线是重要的,但结果证明这是特定于这项工作。)
我编写了一个小脚本(我称之为 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手册, 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()
删除虚拟文件unlink('directory/dummy.txt');
在我的情况下, is_writable
返回true,但是当试图写入文件时 - 生成了错误。
此代码有助于检查 $ 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);
}
}