source

디렉토리가 존재하는지 확인하려면 어떻게 해야 합니까?" is_filename", "file_filename" 또는 둘 다입니까?

gigabyte 2022. 11. 28. 21:12
반응형

디렉토리가 존재하는지 확인하려면 어떻게 해야 합니까?" is_filename", "file_filename" 또는 둘 다입니까?

디렉토리가 존재하지 않는 경우는, 그것을 작성하려고 합니다.

를 사용하고 있다is_dir그 목적에 충분한 기능을 하고 있는가?

if ( !is_dir( $dir ) ) {
    mkdir( $dir );       
}

아니면 합칠까요?is_dir와 함께file_exists?

if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
    mkdir( $dir );       
} 

Unix 시스템에서는 둘 다 true가 반환됩니다. Unix에서는 디렉토리를 포함한 모든 것이 파일입니다.그러나 이 이름이 사용되었는지 테스트하려면 둘 다 확인해야 합니다.'foo'라는 이름의 일반 파일이 있을 수 있으므로 디렉터리 이름 'foo'를 만들 수 없습니다.

$dirname = $_POST["search"];
$filename = "/folder/" . $dirname . "/";

if (!file_exists($filename)) {
    mkdir("folder/" . $dirname, 0777);
    echo "The directory $dirname was successfully created.";
    exit;
} else {
    echo "The directory $dirname exists.";
}

경로가 존재하는지 여부를 검증하는 가장 좋은 방법은 realpath()라고 생각합니다.http://www.php.net/realpath

다음은 기능의 예를 제시하겠습니다.

<?php
/**
 * Checks if a folder exist and return canonicalized absolute pathname (long version)
 * @param string $folder the path being checked.
 * @return mixed returns the canonicalized absolute pathname on success otherwise FALSE is returned
 */
function folder_exist($folder)
{
    // Get canonicalized absolute pathname
    $path = realpath($folder);

    // If it exist, check if it's a directory
    if($path !== false AND is_dir($path))
    {
        // Return canonicalized absolute pathname
        return $path;
    }

    // Path/folder does not exist
    return false;
}

동일한 기능의 짧은 버전

<?php
/**
 * Checks if a folder exist and return canonicalized absolute pathname (sort version)
 * @param string $folder the path being checked.
 * @return mixed returns the canonicalized absolute pathname on success otherwise FALSE is returned
 */
function folder_exist($folder)
{
    // Get canonicalized absolute pathname
    $path = realpath($folder);

    // If it exist, check if it's a directory
    return ($path !== false AND is_dir($path)) ? $path : false;
}

출력 예시

<?php
/** CASE 1 **/
$input = '/some/path/which/does/not/exist';
var_dump($input);               // string(31) "/some/path/which/does/not/exist"
$output = folder_exist($input);
var_dump($output);              // bool(false)

/** CASE 2 **/
$input = '/home';
var_dump($input);
$output = folder_exist($input);         // string(5) "/home"
var_dump($output);              // string(5) "/home"

/** CASE 3 **/
$input = '/home/..';
var_dump($input);               // string(8) "/home/.."
$output = folder_exist($input);
var_dump($output);              // string(1) "/"

사용.

<?php

$folder = '/foo/bar';

if(FALSE !== ($path = folder_exist($folder)))
{
    die('Folder ' . $path . ' already exist');
}

mkdir($folder);
// Continue do stuff

같은 이름의 파일이 이미 있지만 디렉토리가 아닌 경우 문제가 있는 게시물의 두 번째 변형은 적합하지 않습니다.!file_exists($dir)돌아온다false폴더는 생성되지 않으므로 오류가 발생합니다."failed to open stream: No such file or directory"발생합니다.Windows 에서는, 「파일」타입과 「폴더」타입의 차이가 있기 때문에, 를 사용할 필요가 있습니다.file_exists()그리고.is_dir()동시에 (예:

if (file_exists('file')) {
    if (!is_dir('file')) { //if file is already present, but it's not a dir
        //do something with file - delete, rename, etc.
        unlink('file'); //for example
        mkdir('file', NEEDED_ACCESS_LEVEL);
    }
} else { //no file exists with this name
    mkdir('file', NEEDED_ACCESS_LEVEL);
}

저도 같은 의문을 가지고 있었습니다만, PHP 문서를 참조해 주세요.

https://www.php.net/manual/en/function.file-exists.php

https://www.php.net/manual/en/function.is-dir.php

곧 알게 될 것이다is_dir()두 가지 속성을 모두 갖습니다.

Return Values is_dir 파일 이름이 존재하고 디렉토리일 경우 TRUE를 반환하고 그렇지 않을 경우 FALSE를 반환합니다.

$year = date("Y");   
$month = date("m");   
$filename = "../".$year;   
$filename2 = "../".$year."/".$month;

if(file_exists($filename)){
    if(file_exists($filename2)==false){
        mkdir($filename2,0777);
    }
}else{
    mkdir($filename,0777);
}
$save_folder = "some/path/" . date('dmy');

if (!file_exists($save_folder)) {
   mkdir($save_folder, 0777);
}

이것은 오래되었지만 여전히 시사적인 질문이다.를 사용하여 테스트합니다.is_dir()또는file_exists()존재하기 위해 기능하다.또는..파일명을 지정합니다.각 디렉토리에는, 다음의 파일이 포함되어 있을 필요가 있습니다.

is_dir("path_to_directory/.");    

둘 다 확인하는 대신if(stream_resolve_include_path($folder)!==false) 느리지만 한 방에 두 마리의 새를 죽인다.

또 다른 옵션은 단순히 이 명령어를 무시하는 것입니다.E_WARNING(사용하지 않음)@mkdir(...);(디렉토리가 이미 존재하는 것뿐만 아니라 가능한 모든 경고가 사라지기 때문에) 특정 오류 핸들러를 등록한 후 다음 작업을 수행합니다.

namespace com\stackoverflow;

set_error_handler(function($errno, $errm) { 
    if (strpos($errm,"exists") === false) throw new \Exception($errm); //or better: create your own FolderCreationException class
});
mkdir($folder);
/* possibly more mkdir instructions, which is when this becomes useful */
restore_error_handler();

이게 내가 하는 일이야

if(is_dir("./folder/test"))
{
  echo "Exist";
}else{
  echo "Not exist";
}

경로가 디렉토리인지 확인하는 방법은 다음과 같습니다.

function isDirectory($path) {
    $all = @scandir($path);
    return $all !== false;
}

메모: 존재하지 않는 경로에도 false가 반환되지만 UNIX/Windows에서는 완벽하게 동작합니다.

나는 이것이 dir check를 위한 빠른 해결책이라고 생각한다.

$path = realpath($Newfolder);
if (!empty($path)){
   echo "1";
}else{
   echo "0";
}

언급URL : https://stackoverflow.com/questions/5425891/how-do-i-check-if-a-directory-exists-is-dir-file-exists-or-both

반응형