PHP는 반복적으로 다중 레벨 디렉토리를 생성합니다_php 팁

WBOY
풀어 주다: 2016-05-16 20:05:10
원래의
1271명이 탐색했습니다.

첫 번째 느낌은 재귀를 사용하여 생성하는 것인데 구체적인 아이디어는 다음과 같습니다.

function Directory($dir){
    if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。

        echo $dir."创建成功<br>";  //输出创建成功的目录

    }else{

        $dirArr=explode('/',$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组
        array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来,
        $newDir=implode('/',$dirArr); //重新组合成一个文件夹字符串
        Directory($newDir); //试图创建父目录
        if(@mkdir($dir,0777)){
            echo $dir."创建成功<br>";

        } //再次试图创建子目录,成功输出目录名
    }
}

Directory("A/B/C/D/E/F");

로그인 후 복사

출력 결과는 아래와 같습니다.

그런데 작성하기가 너무 번거롭다는 것을 알 수 있습니다. 매뉴얼에 있는 파일 함수를 보면 dirname() 함수 가 있는데 그 프로토타입은 다음과 같습니다.

문자열 dirname( string $path )

파일의 전체 경로가 포함된 문자열이 주어지면 이 함수는 파일 이름을 제거한 후 디렉터리 이름을 반환합니다.

Windows에서는 슬래시(/)와 백슬래시()를 모두 디렉터리 구분 기호로 사용할 수 있습니다. 다른 경우에는 슬래시(/)입니다.

약간 최적화 가능:

function Directory($dir){

    if(is_dir($dir) || @mkdir($dir,0777)){ 

        echo $dir."创建成功<br>";  

    }else{

        Directory(dirname($dir));

        if(@mkdir($dir,0777)){

            echo $dir."创建成功<br>";

        }

    }

}

로그인 후 복사

효과는 같습니다.
그 후 인터넷에서 답변을 검색하다가 통찰력이 매우 뛰어난 을 발견했습니다.

function Directory( $dir ){  

   return  is_dir ( $dir ) or Directory(dirname( $dir )) and  mkdir ( $dir , 0777);

}

로그인 후 복사

이제 전체 기능을 설명하겠습니다.

먼저 PHP의 논리 연산자 : && > || 또는 , 즉 기호 유형 > >OR 유형이므로 함수 본문은 다음과 같이 표시됩니다.

is_dir( $dir ) 또는 (Directory(dirname( $dir )) 및 mkdir( $dir , 0777));

먼저 대상 디렉터리가 존재하는지 확인합니다. 또는 단락 특성에 따라 다음 전체가 단락되고 대상 디렉터리가 존재하지 않으면 실행을 건너뜁니다. 본문이 실행됩니다:

디렉토리(dirname( $dir )) 및 mkdir( $dir , 0777)

생각해봤습니다재귀를 먼저 수행하는 목적: 재귀를 먼저 실행하여 상위 디렉터리(dirname($dir))가 생성되었는지 확인하여 후속 mkdir() 함수가 경고하지 않도록 합니다. 상위 디렉토리를 찾을 수 없는 하위 디렉토리를 생성할 때.

재귀 깊이를 입력한 후 가장 깊은 루트 디렉터리가 있는지 확인한 후, 루트 디렉터리부터 아래쪽으로 디렉터리를 생성합니다.

마지막으로, 취업을 원하는 사람들에게 온라인으로 가서 대기업의 면접 질문을 찾아보라고 제안합니다. 결국, 이들의 시험은 더 포괄적이고 심층적이므로 지식을 배울 때도 마찬가지입니다. 야망이 너무 많으면 쉽지만 너무 적으면 정상적으로 사용할 수 있기 전에 처음에 여러 번 최적화했습니다.

이것은 PHP에서 다단계 디렉토리를 재귀적으로 생성하는 것에 대한 인터뷰 질문입니다. 앞으로 편집자는 몇 가지 흥미로운 인터뷰 질문을 찾아 여러분과 공유할 것입니다.

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