Php-file-uploading

提供:Dev Guides
移動先:案内検索

PHP-ファイルのアップロード

PHPスクリプトをHTMLフォームで使用して、ユーザーがサーバーにファイルをアップロードできるようにすることができます。 最初に、ファイルは一時ディレクトリにアップロードされ、PHPスクリプトによってターゲットの宛先に再配置されます。

*phpinfo.php* ページの情報は、ファイルのアップロードに使用される一時ディレクトリを *upload_tmp_dir* として説明し、アップロード可能なファイルの最大許容サイズは *upload_max_filesize* として示されています。 これらのパラメーターは、PHP構成ファイル *php.ini* に設定されます

ファイルをアップロードするプロセスは、次の手順に従います-

  • ユーザーは、テキストファイル、参照ボタン、および送信ボタンを備えたHTMLフォームを含むページを開きます。
  • ユーザーは参照ボタンをクリックし、ローカルPCからアップロードするファイルを選択します。
  • 選択したファイルへのフルパスがテキストフィールドに表示され、ユーザーが送信ボタンをクリックします。
  • 選択したファイルは、サーバー上の一時ディレクトリに送信されます。
  • フォームのアクション属性でフォームハンドラーとして指定されたPHPスクリプトは、ファイルが到着したことを確認し、ファイルを目的のディレクトリにコピーします。
  • PHPスクリプトは、ユーザーに成功を確認します。

通常、ファイルを書き込むときは、一時的な場所と最終的な場所の両方に、ファイルの書き込みを可能にするアクセス許可を設定する必要があります。 いずれかが読み取り専用に設定されている場合、プロセスは失敗します。

アップロードされたファイルは、テキストファイル、画像ファイル、または任意のドキュメントです。

アップロードフォームを作成する

以下の次のHTMコードは、アップローダーフォームを作成します。 このフォームのmethod属性は post に設定されており、enctype属性は multipart/form-data に設定されています

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

      $extensions= array("jpeg","jpg","png");

      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }

      if($file_size > 2097152){
         $errors[]='File size must be excately 2 MB';
      }

      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>

      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image"/>
         <input type="submit"/>
      </form>

   </body>
</html>

それは次の結果を生成します-

アップロードフォーム

アップロードスクリプトの作成

*$ _ FILES* という1つのグローバルPHP変数があります。 この変数は関連する2次元配列であり、アップロードされたファイルに関連するすべての情報を保持します。 したがって、アップロードフォームで入力のname属性に割り当てられた値が *file* の場合、PHPは次の5つの変数を作成します-
  • $ _ FILES ['file'] ['tmp_name'] -Webサーバーの一時ディレクトリにアップロードされたファイル。
  • $ _ FILES ['file'] ['name'] -アップロードされたファイルの実際の名前。
  • $ _ FILES ['file'] ['size'] -アップロードされたファイルのバイト単位のサイズ。
  • $ _ FILES ['file'] ['type'] -アップロードされたファイルのMIMEタイプ。
  • $ _ FILES ['file'] ['error'] -このファイルのアップロードに関連するエラーコード。

以下の例では、画像のアップロードを許可し、アップロードされたファイル情報として結果を返します。

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $file_name = $_FILES['image']['name'];
      $file_size = $_FILES['image']['size'];
      $file_tmp = $_FILES['image']['tmp_name'];
      $file_type = $_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));

      $extensions= array("jpeg","jpg","png");

      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed, please choose a JPEG or PNG file.";
      }

      if($file_size > 2097152) {
         $errors[]='File size must be excately 2 MB';
      }

      if(empty($errors)==true) {
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>
<html>
   <body>

      <form action = "" method = "POST" enctype = "multipart/form-data">
         <input type = "file" name = "image"/>
         <input type = "submit"/>

         <ul>
            <li>Sent file: <?php echo $_FILES['image']['name'];  ?>
            <li>File size: <?php echo $_FILES['image']['size'];  ?>
            <li>File type: <?php echo $_FILES['image']['type'] ?>
         </ul>

      </form>

   </body>
</html>

それは次の結果を生成します-

スクリプトのアップロード