[php] 폴더가 없으면 만듭니다

업로드 폴더 가 없기 때문에 WordPress 테마에 오류가 발생 하는 Bluehost 와 함께 WordPress를 설치하는 경우 가 있습니다 wp-content/uploads.

BlueGhost cPanel WordPress 설치 프로그램은 HostGator와 달리이 폴더를 작성하지 않습니다 .

따라서 폴더를 확인하고 다른 방법으로 만드는 코드를 테마에 추가해야합니다.



답변

mkdir을 사용하여 이것을 시도하십시오 :

if (!file_exists('path/to/directory')) {
    mkdir('path/to/directory', 0777, true);
}

참고 0777이미 디렉토리에 대한 기본 모드입니다 여전히 현재의 umask에 의해 수정 될 수 있습니다.


답변

여기 누락 된 부분이 있습니다. 다음 과 같이 mkdir 호출 에서 ‘재귀 적’플래그를 세 번째 인수 (부울 true)로 전달해야합니다 .

mkdir('path/to/directory', 0755, true);


답변

이것이 구글에서 나오기 때문에 좀 더 보편적 인 것입니다. 세부 사항이보다 구체적이지만이 질문의 제목은보다 보편적입니다.

/**
 * recursively create a long directory path
 */
function createPath($path) {
    if (is_dir($path)) return true;
    $prev_path = substr($path, 0, strrpos($path, '/', -2) + 1 );
    $return = createPath($prev_path);
    return ($return && is_writable($prev_path)) ? mkdir($path) : false;
}

이것은 생성되지 않은 긴 디렉토리 체인으로 경로를 취하고 기존 디렉토리에 도달 할 때까지 하나의 디렉토리로 계속 올라갑니다. 그런 다음 해당 디렉토리에 다음 디렉토리를 작성하고 모든 디렉토리가 작성 될 때까지 계속합니다. 성공하면 true를 반환합니다.

중지 수준을 제공하여 사용자 폴더 나 다른 것을 넘어서거나 권한을 포함하여 실패하면 향상 될 수 있습니다.


답변

다음과 같은 도우미 기능은 어떻습니까?

function makeDir($path)
{
     $ret = mkdir($path); // use @mkdir if you want to suppress warnings/errors
     return $ret === true || is_dir($path);
}

true디렉토리가 성공적으로 작성되었거나 이미 존재 false하고 디렉토리를 작성할 수없는 경우 리턴 됩니다 .

더 나은 대안은이 (경고를주지해야한다)이다 :

function makeDir($path)
{
     return is_dir($path) || mkdir($path);
}


답변

빠른 폴더 생성 방법 :

if (!is_dir('path/to/directory')) {
    mkdir('path/to/directory', 0777, true);
}


답변

재귀 적으로 디렉토리 경로를 작성하십시오.

function makedirs($dirpath, $mode=0777) {
    return is_dir($dirpath) || mkdir($dirpath, $mode, true);
}

파이썬의 영감 os.makedirs()


답변

WordPress에는 재귀 적으로 디렉토리 구조를 생성하는 매우 편리한 wp_mkdir_p 함수도 있습니다 .

참고를위한 근원 :-

function wp_mkdir_p( $target ) {
    $wrapper = null;

    // strip the protocol
    if( wp_is_stream( $target ) ) {
        list( $wrapper, $target ) = explode( '://', $target, 2 );
    }

    // from php.net/mkdir user contributed notes
    $target = str_replace( '//', '/', $target );

    // put the wrapper back on the target
    if( $wrapper !== null ) {
        $target = $wrapper . '://' . $target;
    }

    // safe mode fails with a trailing slash under certain PHP versions.
    $target = rtrim($target, '/'); // Use rtrim() instead of untrailingslashit to avoid formatting.php dependency.
    if ( empty($target) )
        $target = '/';

    if ( file_exists( $target ) )
        return @is_dir( $target );

    // We need to find the permissions of the parent folder that exists and inherit that.
    $target_parent = dirname( $target );
    while ( '.' != $target_parent && ! is_dir( $target_parent ) ) {
        $target_parent = dirname( $target_parent );
    }

    // Get the permission bits.
    if ( $stat = @stat( $target_parent ) ) {
        $dir_perms = $stat['mode'] & 0007777;
    } else {
        $dir_perms = 0777;
    }

    if ( @mkdir( $target, $dir_perms, true ) ) {

        // If a umask is set that modifies $dir_perms, we'll have to re-set the $dir_perms correctly with chmod()
        if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
            $folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
            for ( $i = 1; $i <= count( $folder_parts ); $i++ ) {
                @chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
            }
        }

        return true;
    }

    return false;
}