目次
范例
ホームページ バックエンド開発 PHPチュートリアル PHP アップロード ファイルが最大ファイル制限を超えているため、正常にアップロードできません

PHP アップロード ファイルが最大ファイル制限を超えているため、正常にアップロードできません

Jun 13, 2016 pm 12:01 PM
gt lt name quot screenshot

PHP によってアップロードされたファイルがファイルの最大制限を超えているため、正常にアップロードできません

現在、書籍「HeadFirst PHP & MySQL」の第 5 章「ファイルに保存されたデータの使用」を学習し、ファイルを実行しています。アップロードを申請する際にエラーが発生し、ファイルを正常にアップロードできませんでした。この問題は長い間私を悩ませてきましたが、幸いなことに、最終的には解決されました。原因は、アップロードした画像ファイルのサイズが、HTML フォームの MAX_FILE_SIZE オプションで指定した値 32768Bytes (32KB) を超えているため、アップロードが成功しないためです。

PHP IDE 開発環境として XAMPP (Apache + MySQL + PHP + Perl) 統合開発パッケージと Zend Studio 10.6 を使用しました。また、PHP のデバッグには XDebug を使用しました。 Zend Studio10 .6 で Xdebug の PHP デバッグ環境を構成するには、ブログ投稿「Zend Studio 10.5 および XDebug Debugging | Zend Debugger Explaining Drupal Source Code (1)」を参照しました。

対応するファイルアップロード例 PHP コード addscore.php は次のとおりです:

<!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;];        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="&#39; . GW_UPLOADPATH . $screenshot . &#39;" alt="Score image" /></p>&#39;;		echo &#39;<p><a href="index.php"><< Back to high scores</a></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 />  <form method="post" enctype="multipart/form-data" action="<?php echo $_SERVER[&#39;PHP_SELF&#39;]; ?>">  	<input type="hidden" name="MAX_FILE_SIZE" value="32768" />    <label for="name">Name:</label>    <input type="text" id="name" name="name" value="<?php if (!empty($name)) echo $name; ?>" /><br />    <label for="score">Score:</label>    <input type="text" id="score" name="score" value="<?php if (!empty($score)) echo $score; ?>" /><br />    <label for="screeshot">ScreenShot</label>    <input type="file" id="screenshot" name="screenshot" />    <hr />    <input type="submit" value="Add" name="submit" />  </form></body> </html>
ログイン後にコピー

Zend を使用する場合Sutdio10. 6. ブレークポイントを設定して上記の PHP コードをデバッグすると、「if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) {」行のコード ブロックが実行されていないことがわかりました。そこで、次のように、スーパー グローバル変数 $_FILES['screenshot']['tmp_name'] の値が空であることを確認し、このコード行の前に $_FILES 変数の値を JSON 形式で出力します。
{"screenshot":{"name":"Penguins.jpg","type":"","tmp_name":"","error":2,"size":0}}
ログイン後にコピー

対応する実行中のスクリーンショットは次のとおりです:


その後、$_FILES['screenshot']['error'] が 2 であることを確認し、$_FILES スーパー グローバルの概要をオンラインで確認しました。変数 はおおよそ次のとおりです。

$_FILES システム関数の一般的な使用法PHP プログラミング言語では次のようになります。

$_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。


另外,查询PHP参考手册关于move_uploaded_file函数的介绍如下:

move_uploaded_file(PHP 4 >= 4.0.3, PHP 5)move_uploaded_file — 将上传的文件移动到新位置说明bool move_uploaded_file ( string $filename , string $destination )本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。 这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。 参数filename上传的文件的文件名。 destination移动文件到这个位置。 返回值成功时返回 TRUE。 如果 filename 不是合法的上传文件,不会出现任何操作, move_uploaded_file() 将返回 FALSE。 如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作, move_uploaded_file() 将返回 FALSE。此外还会发出一条警告。 
ログイン後にコピー

范例

Example #1 Uploading multiple files

<?php$uploads_dir = &#39;/uploads&#39;;foreach ($_FILES["pictures"]["error"] as $key => $error) {    if ($error == UPLOAD_ERR_OK) {        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];        $name = $_FILES["pictures"]["name"][$key];        move_uploaded_file($tmp_name, "$uploads_dir/$name");    }}?> 
ログイン後にコピー
原因终于找到了,是因为我上传了一个超过32768Bytes即32KB大小的Penguins.jpg文件导致出现$_FILES['screenshot']['error']为2的错误,并且$_FILES['screenshot']['tmp_name']为空,move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)函数调用时返回FALSE,if (move_uploaded_file($_FILES['screenshot']['tmp_name'], $target)) { 
  ...
 }代码块没有执行。



     

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Huawei GT3 ProとGT4の違いは何ですか? Huawei GT3 ProとGT4の違いは何ですか? Dec 29, 2023 pm 02:27 PM

