PHP でディレクトリが書き込み可能かどうかを確認するにはどうすればよいですか?
-
01-07-2019 - |
質問
ディレクトリが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 で行われます。チェックしたいのは、他の言語で stat を呼び出すときと同じように、モード値です (つまり、C/C++)。
PHPマニュアルによると is_writable ディレクトリ上では正常に動作するはずです。
これが私のやり方です:
でファイルを作成します 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');
私の場合、 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);
}
}