2017-08-09 8 views
0

ディレクトリを開いてすべてのファイル(イメージ)をスキャンして画面に表示するスクリプトを作成しようとしていますが、スキャンダルはそれを処理できません。シンボルの問題(scandir、array_diff、foreach)

名前に記号がないディレクトリでは問題ありませんが、スクリプトは完璧に動作しますが、名前に記号が含まれているディレクトリ/ファイルは大きな問題です。

たとえば、合計2つのディレクトリがあり、そのディレクトリ内のすべてのファイルには、同じ名前のシンボルが含まれています。 1つは「®」を含み、もう1つは「™」を含み、すべての単一のファイル(画像)はこれらのシンボルをその名前に含みます(例:「Right®screen452217.jpg」)。したがって、ディレクトリやファイルの名前を変更することはできません。これには時間がかかります。

もっと良い方法があるかもしれませんが、私はそれを$ _GETの画面上のURLから直接行います。それは、今のところローカルサーバー上にある私はVertrigoServ WAMPサーバに働いていると、スクリプトは、次にようになります。

:このエラーレポートarray_diff

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

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は、これらのエラーを報告します

Argument #1 is not an array 

、最終的にはforeachのレポート:

Invalid argument supplied for foreach() 

また、mb_convert_encoding()iconv()でエンコードを変更しようとしましたが、運はありません。

私の最高の結果が「®」の代わりに使用するのでは、URLを変更した後だったか、「™」私は窓-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 

画像は表示されないため、まだ問題があります。私はすでにページを完成させているので、スカンドールにこだわっていますが、この問題をシンボルで伝えることはできません。私を助けてくれますか?

答えて

0

私は思ったよりも実際には簡単でした。問題は、ディレクトリは、名前に記号ですでにあったこと、だったので、私はこのようにWindowsの-1252にそれを変更する必要があります。

$page = $_GET["page"]; 

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

その後のURLから変更を行います。

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

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の内の1つの後にエンコーディングを追加し、簡単だった:

$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; 

    } 

} 

そのように単純です。多分もっと良い方法があるかもしれませんが、これは私のために働いており、私はそれで大丈夫です。