2つのフィールド(ファイルのアップロードとテキストフィールド)を持つHTML POSTされたフォームをまとめようとしています。フォームにはファイルアップロード用のタイプmultipart/form-dataがあるため、通常のPHP $ _POST変数ではテキストフィールドにアクセスできません。テキストを取得するにはどうすればよいですか。 PHPのフォームのフィールド?
リクエストに応じて、基本的にAndrewから直接取得したコードをいくつか示します。
<html>
<body>
<form action="test2.php" method="post" enctype="multipart/form-data">
Name: <input type="text" name="imageName" />
Image: <input type="file" name="image" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
echo $_POST['imageName'];
echo "<pre>";
echo var_dump($_FILES['image']);
echo "</pre>";
?>
これがテストファイル全体です。 enctypeを削除すると、POSTされたデータは取得できますが、ファイルは取得できません。 enctypeをmultipart/form-dataとして使用すると、ファイルを取得できますが、POSTされたデータからは何も取得できません。
Enctypeを使用した出力は次のとおりです。
array(5) {
["name"]=>
string(34) "testing.png"
["type"]=>
string(0) ""
["tmp_name"]=>
string(0) ""
["error"]=>
int(1)
["size"]=>
int(0)
}
なし:
testing
NULL
どちらも同じ正確な入力。
投稿制限を確認してください。私はこれを引き起こしているものを理解しようとして頭がおかしくなりました。 Apacheエラーログを簡単に確認すると、投稿コンテンツの長さが制限を超えていることがわかりました。制限を引き上げると、投稿データが利用可能になります。
$_POST
は、テキストフィールドで問題なく機能するはずです。実際のファイルには$_FILES
を使用する必要があります。次のHTMLがあるとします。
<html>
<body>
<form action="self.php" method="post" enctype="multipart/form-data">
Name: <input type="text" name="imageName" />
Image: <input type="file" name="image" />
<input type="submit" value="Submit" />
</form>
</body>
</html>
次の方法でフィールドにアクセスできます。
<?php
echo $_POST['imageName'];
echo "<pre>";
echo var_dump($_FILES['image']);
echo "</pre>";
?>
コードに問題はありません。サーバー構成に問題がある可能性があります。
<form action="" method="post" enctype="multipart/form-data">
Name: <input type="text" name="imageName">
Image: <input type="file" name="image">
<input type="submit" value="submit">
</form>
<?php var_dump($_POST, $_FILES); ?>
スクリプト: http://sandbox.phpieceofcake.com/upload/1246558881125336.php
ソース: http://sandbox.phpieceofcake.com/upload/1246558881125336.phps
最初に示したのと同じ問題がありました。 1MB未満のファイルサイズを読み込んで試してください。ファイルをアップロードできた場合は、upload_max_filesizeとpost_max_sizeの値がこれらの値を増やしてから、もう一度試してください。これが私の問題の解決策でした。
[2010-02-13 10:57 UTC] yahoo dot comのsudeshkmr
私は同じ問題に直面し、何もうまくいきませんでした。私はApache 2.2、PHP 5.3でテストしました。また、Apache 2.2およびPHP 5.3でUbuntu(Karmic)でもテストしました。 nGinX 0.8およびPHP 5.3。
その後、回避策を見つけました。 action = ""パラメータは、ファイルアップロードフォームがあるスクリプトページ自体であってはなりません。たとえば、アップロードフォームを含むページindex.phpがあるとします。
Action = "upload.php" <--------このページは、ファイルアップロードフォームページとは異なる必要があり、PHPのすべての構成で機能します。
Actionパラメータには使用しないでください。