此腳本將搜索我的服務器中由特定字符串開始的文件,然後返回下載鏈接。搜索查詢由「f」GET值定義。php文件搜索問題 - 沒有返回文件的完整路徑
現在,讓我們說,我有我的服務器上的以下文件:
/文件夾/示例文件數量one.zip /文件夾/示例文件數量two.zip /文件夾/示例文件之三.ZIP
如果我搜索「示例文件」的腳本將返回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";
}
}
同樣的問題...這部分的腳本只是刪除URL中的文件夾並僅保留文件名。通過改變你的代碼,腳本會返回文件夾名稱之前的文件名,但我仍然得到一個不完整的文件名,當我只搜索第一個字 –
嗯..我不熟悉'rsearch()'函數,什麼那是幹嘛? – neokio
檢查我的帖子,我已經發布了該函數的代碼。它是一個RecursiveDirectoryIterator,它將搜索所有文件夾和子文件夾中的字符串,然後返回找到的文件列表。問題是文件名不完整,腳本只是在找到文件時返回搜索查詢 –