ホームページ  >  記事  >  バックエンド開発  >  PHP でファイルのアップロードを処理するにはどうすればよいですか?

PHP でファイルのアップロードを処理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-05-11 22:31:341926ブラウズ

インターネット技術の継続的な発展に伴い、ファイルのアップロード機能は多くの Web サイトで不可欠な部分になりました。 PHP 言語では、いくつかのクラス ライブラリと関数を通じてファイルのアップロードを処理できます。この記事では、PHP でのファイルのアップロード処理方法に焦点を当てます。

1. フォーム設定

HTML フォームでは、ファイルのアップロードをサポートするために enctype 属性を「multipart/form-data」に設定する必要があります。コードは次のとおりです。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>

このうち、input タグの type 属性は「file」、name 属性はアップロードするファイルの名前を指定する「file」です。

2. PHP ファイルのアップロード処理

PHP では、$_FILES グローバル変数を使用してファイルのアップロードを処理できます。フォームにアップロードされたファイルの名前が「file」であるとすると、PHP では、$_FILES['file'] を通じてアップロードされたファイルの情報を取得できます。

$_FILES 配列には 5 つの要素が含まれます。

  1. name: アップロードされたファイルの名前。
  2. type: アップロードされたファイルのタイプ。
  3. tmp_name: アップロードされたファイルの一時ストレージ パス。
  4. error: ファイルのアップロード時のエラー コード。
  5. size: アップロードされたファイルのサイズ (バイト単位)。

次に、move_uploaded_file() 関数を使用して、アップロードされたファイルを指定したフォルダーに移動します。コードは次のとおりです。

$target_dir = "uploads/";   //上传文件的目标文件夹
$target_file = $target_dir . basename($_FILES["file"]["name"]);   //上传文件的完整路径
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
    echo "文件上传成功!";
} else {
    echo "文件上传失败!";
}

上記のコードでは、$target_dir 変数はアップロードされたファイルのターゲット フォルダーを指定し、$target_file 変数にはアップロードされたファイルのフル パスが含まれています。 move_uploaded_file() 関数を使用して、一時ファイルを指定したディレクトリに移動できます。移動が成功した場合は true を返し、そうでない場合は false を返します。

ファイルをアップロードするとき、ファイルのセキュリティを確保するために、アップロードされたファイルに対して特定のチェックとフィルターを実行する必要があります。たとえば、is_uploaded_file() 関数を使用して、アップロードされたファイルが本当にクライアントからのものであるかどうかを確認できます。コードは次のとおりです。

if(is_uploaded_file($_FILES['file']['tmp_name'])){
    //处理上传文件
}else{
    echo "非法的文件上传!";
}

getimagesize() 関数を使用して、アップロードされた画像の幅と高さを取得することもできます。コードは次のとおりです:

if (is_uploaded_file($_FILES['file']['tmp_name'])) {
    $image_info = getimagesize($_FILES['file']['tmp_name']);
    echo "图片宽度:".$image_info[0]."<br/>";
    echo "图片高度:".$image_info[1]."<br/>";
    echo "图片类型:".$image_info[2]."<br/>";
} else {
    echo "非法的文件上传!";
}

3. アップロードされるファイルのサイズを制限する

PHP のデフォルトの制限は、アップロードできるファイル サイズが 2M ですが、これを変更することで変更することもできます。構成ファイルを変更するか、PHP 制限で設定します。たとえば、php.ini ファイルで、upload_max_filesize と post_max_size を設定して、アップロードされるファイルのサイズを制限できます。

PHP でアップロードされるファイルの最大値を設定したい場合は、ini_set() 関数を使用して php.ini の設定を変更できます。コードは次のとおりです。

//设置上传文件的最大值为10M
ini_set("upload_max_filesize","10M");
ini_set("post_max_size","10M");

