2011-03-27 19 views
10

エンドユーザがアップロードしたファイル(特に.csv)のレコードでデータベース(MySQL)を更新するためのファイルをアップロードできるようにするフォーム(HTML、PHP)があります。しかし、phpscriptでは、ファイル名を取得するだけで、ファイルの完全なパスは取得できません。 fopen()はこの理由で失敗します。誰も私に完全な経路を見つけるためにどのように作業できるか教えてください。アップロードされたファイルの完全なPATHを取得する - PHP

HTMLコード:

<html> 
<head> 
</head> 
<body> 
<form method="POST" action="upload.php" enctype="multipart/form-data"> 
    <p>File to upload : <input type ="file" name = "UploadFileName"></p><br /> 
    <input type = "submit" name = "Submit" value = "Press THIS to upload"> 
</form> 
</body> 
</html> 

PHPスクリプト:

<?php 
    ..... 
...... 
    $handle = fopen($_FILES["UploadFileName"]["name"], "r"); # fopen(test.csv) [function.fopen]: failed to open stream: No such file or directory 
?> 
+0

これは便利な良い質問です。 –

答えて

25

nameクライアント側上のファイル名を指します。 サーバー側に(フルパスを含む)ファイル名を取得するには、tmp_nameを使用する必要があります。

$handle = fopen($_FILES["UploadFileName"]["tmp_name"], 'r'); 
3

$handle = fopen($_FILES["UploadFileName"]["tmp_name"], 'r'); 
3
$target='uploads/'.basename($_FILES['UploadFileName']['name']); 

if(move_uploaded_file($_FILES['UploadFileName']['tmp_name'],$target)) { 

    //Insert into your db 

    $fp = fopen($target, "r"); 
} 
2

、次のコードを使用して、私はこのように書いています:

$filePath = realpath($_FILES["file"]["tmp_name"]); 

これは私にPHPでアップロードされたファイルのフルパスを与えました。あなたは、ファイルのダウンロード中に0バイトの問題を見つけた場合は、ちょうど$ filePathには、ハンドルだけを提出しないファイルへの絶対パスでなければなりません。この

header("Content-Length: ".filesize($filePath)); 

のようなこのコンテンツ-な長さのラインを変更します。

関連する問題