2012-03-05 4 views
1

私は、ディレクトリ内のすべてのファイルをリストするコードを持っています。それはecho "some.php?file=".$image;は私が独自に各ファイルを識別し、次のページに$ _GETや$ _POSTか何かでそれを転送する必要があると述べているリンク部分でディレクトリ内の一意のファイルを識別する方法は?

//path to directory to scan 
$directory = "../images/team/harry/"; 

//get all image files with a .jpg extension. 
$images = glob($directory . "*.jpg"); 

//print each file name 
foreach($images as $image) 
{ 
    echo "some.php?file=".$image; 
} 

:コードは次のようになります。ただし、ファイル名には、FTPによってユーザーがアップロードする特殊文字(発音区別符号)やスペースなどが含まれている場合があります。次のページでそれらを特定するにはどうすればよいでしょうか? IDのようなもの、おそらくbase64_encode/decodeまたは類似のもの? (単純にカウンタを使用すると、ファイルが誤った結果になる可能性があるため、確実に削除されない可能性があります)

+0

あなたはデータベースを作成し、自動的に更新します。 cronjobでまたはあなたはurlencodeと一緒にbase64をやっています;) – androidavid

答えて

2

Base64では、おそらくうまくトリックを行うだろう:

echo "some.php?file=".base64_encode($image); 

とGETクエリを受け取るページ上:

$image=base64_decode($_GET['file']); 

もう一つの提案では、ユーザーのアップロードしたファイルにデータベースを使用することです。アップロード時に、各画像は、IDの例列とファイル名とともにDBに格納されます。次に、そのIDにGET varを割り当てるだけで、指定したIDからファイル名を取得することができます。

1

要求されたファイルが存在しない可能性が常にあります。最初にmd5文字列を生成して渡すことをお勧めします。おそらく、生成された文字列が存在するかどうかを調べて、それが利用可能であることを確認する必要があります。それ以外の場合は、単純な8文字の数字で十分であり、アップロード時に指定する必要があります。ファイルが削除された場合、some.phpはユーザーにエラーを表示するはずです。

base64の使用を検討してからsome.phpで再度デコードすることは考えません。 URLは非常に長くコピーされ、セキュリティ上の問題が発生する可能性がありますが、PHPがそれらを防ぐことを願っています。また、ユーザーが誤ってbase64を変更して、一見無作為に生成された画像で終わるほどURLは扱いにくいです...

+0

ファイルはFTPによってアップロードされるので、ファイル名についての制御はなく、アップロード時に任意の関数を呼び出すことはできません...残念なことに... – Michal

+0

一意のファイル名(それらは同じディレクトリ内になければならない)であれば、md5オプションを使用します。 –

関連する問題