最近、書籍「HeadFirst PHP & MySQL」の第 5 章「ファイルに保存されたデータの使用」を勉強していて、ファイル アップロード アプリケーションを作成するときにエラーが発生しました。つまり、ファイルを正常にアップロードできませんでした。この問題は長い間私を悩ませてきましたが、幸いなことに、最終的には解決されました。原因は、アップロードした画像ファイルのサイズが、HTML フォームの MAX_FILE_SIZE オプションで指定した値 32768Bytes (32KB) を超えているため、アップロードが成功しないためです。
XAMPP (Apache + MySQL + PHP + Perl) 統合開発パッケージと Zend を使用しました Studio 10.6 は PHP IDE 開発環境として使用されます。また、PHP デバッグには XDebug を使用しました。Zend Studio 10.6 での設定には、ブログ投稿「Zend Studio 10.5 および XDebug Debugging Drupal Source Code (1)」を参照しました。 )
addscore.php の PHP コードは次のとおりです:
れーれースクリーンショットは次のとおりです:
その後、$_FILES["screenshot']['error'] が 2 であることを確認しました。オンラインで確認したところ、$_FILES スーパー グローバル変数はおおよそ次のとおりであることがわかりました。
PHP プログラミング言語における $_FILES システム関数の一般的な使用法は次のとおりです。 $_FILES['myFile']['name'] は、クライアント ファイルの元の名前を表示します。 $_FILES['myFile']['type'] ファイルの MIME タイプ (例: "image/gif")。 $_FILES['myFile']['size'] アップロードされたファイルのサイズ (バイト単位)。 $_FILES['myFile']['tmp_name'] は保存される一時ファイルの名前で、通常はシステムのデフォルトです。 $_FILES['myFile']['error'] ファイルアップロードに関するエラーコードです。さまざまなコードの意味は次のとおりです。 0; ファイルは正常にアップロードされました。 1; ファイル サイズが php.ini でシステムによって設定されたサイズを超えています。 2; ファイルサイズを超えました MAX_FILE_SIZE オプションで指定された値。 3; ファイルの一部のみがアップロードされました。 4; ファイルはアップロードされませんでした。 5; アップロードされたファイルのサイズは 0 です。
れーれー
例
例 #1 複数のファイルをアップロードする
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Guitar Wars - Add Your High Score</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <h2>Guitar Wars - Add Your High Score</h2> <?php require_once 'appvars.php'; require_once 'connectvars.php'; if (isset($_POST['submit'])) { // Grab the score data from the POST $name = $_POST['name']; $score = $_POST['score']; $screenshot = $_FILES['screenshot']['name']; // echo "name: $name <br />"; // echo "score: $score <br />"; // echo "screenShot: $screenshot <br />"; if (!empty($name) && !empty($score) && !empty($screenshot)) { // Move the file to the target upload folder $target = GW_UPLOADPATH . $screenshot; echo json_encode($_FILES); if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) { // Connect to the database $dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die('Error Connecting to MySQL Database!'); // Write the data to the database $query = "INSERT INTO guitarwars VALUES (0, NOW(), '$name', '$score','$screenshot')"; mysqli_query($dbc, $query) or die('Error querying database;'); // Confirm success with the user echo '<p>Thanks for adding your new high score!</p>'; echo '<p><strong>Name:</strong> ' . $name . '<br />'; echo '<strong>Score:</strong> ' . $score; echo '<img src="http://blog.csdn.net/ccf19881030/article/details/' . GW_UPLOADPATH . $screenshot . '" alt="Score image" /></p>'; echo '<p><< Back to high scores</p>'; // Clear the score data to clear the form $name = ""; $score = ""; $screenshot = ""; mysqli_close($dbc); } } else { echo '<p class="error">Please enter all of the information to add your high score.</p>'; } } ?> <hr /> </body> </html>原因は、32768Bytes または 32KB を超える Penguins.jpg ファイルをアップロードしたためで、エラー $_FILES['screenshot']['error'] が 2 になり、$_FILES['screenshot'] が発生しました。 ][ 'tmp_name'] は空です、move_uploaded_file($_FILES['スクリーンショット']['tmp_name'], $target) 関数は、呼び出されると FALSE を返します。 if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) { ...