ホームページ > バックエンド開発 > PHPチュートリアル > phpmaster | PHPでファイルをアップロードします

phpmaster | PHPでファイルをアップロードします

William Shakespeare
リリース: 2025-03-03 08:28:10
オリジナル
619 人が閲覧しました

phpmaster | Uploading Files with PHP

PHPファイルアップロード:安全で信頼性の高いアップロードシステムを構築しますオンラインアルバムの写真、電子メール添付ファイル、およびバッチ処理アプリケーションデータファイルには、共通点が1つあります。それらはすべて、ユーザーのWebブラウザーを介してファイルをインターネットにアップロードする必要があります。ファイルアップロード機能は、毎日使用されている多くのWebサイトやWebアプリケーションの重要な部分です。この記事では、PHPを使用してファイルアップロードサポートをWebサイトに追加する方法を示します。

キーポイント

PHPにファイルアップロードサポートを追加するには、ユーザーにHTMLフォームと、サーバーにアップロードされたファイルを処理するためのPHPスクリプトを作成する必要があります。
    要素は、postメソッドを使用し、enctypeプロパティをMultiPart/form-dataに設定する必要があります。
  • <form></form>アップロードされたファイルは、最初に一時ディレクトリに保存されます。フォームの送信を処理する責任のあるPHPスクリプトは、ファイルを検証し、それを処理し、通常は一時的な場所からより恒久的な場所に移動します。
  • ファイルアップロードに関する情報は、多次元配列
  • を介して提供されます。
  • 関数は、アップロードされたファイルを一時的な場所から永続的な場所に移動し、追加のチェックを実行して、HTTP POSTリクエストを介してファイルが実際にアップロードされていることを確認します。
  • $_FILESファイルアップロードにはセキュリティリスクがあります。これらのリスクを軽減するために、アップロードされたファイルのタイプを確認し、トラフィックのアップロードに厳格な制限を課し、ウイルスをスキャンできます。また、文字、数字、または非常に限られた句読点のセットでない文字をアンダースコアに置き換えることにより、安全なファイル名を確保することも重要です。 move_uploaded_file()
  • 前提条件ファイルのアップロードの処理は難しくありませんが、正しい必要がある小さな詳細がいくつかあります。そうしないと、アップロードが失敗します。まず、アップロードを許可するようにPHPが構成されていることを確認する必要があります。 php.iniファイルを確認し、file_uploadsディレクティブがオンに設定されていることを確認します。

    アップロードされたファイルは、最初に一時ディレクトリに保存されます(心配しないでください... PHPスクリプトは、その後、ファイルをより永続的な場所に移動できます)。デフォルトでは、初期位置はシステムのデフォルトの一時ディレクトリです。 php.iniでupload_tmp_dirディレクティブを使用して、さまざまなディレクトリを指定できます。いずれにせよ、PHPプロセスに使用しているディレクトリに書き込む適切な権限があることを確認する必要があります。

    構成により、サーバーがアップロードされたファイルを受け入れることができることを確認した後、HTMLの詳細に焦点を当てることができます。 HTMLからの他のほとんどのサーバー側のインタラクションと同様に、ファイルのアップロードはフォームを使用します。あなたの
<code>file_uploads = On</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
要素がpostメソッドを使用し、enctypeプロパティをMultiPart/form-dataに設定する必要があることが非常に重要です。

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

アップロードプロセススクリプトを作成<form></form>

ログイン後にコピー
ログイン後にコピー
あなた自身の経験と今述べた要件によると、あなたはファイルアップロードのプロセスを推測したかもしれません。

  • 訪問者は、ファイルのアップロードをサポートするために特別に使用されるフォームを含むHTMLページを表示します。
  • 訪問者は、アップロードしたいファイルを提供し、フォームを提出します。
  • ブラウザはファイルをエンコードし、サーバーに発行されたPOSTリクエストの一部として送信します。
  • PHPはフォームの送信を受信し、ファイルを解読し、サーバー上の一時的な場所に保存します。
  • フォームの提出のためにPHPスクリプト検証ファイルを処理し、何らかの形で処理する
  • 責任を負い、通常は一時的な場所からより恒久的な場所に移動します。