多くのユーザーはスマートウォッチを選ぶときにファーウェイブランドを選択しますが、その中でもファーウェイ GT3pro と GT4 は非常に人気のある選択肢であり、多くのユーザーはファーウェイ GT3pro と GT4 の違いに興味を持っています。 Huawei GT3pro と GT4 の違いは何ですか? 1. 外観 GT4: 46mm と 41mm、材質はガラスミラー + ステンレススチールボディ + 高解像度ファイバーバックシェルです。 GT3pro: 46.6mm および 42.9mm、材質はサファイアガラス + チタンボディ/セラミックボディ + セラミックバックシェルです。 2. 健全な GT4: 最新の Huawei Truseen5.5+ アルゴリズムを使用すると、結果はより正確になります。 GT3pro: ECG 心電図と血管と安全性を追加

修正: Windows 11 で Snipping ツールが機能しない 修正: Windows 11 で Snipping ツールが機能しない Aug 24, 2023 am 09:48 AM

Windows 11 で Snipping Tool が機能しない理由 問題の根本原因を理解すると、適切な解決策を見つけるのに役立ちます。 Snipping Tool が正しく動作しない主な理由は次のとおりです。 フォーカス アシスタントがオンになっている: これにより、Snipping Tool が開かなくなります。破損したアプリケーション: 起動時にスニッピング ツールがクラッシュする場合は、破損している可能性があります。古いグラフィック ドライバー: 互換性のないドライバーは、スニッピング ツールに干渉する可能性があります。他のアプリケーションからの干渉: 実行中の他のアプリケーションが Snipping Tool と競合する可能性があります。証明書の有効期限が切れています: アップグレード プロセス中のエラーにより、この問題が発生する可能性があります。これらの簡単な解決策は、ほとんどのユーザーに適しており、特別な技術知識は必要ありません。 1. Windows および Microsoft Store アプリを更新する

iPhoneでApp Storeに接続できないエラーを修正する方法 iPhoneでApp Storeに接続できないエラーを修正する方法 Jul 29, 2023 am 08:22 AM

パート 1: 最初のトラブルシューティング手順 Apple のシステムステータスを確認する: 複雑な解決策を掘り下げる前に、基本から始めましょう。問題はデバイスにあるのではなく、Apple のサーバーがダウンしている可能性があります。 Apple のシステム ステータス ページにアクセスして、AppStore が適切に動作しているかどうかを確認してください。問題があれば、Apple が修正してくれるのを待つしかありません。インターネット接続を確認します。「AppStore に接続できません」問題は接続不良が原因である場合があるため、安定したインターネット接続があることを確認してください。 Wi-Fi とモバイル データを切り替えるか、ネットワーク設定をリセットしてみてください ([一般] > [リセット] > [ネットワーク設定のリセット] > [設定])。 iOS バージョンを更新します。

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

スクリーンショットってどのフォルダにあるのでしょうか? スクリーンショットってどのフォルダにあるのでしょうか? Feb 27, 2023 am 10:48 AM

スクリーンショットはゲームのスクリーンショット専用のフォルダです。スクリーンショットを撮るには F12 を使用できます。デフォルトは bmp 形式です。bmp 形式は Windows オペレーティング システムの標準画像ファイル形式であり、さまざまな Windows アプリケーションでサポートされています。

watch4proとGTのどちらが優れていますか? watch4proとGTのどちらが優れていますか? Sep 26, 2023 pm 02:45 PM

Watch4proとgtはそれぞれ特徴や適用シーンが異なりますが、総合的な機能、高性能、スタイリッシュな外観を重視し、価格は高くてもいいという方にはWatch 4 Proの方が適しているかもしれません。高度な機能要件はなく、バッテリー寿命と手頃な価格を重視する場合は、GT シリーズの方が適しているかもしれません。最終的な選択は、個人のニーズ、予算、好みに基づいて決定する必要がありますが、購入する前に自分のニーズを慎重に検討し、さまざまな製品のレビューや比較を参照して、より情報に基づいた選択を行うことをお勧めします。

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 Mar 21, 2024 pm 10:31 PM

iPadOS 17.4 で iPad のバッテリー寿命を最適化する方法 バッテリー寿命の延長はモバイル デバイス エクスペリエンスの鍵であり、iPad がその良い例です。 iPad のバッテリーの消耗が早すぎると感じても、心配しないでください。iPadOS 17.4 には、デバイスの実行時間を大幅に延長できるトリックや微調整が多数あります。この詳細なガイドの目的は、情報を提供するだけではなく、iPad の使用方法を変え、全体的なバッテリー管理を強化し、充電せずにデバイスをより長く使用できるようにすることです。ここで概説したプラクティスを採用することで、個人のニーズや使用パターンに合わせてテクノロジーをより効率的かつ意識的に使用するための一歩を踏み出すことができます。主要なエネルギー消費者を特定する

php が名前を取得できない場合はどうすればよいですか? php が名前を取得できない場合はどうすればよいですか? Nov 24, 2022 am 09:56 AM

form要素のnameとidの値が異なるとブラウザが認識できないため、PHPが名前を取得できない 解決策: 1. 一部のform要素やframe要素がnameを使用していないか確認する; 2. 取得できる要素のみを確認するID は割り当てられますが、名前は割り当てられません; 3. 複数選択ボックスのチェックボックスでは、「join(',', $__POST['name'])」を使用してデータを形成できます。

See all articles