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>';
}
}
?>
stat()
システムの統計情報によく似ていますが、PHPにあります。確認したいのはモード値です。これは、他の言語(I.E. C/C++)でstatを呼び出した場合とまったく同じです。
私の場合、 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);
}
}
これは私がそれを行う方法です:
file_put_contents()
を使用してファイルを作成し、戻り値を確認します。正の値(バイト単位で書き込まれた数)であれば、先に進んで必要な処理を行います。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()を使用してダミーファイルを削除できます。
unlink('directory/dummy.txt');
PHP manual is_writable によると、ディレクトリでうまく動作するはずです。