programing tip

디렉토리가 PHP에서 쓰기 가능한지 어떻게 확인합니까?

itbloger 2020. 12. 11. 07:56
반응형

디렉토리가 PHP에서 쓰기 가능한지 어떻게 확인합니까?


누구든지 내가 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에서. 확인하고 싶은 것은 다른 언어 (IE C / C ++)에서 stat에 대한 다른 호출 에서처럼 모드 값입니다.

http://us2.php.net/stat


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_writabletrue를 반환했지만 파일을 쓰려고 할 때 오류가 발생했습니다.
이 코드는 $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);
    }
}

참고 URL : https://stackoverflow.com/questions/109188/how-do-i-check-if-a-directory-is-writeable-in-php

반응형