2017-08-09 108 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; 

    } 

} 

那样简单。也许有更好的办法,但是这对我有用,我对此感到满意。