ホームページ > バックエンド開発 > PHPチュートリアル > PHP で複数のファイルのアップロードを実装する方法

PHP で複数のファイルのアップロードを実装する方法

小云云
リリース: 2023-03-22 18:42:01
オリジナル
5255 人が閲覧しました

この記事では主に、PHP で複数のファイルのアップロードを実装する方法について説明します。お役に立てれば幸いです。

PHPファイルアップロードプロセス
1. 送信ボタンをクリックすると、ブラウザユーザーはアップロードされたファイルを含むフォームデータをPHPハンドラーに送信します
2. WebサーバーとPHPプリプロセッサは、まずフォームデータのサイズがphpを超えているかどうかを判断します。 .ini 設定ファイルのpost_max_sizeオプションで設定される上限値。
これを超えると、PHP ハンドラーはフォーム データを取得できなくなり、ファイルのアップロードが失敗するだけでなく、フォーム コントロールに入力されたデータの送信も失敗します。 PHP ハンドラーの事前定義変数 $_GET、$_POST、$_FILES は空の配列になります。
制限を超えない場合、ファイルは検証のためにステップ 3 にアップロードされます。
3. フォーム内のファイルサイズがフォームの隠しフィールドMAX_FILE_SIZEで設定された上限を超えているかどうかを確認します。
この値を超えると、PHP プリプロセッサはステータス コード 2 を返し、ファイルのアップロードは失敗します。
制限を超えない場合、ファイルは検証のために手順 4 にアップロードされます。
(複数のファイルをアップロードする場合、特定のファイル アップロード ボックスによるファイル アップロードの失敗は、他のファイル アップロード ボックスのアップロード結果には影響しません)
4. フォーム内のファイルが php.ini 設定ファイル upload_max_filesize を超えていないか確認します オプションで設定する上限値です。
それを超えると、PHP プリプロセッサはステータス コード 1 を返し、ファイルのアップロードは失敗します。
制限を超えていない場合、ファイルのアップロードは検証のために手順 5 に進みます。
5. PHP でファイルのアップロードを実装するには、php.ini 設定ファイルの Upload_tmp_dir オプションで定義されたディレクトリに、アップロードされたファイルに 1 対 1 で対応する一時ファイル (デフォルトの拡張子は tmp) を作成する必要があります。アップロードが成功すると、PHP プリプロセッサはステータス コード 0 を返します。
ただし、場合によっては、暗黙の書き込み理由 (max_execution_time オプションの設定が小さすぎる、ネットワーク速度が遅いなど) により、いくつかのファイルをアップロードした後、残りのファイルがアップロードされなくなり、ファイルのアップロードが失敗することがあります。 、PHP プリプロセッサはステータス コード 3 を返します
合格した場合、ファイルは検査のためにステップ 6 にアップロードされます。
6. ファイルをアップロードするための重要な手順は、一時ファイルが消える前に、一時ファイルを Web サーバーまたはファイル サーバーに保存することです。 PHP が提供する 2 つの関数: is_uploaded_file() 関数と move_uploaded_file() 関数は、この作業の手順を完了するのに役立ちます


複数のファイルをアップロードする場合は、ファイルの内容が同じ名前で保存されることに注意してください。は次のとおりです。フォームは配列に配置されます。これらは 5 つの配列であり、3 つの配列ではなく、ファイルの 5 つのパラメーターに従って個別に保存されます。したがって、 count($_FILES[‘$myPicture’]) を直接使用すると、答えは 5 になります。

array (size=5)  'name' => 
    array (size=3)      0 => string '1.txt' (length=5)      1 => string '2.txt' (length=5)      2 => string '3.txt' (length=5)  'type' => 
    array (size=3)      0 => string 'text/plain' (length=10)      1 => string 'text/plain' (length=10)      2 => string 'text/plain' (length=10)  'tmp_name' => 
    array (size=3)      0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25)      1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25)      2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25)  'error' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  'size' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
ログイン後にコピー
ログイン後にコピー

index.php ファイル

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>
ログイン後にコピー
ログイン後にコピー

fileシステムファイル

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>
ログイン後にコピー
ログイン後にコピー