$_SERVER['CONTENT_LENGTH'] を使用してクライアント リクエストのヘッダー情報のコンテンツの長さを取得し、アップロードされたファイルが指定されたサイズを超えているかどうかを判断することもできます。コードは次のとおりです。

if($_SERVER['CONTENT_LENGTH'] > MAX_SIZE){
    echo "上传文件超过了指定大小!";
}

フロントエンド部分では、jQuery.uploadFile.js プラグインを使用して、アップロードされるファイルのサイズを制限することもできます。コードは次のとおりです:

<input type="file" name="file" id="file"/>
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.uploadfile.js"></script>
<script>
    $("#file").uploadFile({
        url: "upload.php",   //处理文件上传的PHP脚本
        maxFileSize: 1024*1024*5,   //最大上传文件的大小,此处为5M
    });
</script>

4. ファイル アップロード エラーの処理

ファイルをアップロードするときに、いくつかのエラーが発生する可能性があります。たとえば、アップロードされたファイルが大きすぎる、アップロードされたファイルの種類が許可されていない、ターゲット フォルダーが存在しないなどです。ユーザーエクスペリエンスとファイルアップロードの効率を向上させるために、これらのエラーを処理する必要があります。

一部のエラー コードは、エラーの判断と処理を容易にするために PHP で定義されています。例:

  1. UPLOAD_ERR_OK (0): アップロードは成功しました。
  2. UPLOAD_ERR_INI_SIZE(1): アップロードされたファイルは php.ini の設定を超えています。
  3. UPLOAD_ERR_FORM_SIZE(2): アップロードされたファイルは、フォームの MAX_FILE_SIZE で指定された値を超えています。
  4. UPLOAD_ERR_PARTIAL(3): アップロードされたファイルの一部のみがアップロードされました。
  5. UPLOAD_ERR_NO_FILE(4): ファイルはアップロードされませんでした。
  6. UPLOAD_ERR_NO_TMP_DIR(6): 一時フォルダーが見つかりません。
  7. UPLOAD_ERR_CANT_WRITE(7): ファイルの書き込みに失敗しました。

switch ステートメントを使用して、これらのエラーを処理できます。コードは次のとおりです。

switch ($_FILES['file']['error']) {
    case UPLOAD_ERR_OK:
        //上传成功
        break;
    case UPLOAD_ERR_INI_SIZE:
        echo "上传的文件超过了php.ini中的配置。";
        break;
    case UPLOAD_ERR_FORM_SIZE:
        echo "上传的文件超过了表单中的MAX_FILE_SIZE指定的值。";
        break;
    case UPLOAD_ERR_PARTIAL:
        echo "上传的文件只有部分被上传。";
        break;
    case UPLOAD_ERR_NO_FILE:
        echo "没有文件被上传。";
        break;
    case UPLOAD_ERR_NO_TMP_DIR:
        echo "找不到临时文件夹。";
        break;
    case UPLOAD_ERR_CANT_WRITE:
        echo "文件写入失败。";
        break;
    default:
        echo "未知错误。";
        break;
}

アップロードするファイルの種類を特定の種類に限定したい場合は、in_array() 関数を使用して判断できます。コードは次のとおりです:

$allowed_types = array('jpg', 'jpeg', 'gif', 'png');   //允许上传的文件类型
$filename = $_FILES['file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);   //获取文件类型后缀
if (!in_array($ext, $allowed_types)) {
    echo "不允许上传此类型的文件。";
}

5. 概要

ファイルのアップロードは Web 開発における一般的な問題であり、PHP にはファイルのアップロードを処理するためのさまざまなメソッドと関数が用意されています。上記で紹介した方法に加えて、PHP File Uploader (https://www.github.com/verot/class.upload.php) や FineUploader (https:/) など、ファイルのアップロード処理に PHP クラス ライブラリを使用することもできます。 /fineuploader.com/)。どの方法を使用する場合でも、アップロードされたファイルのセキュリティと有効性を確保する必要があります。

以上がPHP でファイルのアップロードを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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