2017-08-09 109 views
0

我試圖寫一個腳本,打開目錄,掃描所有文件(圖像),並顯示在屏幕上,但問題是,它包含了他們的名字符號和scandir無法處理它。問題符號(SCANDIR,和array_diff,的foreach)

它的確定與沒有的符號出現在他們的名字的目錄,腳本運行完美,但目錄/用他們的名字符號文件是一個大問題。

舉例來說,我一共2根目錄下的所有文件在目錄包含在其名稱相同的符號。一個包含「®」,另一個包含「TM」,並且每個文件(圖像)都在其名稱中包含這些符號,例如:「Right®screen452217.jpg」。因此,重命名目錄和文件不是一個選項,這將花費太多時間。

也許有更好的方式,但我直接做到這一點從網址上的屏幕$ _GET。現在是一個本地服務器上,我在的VertrigoServ WAMP服務器工作,那麼腳本的樣子:

http://127.0.0.1/screenshots/index.php?page=Rights® 
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™ 

$url = "screens/".$_GET["page"].""; 
$scan = scandir($url, SCANDIR_SORT_NONE); 
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db')); 

foreach($scaned as $shots) { 

    if ($shots <> "thumbnails") { 

echo "<li>".PHP_EOL. 
    " <img width=\"253\" height=\"158\" src=\"".$url."\\".$shots."\"". 
    " alt=\"".$shots."\" title=\"".$shots."\". 
    " </li>".PHP_EOL.PHP_EOL; 

    } 

} 

SCANDIR報告這些錯誤:

The system cannot find the file specified. (code: 2) 
failed to open dir: No such file or directory 
No such file or directory 

和array_diff報告這個錯誤:

Argument #1 is not an array 

最後的foreach報告:

Invalid argument supplied for foreach() 

我也嘗試改變編碼mb_convert_encoding()iconv(),但沒有運氣。

我的最好成績是不斷變化的網址,而不是使用後「®」或「™」我的windows-1252 ASCII Encoding Reference

http://127.0.0.1/screenshots/index.php?page=Rights%AE 
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99 

然後,一切都過去了,沒有錯誤,但不是顯示圖像, 「IMG SRC」 的模樣:

screens/Rights�\Right�452217.jpg 

這仍然是問題,因爲不顯示圖像。我喜歡用scandir,因爲我已經完成了這個頁面,但是我無法通過符號來解決這個問題。你能幫我嗎 ?

回答

0

這是比我想象的實際簡單。問題是,該目錄已經在其名稱中的符號,所以我必須改變這種狀況到Windows 1252這樣的:

http://127.0.0.1/screenshots/index.php?page=Rights® 
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks™ 

要:

$page = $_GET["page"]; 

if (strpos($page, '®')) {$page = str_replace('®', '%AE', $page);} 
if (strpos($page, '™')) {$page = str_replace('™', '%99', $page);} 

然後網址,以改變

http://127.0.0.1/screenshots/index.php?page=Rights%AE 
http://127.0.0.1/screenshots/index.php?page=Trade%20Marks%99 

然後,它很簡單,只需SCANDIR之後添加編碼和一個在的foreach:

$url = "screens/".$_GET["page"].""; 
$scan = scandir($url, SCANDIR_SORT_NONE); 
$scaned = array_diff($scan, array('.', '..', 'Thumbs.db')); 

$url = iconv("windows-1252", "UTF-8", $screen_uplay); 

foreach($scaned as $shots) { 

    if ($shots <> "thumbnails") { 

    $shots = iconv("windows-1252", "UTF-8", $shots); 

echo "<li>".PHP_EOL. 
    " <img width=\"253\" height=\"158\" src=\"".$url."\\".$shots."\"". 
    " alt=\"".$shots."\" title=\"".$shots."\". 
    " </li>".PHP_EOL.PHP_EOL; 

    } 

} 

那樣簡單。也許有更好的辦法,但是這對我有用,我對此感到滿意。