PHP ファイルのアップロード プロセス サーバーと PHP プリプロセッサは、まずフォーム データのサイズが php の

post_max_size

オプションで設定された上限を超えているかどうかを判断します。 ini設定ファイル。
これを超えると、PHP ハンドラーはフォーム データを取得できなくなり、ファイルのアップロードが失敗するだけでなく、フォーム コントロールに入力されたデータの送信も失敗します。 PHP ハンドラーの事前定義変数 $_GET、$_POST、$_FILES は空の配列になります。
制限を超えない場合、ファイルは検証のためにステップ 3 にアップロードされます。 3. フォーム内のファイルサイズがフォームの隠しフィールドMAX_FILE_SIZE
で設定された上限を超えているかどうかを確認します。
この値を超えると、PHP プリプロセッサはステータス コード 2 を返し、ファイルのアップロードは失敗します。
制限を超えない場合、ファイルは検証のために手順 4 にアップロードされます。 (複数のファイルをアップロードする場合、特定のファイル アップロード ボックスによるファイル アップロードの失敗は、他のファイル アップロード ボックスのアップロード結果には影響しません) 4. フォーム内のファイルが php.ini 設定ファイル
upload_max_filesize を超えていないか確認します
オプションで設定する上限値です。
それを超えると、PHP プリプロセッサはステータス コード 1 を返し、ファイルのアップロードは失敗します。
制限を超えていない場合、ファイルは検証のためにステップ 5 にアップロードされます。 5. PHP でファイルのアップロードを実装するには、php.ini 設定ファイルの Upload_tmp_dir オプションで定義されたディレクトリに、アップロードされたファイルに 1 対 1 で対応する一時ファイル (デフォルトの拡張子は tmp) を作成する必要があります。アップロードが成功すると、PHP プリプロセッサはステータス コード 0 を返します。 ただし、場合によっては、暗黙の書き込み理由 (max_execution_time オプションの設定が小さすぎる、ネットワーク速度が遅いなど) により、いくつかのファイルをアップロードした後、残りのファイルがアップロードされなくなり、ファイルのアップロードが失敗することがあります。 、PHP プリプロセッサはステータス コード 3 を返します
合格した場合、ファイルは検査のためにステップ 6 にアップロードされます。
6. ファイルをアップロードするための重要な手順は、一時ファイルが消える前に、一時ファイルを Web サーバーまたはファイル サーバーに保存することです。 PHP が提供する 2 つの関数:
is_uploaded_file()
関数と
move_uploaded_file()
関数は、このステップを完了するのに役立ちます


複数のファイルをアップロードする場合、同じ名前で保存されたファイルの内容が以下の形で配列に配置されることに注意してください。これらは 5 つの配列であり、3 つの配列ではなく、ファイルの 5 つのパラメーターに従って個別に保存されます。したがって、 count($_FILES[‘$myPicture’]) を直接使用すると、答えは 5 になります。

array (size=5)  &#39;name&#39; => 
    array (size=3)      0 => string &#39;1.txt&#39; (length=5)      1 => string &#39;2.txt&#39; (length=5)      2 => string &#39;3.txt&#39; (length=5)  &#39;type&#39; => 
    array (size=3)      0 => string &#39;text/plain&#39; (length=10)      1 => string &#39;text/plain&#39; (length=10)      2 => string &#39;text/plain&#39; (length=10)  &#39;tmp_name&#39; => 
    array (size=3)      0 => string &#39;D:\wamp64\tmp\phpC5E8.tmp&#39; (length=25)      1 => string &#39;D:\wamp64\tmp\phpC5E9.tmp&#39; (length=25)      2 => string &#39;D:\wamp64\tmp\phpC5EA.tmp&#39; (length=25)  &#39;error&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  &#39;size&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
ログイン後にコピー
ログイン後にコピー

index.php ファイル

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>
ログイン後にコピー
ログイン後にコピー

fileSystem file

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>
ログイン後にコピー
ログイン後にコピー

関連推奨事項: 複数ファイルのアップロードを実装するための

php3.2

複数ファイルのアップロードを実装するための PHP のメソッド 分析例

例 PHP の単一ファイルと複数ファイルのアップロードを分析する

以上がPHP で複数のファイルのアップロードを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート