2013-07-04 55 views
0

此腳本將搜索我的服務器中由特定字符串開始的文件,然後返回下載鏈接。搜索查詢由「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"; 
    } 

} 

回答

0

我是陌生的RecursiveDirectoryIterator功能,所以我決定去看看。整潔的東西!我寫了下面,它似乎你想要做什麼:

方法#1 ...

$path = $_SERVER['DOCUMENT_ROOT']; 
$search = rawurldecode($_GET['f']); 

$it = new RecursiveDirectoryIterator($path); 
foreach (new RecursiveIteratorIterator($it) as $file){ 
    $pathfile = str_replace($path,'',$file); 
    if (strpos($pathfile, $search) !== false) { 
     echo 'file = '. basename($file) .'<br>'; 
     echo 'link = http://www.mydomain.com'. $pathfile .'<br>'; 
     echo 'size = '. round(filesize($file)/1024,2) .' KB<br><br>'; 
    } 
} 

您通過http://www.mydomain.com/search.php?f=whatever運行它假定你的名字腳本search.php,這將發現任何包含單詞whatever的文件。

方法#2 ...

如果要拆分這家公寓(投入功能搜索),這裏是如何看起來:

function rsearch($path, $search) { 
    $files = array(); 
    $it = new RecursiveDirectoryIterator($path); 
    foreach (new RecursiveIteratorIterator($it) as $file){ 
     if (strpos($file, $search) !== false) $files[] = $file; 
    } 
    return $files; 
} 

$path = $_SERVER['DOCUMENT_ROOT']; 
$search = rawurldecode($_GET['f']); 

$files = rsearch($path, $search); 

foreach ($files as $file) { 
    $pathfile = str_replace($path,'',$file); 
    if (strpos($pathfile, $search) !== false) { 
     echo 'file = '. basename($file) .'<br>'; 
     echo 'link = http://www.mydomain.com'. $pathfile .'<br>'; 
     echo 'size = '. round(filesize($file)/1024,2) .' KB<br><br>'; 
    } 
} 
+0

同樣的問題...這部分的腳本只是刪除URL中的文件夾並僅保留文件名。通過改變你的代碼,腳本會返回文件夾名稱之前的文件名,但我仍然得到一個不完整的文件名,當我只搜索第一個字 –

+0

嗯..我不熟悉'rsearch()'函數,什麼那是幹嘛? – neokio

+0

檢查我的帖子,我已經發布了該函數的代碼。它是一個RecursiveDirectoryIterator,它將搜索所有文件夾和子文件夾中的字符串,然後返回找到的文件列表。問題是文件名不完整,腳本只是在找到文件時返回搜索查詢 –

相關問題