<?php
$dir = '';
if(isset($_GET['dir']) && !empty($_GET['dir']) && !stristr($_GET['dir'], '.')){
$dir = '/'. $_GET['dir'];
echo '<a href="files.php">back to /</a><br><br>';
}
foreach(scandir('files'. $dir) as $filename){
if($filename == ".." || $filename == "."){
// do nothing. We want files and folders, not dots.
}
else
{
if(is_file($filename)){
echo '<a href="files/'. $filename .'">'. $filename .'</a><br>';
}
else
{
echo '<a href="files.php?path='. $filename .'">'. $filename .' (dir)</a><br>';
}
}
}
?>
그래서 Windows 탐색기 (예 :!)에서 보는 것처럼 내 사이트의 파일 인덱서를 만들고 싶습니다. 그러나 스크립트는 현재 모든 파일이 색인하려는 폴더 인 files/
디렉토리의 하나의 폴더를 감지하여 하위 폴더 내부 또는 외부에서 파일을 완전히 손실합니다. 그리고 하위 폴더를 클릭하면 기본 폴더 (files/
)와 같은 역할을합니다.인덱싱 폴더 : 디렉토리를 감지하지 못합니다.
어떻게 해결할 수 있습니까?
또 다른 질문은 glob
또는 scandir
을 사용해야합니까? 단지 내가 그것을에 노트처럼 memory_limit를 문제를 처리하지 않도록 ~ 80 개 파일을 포함 할 것 년대 PHP.net page :
당신이하는 디렉토리에 파일을 나열하려고하면는 글로브()를 사용하지 마십시오 매우 많은 파일이 저장됩니다 (> 100.000). "허용 된 메모리 크기의 XYZ 바이트가 소모되었습니다 ..."오류가 발생합니다. php.ini에서 memory_limit 변수를 늘려보십시오. Mine은 128MB로 설정되어 있으며 glob()는 500.000 개가 넘는 반면 스크립트는 여전히이 제한에 도달합니다.
Barmar의 솔루션 후
업데이트 코드 :
<?php
$dir = '';
if(isset($_GET['dir']) && !empty($_GET['dir']) && !stristr($_GET['dir'], '.')){
$dir = $_GET['dir'];
echo '<a href="files.php">Back to /</a><br><br>';
}
foreach(scandir('files'. $dir) as $filename){
if($filename == ".." || $filename == "."){
// do nothing. We want files and folders, not dots.
}
else
{
if(is_file($dir .'/'. $filename)){
echo '<a href="'. $filename .'">'. $filename .'</a><br>';
}
else
{
echo '<a href="files.php?dir='. $dir .'/'. $filename .'">'. $filename .' (dir)</a><br>';
}
}
}
?>
더 잘 제어하고 싶을 수 있습니다. 체크 아웃 : http://php.net/manual/en/class.recursivedirectoryiterator.php –
같은 경로에 머물고있는 다른 문제를 해결하려면? path = to? dir = – tlenss
@RobW 체크 아웃했습니다. ,하지만 그게 더 어려워 보인다. – Thew