PHPでファイル(pdf)をアップロードしたいのですが、
インターネットでコードを見つけ、ファイルのタイプを追加しただけです: application/pdf が、pdf ファイルでは機能しませんでした。(画像では問題なく動作します)。
htmlコード
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="Submit">
</form>
phpコード
$allowedExts = array("gif", "pdf", "GIF", "jpeg", "JPEG", "jpg", "JPG", "png", "PNG");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "application/pdf")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 90000000000) // increased allowed size may be your problem
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
エラーは
Invalid file
*
アップデート
*
var_dump($_FILES['file']);
スクリプトの先頭に追加した後
クロム(正常に動作します)では、出力は次のとおりです。
array
'name' => string 'Nouveau Document Microsoft Office Word.pdf' (length=42)
'type' => string 'application/pdf' (length=15)
'tmp_name' => string 'C:\wamp\tmp\php58AD.tmp' (length=23)
'error' => int 0
'size' => int 79770
Upload: Nouveau Document Microsoft Office Word.pdf
Type: application/pdf
Size: 77.900390625 kB
Temp file: C:\wamp\tmp\php58AD.tmp
firfoxでは、出力は機能しませんでした
array
'name' => string 'Nouveau Document Microsoft Office Word.pdf' (length=42)
'type' => string 'application/force-download' (length=26)
'tmp_name' => string 'C:\wamp\tmp\phpBEFD.tmp' (length=23)
'error' => int 0
'size' => int 79770
string 'application/force-download' (length=26)
Update2
*$_FILES["file"]["type"]を除いたコード*
var_dump($_FILES["file"]["type"]);
$allowedExts = array("gif","pdf", "GIF");
$extension = end(explode(".", $_FILES["file"]["name"]));
in_array($extension, $allowedExts);
echo "Upload: " . $_FILES["file"]["name"] . "<br>";
echo "Type: " . $_FILES["file"]["type"] . "<br>";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
すべてのブラウザーで問題なく動作しましたが、ファイルの種類とサイズをテストする必要があります。そして何が問題だったのですか?