ファイルアップロードサポートを追加するには、ユーザーにHTMLフォームを表示する必要があり、サーバーにアップロードされたファイルを処理するPHPスクリプトを作成する必要があります。

html

HTMLフォームは、ユーザーがファイルアップロードを開始できるインターフェイスを提供します。 <input>要素のメソッド属性を投稿するように設定し、enctype属性をMultiPart/form-Dataに設定する必要があることを忘れないでください。ファイル<input>要素は、アップロードするファイルを指定するフィールドを提供します。他のフォーム要素と同様に、フォームを処理するPHPスクリプトで参照できるように、名前属性を提供することが重要です。基本的なファイルのアップロードフォームのマーキングの例は次のとおりです。

<code>file_uploads = On</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
異なるブラウザがさまざまな方法でファイルフィールドをレンダリングすることに注意する価値があります。 IE、Firefox、およびOperaは、マークが付いたボタンを備えたテキストフィールドとして表示するか、それらの横に選択します。 Safariは、選択されたファイルとしてのみマークされたボタンとしてレンダリングします。ユーザーは、選択したブラウザでフィールドのレンダリング方法に使用され、使用方法を知っているため、これは通常問題ではありません。ただし、何らかの形で提示することを主張するクライアントやデザイナーに遭遇することもあります。ブラウザによって課されるセキュリティ上の理由により、ファイルフィールドに適用できるCSSとJavaScriptの数は非常に限られています。スタイルのファイルフィールドは難しい場合があります。外観があなたにとって重要な場合は、Peter-Paul Kochのスタイルの入力型= "ファイル"をチェックすることをお勧めします。

php ファイルアップロードに関する情報は、多次元配列

を介して提供されます。この配列は、htmlフォームのファイルフィールドに割り当てられた名前でインデックス付けされます。次に、各ファイルの配列には次のインデックスが含まれています。
  • $_FILES["myFile"]["name"]クライアントから元のファイル名を保存します。
  • $_FILES["myFile"]["type"]ファイルを保存するmimeタイプ。
  • ファイルのファイルのサイズは
  • $_FILES["myFile"]["size"]バイトのサイズ。
  • $_FILES["myFile"]["tmp_name"]一時ファイルの名前が保存されます。
  • $_FILES["myFile"]["error"]転送中に生成されたエラーコードを保存します。

move_uploaded_file()関数は、アップロードされたファイルを一時的な場所から永続的な場所に移動します。この目的のために、move_uploaded_file()copy()の代わりにrename()のような関数を常に使用する必要があります。追加のチェックを実行して、HTTP POSTリクエストを介してファイルが実際にアップロードされていることを確認する必要があります。ユーザーが提供する元のファイル名でファイルを保存する予定がある場合は、これが安全であることを確認することをお勧めします。ファイル名には、スラッシュなどの宛先パスに影響を与える可能性のある文字を含めるべきではありません。また、名前がファイルに同じ名前で既存のファイルを上書きすることもありません(アプリケーションデザインがそれを行わない限り)。非文字、番号、または非常に限られた句読文字のセットをアンダースコアに置き換え、同じ名前のファイルが既に存在する場合に数字を追加することにより、安全なファイル名を確保します。 PHPファイルのアップロードを受信および処理する例は次のとおりです。

<code>file_uploads = On</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
このコードは、最初にファイルのアップロードにエラーがないことを保証します。次に、セキュアファイル名(先ほど述べたように)を決定し、

を使用してファイルを最終ディレクトリに移動します。最後に、新しいファイルに合理的なアクセスが設定されていることを確認するには、move_uploaded_file()に電話してください。 chmod()

