첫 번째 느낌은 재귀를 사용하여 생성하는 것인데 구체적인 아이디어는 다음과 같습니다.
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에서 다단계 디렉토리를 재귀적으로 생성하는 것에 대한 인터뷰 질문입니다. 앞으로 편집자는 몇 가지 흥미로운 인터뷰 질문을 찾아 여러분과 공유할 것입니다.