ホームページ >バックエンド開発 >PHPチュートリアル >PHP はファイルを正常にアップロードできません。$_FILES['screenshot']['tmp_name'] は空です_PHP チュートリアル

PHP はファイルを正常にアップロードできません。$_FILES['screenshot']['tmp_name'] は空です_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:22:37888ブラウズ

PHP はファイルを正常にアップロードできません。$_FILES['screenshot']['tmp_name'] が空です

最近、書籍「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 コードは次のとおりです:

れーれー
Zend Sutdio10.6 を使用して上記の PHP コードをデバッグすると、「if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) {」行のコード ブロックが実行されていないことがわかりました。スーパー グローバル変数 $_FILES['screenshot']['tmp_name'] の値が空であることを確認し、次のように、このコード行の前に $_FILES 変数の値を JSON 形式で出力します。

リーリー

スクリーンショットは次のとおりです:


その後、$_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 です。


さらに、次のように move_uploaded_file 関数の導入については、PHP リファレンス マニュアルを確認してください。

れーれー


例 #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 &#39;appvars.php&#39;;
  require_once &#39;connectvars.php&#39;;
		
  if (isset($_POST[&#39;submit&#39;])) {
    // Grab the score data from the POST
    $name = $_POST[&#39;name&#39;];
    $score = $_POST[&#39;score&#39;];
    $screenshot = $_FILES[&#39;screenshot&#39;][&#39;name&#39;];
    
//     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[&#39;screenshot&#39;][&#39;tmp_name&#39;], $target)) { 
      	// Connect to the database
		$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) 
		    or die(&#39;Error Connecting to MySQL Database!&#39;);

		// Write the data to the database
		$query = "INSERT INTO guitarwars VALUES (0, NOW(), &#39;$name&#39;, &#39;$score&#39;,&#39;$screenshot&#39;)";
		mysqli_query($dbc, $query) or die(&#39;Error querying database;&#39;);

		// Confirm success with the user
		echo &#39;<p>Thanks for adding your new high score!</p>&#39;;
		echo &#39;<p><strong>Name:</strong> &#39; . $name . &#39;<br />&#39;;
		echo &#39;<strong>Score:</strong> &#39; . $score;
		echo &#39;<img src="http://blog.csdn.net/ccf19881030/article/details/' . GW_UPLOADPATH . $screenshot . '" alt="Score image" /></p>&#39;;
		echo &#39;<p><< Back to high scores</p>&#39;;

		// Clear the score data to clear the form
		$name = "";
		$score = "";
		$screenshot = "";

		mysqli_close($dbc);
      }
    }
    else {
      echo &#39;<p class="error">Please enter all of the information to add your high score.</p>&#39;;
    }
  }
?>

  <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)) {

...
}コード ブロックは実行されませんでした。



http://www.bkjia.com/PHPjc/847869.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/847869.html技術記事 PHP でファイルをアップロードすると、$_FILES[#39;screenshot#39;][#39;tmp_name#39;] が空になります。最近、書籍「HeadFirst PHP MySQL」の第 5 章「ストレージの使用」を学習しました。ファイル「データ」内...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。