安全上の注意

私たちのほとんどは、Total StrangerストアをPCにランダムなファイルを保存することはできませんが、アプリにファイルをアップロードすることを許可すると、実際にそれを行っています。ユーザーに自分の写真をプロフィールページとしてアップロードすることを計画している可能性がありますが、特別に作られたウイルスを含む実行可能ファイルをアップロードしようとするとしたらどうでしょうか?ファイルのアップロードを許可するという固有のセキュリティリスクを最小限に抑えるために実行できるいくつかの手順を共有したいと思います。手順の1つは、アップロードされたファイルが正しいことを確認することです。両方とも偽造が起こりやすいため、

の値またはファイル名の拡張値に依存します。代わりに、$_FILES["myFile"]["type"]のような関数を使用して、ファイルの内容を確認し、実際にGIF、JPEG、またはその他のサポートされている画像形式であるかどうかを判断します。 exif_imagetype()が使用できない場合(関数ではEXIF拡張子を有効にする必要があります)、を使用できます。 exif_imagetype()返された配列には画像タイプが含まれます(認識されている場合)。 getimagesize() getimagesize() 非イメージファイルの場合、UNIXファイルユーティリティを呼び出すために

を使用できます。ファイルは、予想される場所で既知のバイナリ署名を探してファイルのタイプを決定します。
<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
<code>file_uploads = On</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

実行できるもう1つのステップは、POSTリクエストの合計サイズとアップロードできるファイルの数に厳密な制限を課すことです。これを行うには、php.iniでupload_max_size、post_max_size、およびmax_file_uploadsディレクティブの適切な値を指定します。 upload_max_sizeディレクティブは、ファイルアップロードの最大サイズを指定します。アップロードされたサイズに加えて、POST_MAX_SIZEディレクティブを使用して、POSTリクエスト全体のサイズを制限することもできます。 MAX_FILE_UPLOADSは、ファイルのアップロードの数を制限する新しい指令(バージョン5.2.12に追加)です。これらの3つの指示は、多くのネットワークトラフィックまたはシステムの負荷を引き起こすことにより、その可用性を損なう攻撃からウェブサイトを保護するのに役立ちます。

<code>upload_tmp_dir = "/tmp"

tboronczyk@zarkov:~$ ls -l / | grep tmp
drwxrwxrwt  13 root root 40960 2011-08-31 00:50 tmp</code>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3番目のステップは、ウイルススキャナーを使用してアップロードされたファイルをスキャンすることです。これは、特にWebサイトでWebベースの電子メールクライアントの添付ファイルや(リーガル)ファイル共有サイトなど、他の個人が後でアップロードされたファイルをダウンロードできるようにする場合、今日の広範なウイルスやマルウェアの時代に重要です。 ClamavにアクセスできるPHP拡張機能がありますが、もちろん、ファイルのようにClamavのコマンドラインユーティリティを呼び出すことができます。

ログイン後にコピー
ログイン後にコピー

概要

ファイルのアップロードをサポートするために、WebサイトまたはWebベースのアプリケーションを使用することがどれほど簡単かを学びました。アップロードを成功させるには、HTMLフォームをMultiPart/Form-DataエンコードのPOSTリクエストを介して送信する必要があり、PHPはFILE_UPLOADSディレクティブを使用して指定された転送を許可する必要があります。ファイルが転送された後、アップロードの処理を担当するスクリプトは、$_FILES配列で見つかった情報を使用して、ファイルを一時ディレクトリから目的の場所に移動します。また、ファイルのアップロードを許可することに関連するリスクの一部から自分自身とユーザーを保護するために取ることができるいくつかの追加の予防策を共有します。ファイル名が安全であることを確認し、ファイルタイプを確認し、トラフィックのアップロードに厳格な制限を課し、ウイルスをスキャンする方法を確認します。

(FAQセクションなどのコンテンツは、必要に応じて追加できます)

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

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