2012-01-20 9 views
0
の名前を変更

のHTMLサンプルコード:PHPはテキスト名を使用してディレクトリを作成し、アップロードファイル

<html> 
<body> 
<form enctype="multipart/form-data" action="upload.php" method="POST"> 
Company Name:<input type="text" name="company"/><br /> 
ClientName: <input type="text" name="ClientName"/><br /> 
<br /> 
<input type="hidden" name="MAX_FILE_SIZE" value="5120000" /> 
Send this file: <input name="userfile" type="file" /> 
<input type="submit" value="Send File" /> 
</form> 
</body> 

サンプルPHPコード:

<?php 

$file_name = $_POST['company']; 
$random_digit = rand(0000,9999); 
$new_file_name = $random_digit.$file_name; 

$uploaddir = 'c:/temp/'.$new_file_name; 
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

echo "<p>"; 
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { 
echo "File is valid, and was successfully uploaded.\n"; 
} else { 
echo "Upload failed"; 
} 

echo "</p>"; 
echo '<pre>'; 
echo 'Here is some more debugging info:'; 
print_r($_FILES); 
echo '['.$new_file_name.']'; 
print "</pre>"; 
?> 

私は名前の変更で問題が発生しています。それはファイルの名前を変更しますが、元の名前も保持します。ですから、ファイル名joey.docをアップロードすると、random#= 4567、company name = whatever、file name = joey.doc output = 4567whateverjoey.docに変わります。私が探しているのは、ファイル名をランダム番号に変更するだけです。会社に追加するのは= 4567whatever.docだけです。後で、会社名ディレクトリを作成するためのコードを記述し、その会社のすべてのファイルをそのディレクトリに保存します。位置タグをxmlに格納し、参照するためにテーブルをプルアップします。情報。私はクライアント名の入力ボックスを使用して、どのファイルに何があるのか​​をデコードします。

書き込みXMLはasp.netのC#のようなものであるならば、私はあなたが再び古い名を付加している何の問題

+0

なぜ乱数をファイル名に追加しているのですか?あなたの要件を考えれば、これを行うのは少し非論理的なようです。古いファイル名にアクセスできますか?つまり、ファイルをダウンロードしてからファイルを変更して再アップロードしていますか? –

+0

アップロードされているファイルはクライアントの顧客になります。したがって、クライアント情報ファイルを2度アップロードする必要がある場合は、ファイルの名前を変更して番号コードを付けます。ヘルスシステムHIPAAはクライアントの身元を保護します。私はそれを把握し、何らかのおかげで。 – Postonoh

+0

私は理解していないと思う。 ASP.Net C#では、設定したパスにアップロードする前にファイルの名前を変更できます。 PHPでこれを行うことはできないと思います。 – Postonoh

答えて

0

を持つべきではない:

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

あなただけの拡張子を追加したい場合は、pathinfo()を見て

0

変更この行:特に

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

basename(...)部分で文字列を操作するだけです。 基本的にあなたが気にするのは、拡張機能です...あなたのファイル名の制限と望ましい堅牢性に応じて、その答えは簡単か、ちょっと難しいかもしれません。

一例(あなたがアイデアを得る):あなたは、新しいファイル名を追加

$uploaddir = 'c:/temp/'.$new_file_name; 

:ラインで

$uploadfile = $uploaddir . '.' . split('.',basename($_FILES['userfile']['name']))[1]; 

または使用組み込み関数Pathinfo

+0

配列の参照は、現在のところRCであるPHP 5.4以降でのみ可能です。 – TimWolla

+0

ええと...それは正しいようには見えません...私はいつも[]で配列にアクセスしています – CasualT

+0

これは、拡張子の前にファイル名が '.'文字でないことを前提としています。 'pathinfo()'ははるかに信頼性が高く、誰もが*組み込み関数を愛していることを知っています。 ) – cortices

0

それが置かれるディレクトリ
しかし、この行の:

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']); 

また、アップロードされた古い名前をその文字列に追加します。 @TimWollaが提案した内容を実行して、拡張子を探したい場合はpathinfo()について調べるべきです。

+0

ありがとうございました。私はチェックしている。 – Postonoh

関連する問題