이 스크립트는 내 서버에서 특정 문자열로 시작하는 파일을 검색 한 다음 다운로드 링크를 반환합니다. 검색 쿼리는 "f"GET 값으로 정의됩니다. 이제PHP 파일 검색 문제 - 파일의 전체 경로를 반환하지 않음
의 내가 내 서버에서 다음 파일을 가정 해 봅시다 :
/폴더/예제 파일 번호 /폴더 one.zip/예제 파일 번호 /폴더/예를 들어 파일 번호 세 two.zip .zip
"example file"을 검색하면 스크립트는 3 개의 결과를 반환하지만 모든 다운로드 링크는 전체 파일 이름 (/ 폴더/예제 파일 번호 XXX) 대신 "/ 폴더/예제 파일"이됩니다. 지퍼).
이것은 또한 파일 크기는() "/ 폴더/예제 파일"의 크기를 찾습니다 이후, 스크립트의 끝 부분에있는 파일 크기() 함수를 사용하여 버그를 만드는 대신에 전체 파일 이름
를 사용합니다 그 문제를 해결하도록 도와 주시겠습니까?
$request = $_GET['f'];
$adr = $_SERVER['QUERY_STRING'];
$decode = rawurldecode(substr($adr, 2));
echo "Searching for $decode";
// finding the file on the server
$root = $_SERVER['DOCUMENT_ROOT'];
$search = preg_quote(utf8_decode($decode));
function rsearch($folder, $pattern) {
$dir = new RecursiveDirectoryIterator($folder);
$ite = new RecursiveIteratorIterator($dir);
$files = new RegexIterator($ite, $pattern, RegexIterator::GET_MATCH);
$fileList = array();
foreach ($files as $file) {
$fileList = array_merge($fileList, $file);
}
return $fileList;
}
$resultatss = rsearch($root, '/.*\/'.$search.'/');
foreach ($resultatss as $resultat) {
$downloadlink = str_replace("$root/", "", $resultat);
$pos = strrpos($downloadlink, '/') + 1;
$encodedownloadlink = substr($downloadlink, 0, $pos) . rawurlencode(substr($downloadlink, $pos));
if (!empty($downloadlink)) {
echo "download link = http://www.mydomain.com/$encodedownloadlink";
$taillekb = filesize($downloadlink)/1024;
echo "<br>Size: $taillekb KB<br>";
} else {
echo "File not found";
}
}
같은 문제 :
방법 # 2 ...
당신은 (함수에서 검색을 가하고)이 떨어져 분할 할 경우, 여기에 보이는 방법 스크립트의 URL에있는 폴더를 제거하고 파일 이름 만 유지하면됩니다. 코드로 변경하면 스크립트는 파일 이름 앞에 폴더 이름을 반환하지만 처음 단어 만 검색하면 불완전한 파일 이름을 얻게됩니다. –
흠 ..'rsearch()'함수에 익숙하지 않습니다. 뭐하는거야? – neokio
내 게시물을 확인, 나는 기능의 코드를 게시했습니다. 모든 폴더와 하위 폴더에서 문자열을 검색 한 다음 발견 된 파일의 목록을 반환하는 RecursiveDirectoryIterator입니다. 문제는 파일 이름이 불완전하고, 스크립트가 파일을 찾을 때 검색 쿼리를 반환한다는 것입니다. –