2009-07-22 13 views
0

1.私は、ファイルをディレクトリにアップロードする内部使用ファイルアップロードスクリプトを持っています。名前にspaceを使用してコンピュータから何かをアップロードすると(例:1.zip)、名前にスペースが含まれてアップロードされ、メール内のリンクが強制終了されます。アップロード時にスペースを削除するか、アンダースコアにすることは可能ですか?ファイル名のスペースを削除apache

私が抱えている2番目の問題は、リンクを電子メールの本体としてのファイルのURLと電子メールのリンクにするにはどうすればよいでしょうか?

if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $_FILES['file']['name'])) { 
    // uploaded file was moved and renamed succesfuly. Display a message. 
    echo "Link: " . "http://example.org/" . $_FILES["file"]["name"]; 

答えて

7

は、あなたは自分のファイル名をurlencode()する必要があり、すべてが正常である:

echo "Link: http://example.org/" . urlencode($_FILES["file"]["name"]); 

しかし、あなたは別の理由のためにスペースを削除したい場合は、使用することができますstr_replace()

$replaced_name = str_replace(' ', '_', $_FILES["file"]["name"]); 
rename($uploaddir . '/' . $_FILES['file']['name'], $uploaddir . '/' . $replaced_name); 
# You should urlencode() it nonetheless: 
echo "Link: http://example.org/" . urlencode($replaced_name); 
+0

どうすればリンクが本文に入り、何でもメッセージに入るようなmailtoとしてそのリンクを使うことができます – hnhh

+0

RFC:http:// toolsの例のセクションを見てください.ietf.org/html/rfc2368#section-6 – soulmerge

+0

おかげさまで本当に役に立ちました –

1

試行:

$filename = $_FILES['file']['name']; 
$filename = preg_replace("/[^a-zA-Z0-9]/", "", $filename); 

//then 
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $filename)) { 

// uploaded file was moved and renamed succesfuly. Display a message. 
echo "Link: " . "http://example.org/" . $filename; 
+0

ありがとう!どのように私は物事のような電子メールを行う方法についての任意の – hnhh

+0

あなたは電子メールのためのこのリンクを送信したいですか? – Nathan

+0

基本的には、リンクに本文テキストを含むmailto:[email protected]をエコーし​​ます。 – hnhh

1

注:使用しているコードでは、同じ名前の2つのファイルがアップロードされているとどうなりますか?チェックを行わないと(「?に既に「にその名前のファイルがあります」など)、2番目のファイルが最初のファイルに置き換わります。

あなたが望むものではないかもしれません...それは?

解決しない場合は、アップロードされたファイルの名前を常に変更し、名前がにすることです。 (シンプルカウンタでしょう、おそらくトリックへ)

もう一つは、次のとおりです。$_FILES["file"]["name"]はクライアントによって送信され、そして、のような、おそらく誰かが望むものは何でも含まれているために偽造することができます。それに「../../index.php(またはこのようなもの - あなたが考えている)のようなものが含まれていると、誰かがあなたのサーバー上に任意のファイルを置くことができます。

これを防ぐには、宛先として使用されるファイル名/パスにmove_uploaded_fileが「危険」でないことを確認してください。解決方法はbasenameです。 (例:POST method uploadsの例#2を参照してください)

アップロードされたファイルのMIMEタイプをチェックして、実行ファイルを取得しないようにすることもできます。アップロードされたファイルがウェブサーバによって実行可能である。

関連する問題