0

関数について学んでいますurlencode。これをファイル名に使用することは可能ですか? では、ファイルをサーバーにアップロードし、後でそのファイル名を使用すると、それを URL で使用できますか?

$promotionpicture=$_FILES["promotionpicture"]["name"];
$promotionpicture=rawurlencode($promotionpicture);

じゃあ後で...

$imagesource="http://mysite.com/".$userID."/".$promotionpicture;

私はこれをやろうとしていますが、画像に移動するたびに、サーバーから「Bad request」を受け取ります。使用すべき特定の php エンコード関数はありますか? それとも、これはすべて間違っていますか?よろしくお願いします。

4

2 に答える 2

0

urlencodeおよび同様の関数は、HTTP対応のURLを作成するためのものです。通常のファイル名を保持し、img srcを出力するときは、urlencodeを使用します。

ファイル名の重複やその他のセキュリティ問題が発生する可能性があるため、これは実際には好ましい方法ではないことに注意してください。uuidやタイムスタンプなどを使用してファイル名を生成することをお勧めします。そうすれば、これらのタイプの問題を回避できます。

于 2012-10-26T18:03:33.460 に答える
0

写真は、他のファイルと同様に、実際には単なる生データです。あなたがしていることのようなことをすることは可能ですが、必ずしもお勧めできません。

そのようなことをしたい場合は、代わりに特殊文字を削除することをお勧めします。

$newfilename=preg_replace('/[^a-zA-Z0-9.]/','',$filename);

(文字と数字を除くすべての文字に一致する正規表現から)

そうは言っても、他の人が言ったことを覚えておいてください。ファイル名の競合をどのように処理しますか? 画像はどこに、どのように保存されますか?

これをより堅牢に行う簡単な方法の 1 つは、元のファイル名と MD5 ハッシュをデータベースに格納することです。名前ではなくハッシュでファイルを保存し、データベースを使用して元の名前を MD5 と照合してファイルを取得するスクリプトを記述します。ファイルの種類を保存すると、正しいヘッダーを発行できます。ユーザーがファイルをダウンロードするか、それを使用して Web ページに埋め込むと、元の名前が保持されるか、それぞれ期待どおりに表示されます。

于 2012-10-26T18:10:14.827 に答える