구성원의 고유 폴더 내에있는 모든 하위 디렉터리에 저장된 파일 집합을 나열하려고합니다. 여기PHP 에코 파일 목록 - 여러 하위 디렉터리에서 Fed 목록 표시
당신이 파일이 저장되고있는 스타일을 어떻게 볼 수 있습니다
$id = $_SESSION['id'];
$udir = "members/".$id."/";
if ($dir = opendir("$udir")) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
$list .= '<li><a href="'.$udir.$file.'">'.$file.'</a></li>';
}
}
closedir($dir);
}
을 당신으로 어떤 : 다음과 같이 이제
date_default_timezone_set('EST');
$id = $_SESSION['id'];
$udir = "members/".$id."/";
$date = date("Y.m.d");
$curdir = $udir.$date."/";
$datetime = date("Y.m.d.G.i.s");
$fname = $_FILES["file"]["name"];
$extn = pathinfo($fname, PATHINFO_EXTENSION);
if(!is_dir($curdir)){
mkdir($udir.$date, 0700);
}
$ufile = $curdir.$datetime.".".$extn;
$allexts = array("jpg", "jpeg", "gif", "png");
$ext = end(explode(".", $_FILES["file"]["name"]));
if((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($ext, $allexts)){
if (move_uploaded_file($_FILES['file']['tmp_name'], $ufile)) {
echo "File upload was successful.";
} else {
echo "An error has occured. Please try again.";
}
}
else{
echo "Invalid file. Please try again.";
}
, 나는 그 파일에 그리는 노력하고 있어요 짐작할 수 있습니다. 멤버의 고유 한 id 폴더에있는 하위 디렉토리 목록 만 반환합니다. 따라서 필자는 재귀 함수 (recursive function)를 사용하여 작업을 진행했는데, 이는 디렉토리를 파헤치는 것처럼 보였지만이 둘을 병합하는 방법을 알 수는 없습니다. 아래 코드는 모든 파일의 전체 경로를 반환하지만, 지금까지 내가 얻은 것입니다.
$path = realpath("$udir");
$recur = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($recur as $files => $recur){
echo "$files";}
이 두 기능을 통합하거나 완전한 대안을 제시하는 것이 가장 좋습니다.
EDIT : 아래 제안을 활용 해 보았지만 $ list를 (를) 호출 할 때 결과가 나타나지 않습니다. 다음은 수정 된 코드입니다.
$id = $_SESSION['id'];
$udir = "members/".$id."/";
if ($dir = opendir($udir)) {
while (false !== ($file = readdir($dir))) {
if ($file != "." && $file != "..") {
if (is_dir($file) === true){
$dir = opendir("$file");
$file = readdir($dir);
$list .= '<li><a href="'.$udir.$file.'">'.$file.'</a></li>';
closedir($file);
}
else if (is_file($file) === true){
$list .= '<li><a href="'.$udir.$file.'">'.$file.'</a></li>';
}
}
}
closedir($dir);
}
몇 가지 포인트 : 업로드가 실제로 성공하는 경우는 확인하지 않는다; 당신은 사용자가 파일 형식에 대해 거짓말을하지 않는다고 믿고 있습니다. 두 파일이 같은 타임 스탬프로 업로드를 완료하면 충돌을 대비하지 않고 파일 이름에 대해 1 초 단위로 타임 스탬프를 사용합니다. path_info를 사용하여 원본 파일 확장명을 올바르게 가져온 다음 즉시 비효율적 인 폭발/종료 작업 세트를 위해 멀리 던져 버리십시오. –
@MarcB 제안없이 비판 해 주셔서 감사합니다. 학생 교육에 +1. – Craig