2020年07月12日更新
PHPでファイルをアップロードする方法を初心者にもわかりやすく解説!
初心者でPHPでファイルをサーバーにアップロードする方法がわからないという方がたくさんいます。特に画像ファイルのアップロードで躓いているPHP初心者の方が多いようです。この記事では、初心者でもわかりやすくできるようにPHPでのアップロード方法をお伝えします。
目次
初心者にもわかるPHPでファイルをアップロードする仕組み
Webサイトでは、ユーザーに画像やCSVファイルなどのファイルのアップロードをお願いすることがあります。Webサイトを作成する時には、ファイルのアップロードのプログラムはPHPで記述します。
この記事では、初心者にもわかるように、PHPでファイルをアップロードする仕組みと、PHPでファイルをアップロードできるようにする方法について解説します。
まずは、PHPでファイルアップロードする仕組みについて解説します。まずはブラウザのファイルのアップロードフォームからファイルをアップロードして、この時にアップロードされたファイルはPHPが実行されているサーバーへ一時的に保管されます。その後、あらかじめmove_uploaded_file関数で指定したディレクトリへコピーされます。
PHPでファイルをアップロードしてみよう!
それでは実際にPHPでファイルをアップロードするためのコードを作成してみましょう。PHPでコールを作成する前に、まずはHTMLでアップロード用のフォームを作成しておきます。
この時に注意しなければいけない点は、フォームの設定で「enctype=”multipart/form-data”」を設定することです。
また、メソッドはPOSTでなくてはいけません。inputではtypi=”file”にしましょう。次のように記述します。
<input name="file_upload" type="file"> |
ここまでHTMLで準備したら、PHPを作成します。ファイルの保存先のパスを指定して、アップロードします。
<?php if($_FILES['file']){ move_uploaded_file($_FILES['file']['tmp_name'], './保存先のディレクトリ'); } ?> |
アップロードされたファイルの情報としては、次の5つがあります。必要に応じて記述します。
項目 | 説明 |
name | 元のファイル名 |
tmp_name | サーバーに一時保存されたファイル名 |
error | エラーが起きたときのエラー内容 |
type | ファイルタイプ |
size | ファイルサイズ |
画像がアップロードできないときには?
PHPで画像などのファイルをアップロードしようと思っても、うまくできないことがあります。その場合には、「tmp_name」で一時的に保存する場所を指定していないことがあります。「tmp_name」の指定をよくチェックしましょう。
正常にアップロードされたかチェックしてみよう!
ファイルがアップロードされたかどうかを確認するためには、最終的に保存するために指定したディレクトリにファイルが保存されているかどうかを確認すればOKです。こちらのディレクトリに、アップロードしたファイルが保存されていれば、アップロード成功です。
アップロードの操作を行ったはずなのに、ディレクトリに入っていない場合には、HTMLかPHPのどこかでミスがあったと考えられます。
PHPでファイルをアップロードするときにはセキュリティに注意
PHPでファイルをアップロードできるようにするときには、セキュリティに注意しましょう。というのは、PHPで指定しないと、ウイルスもアップロード出来てしまうためです。ウイルスのアップロードを許可しないように、次の2点をあらかじめ設定しましょう。
ファイル名はアップロード側で指定する
ファイル名はユーザーがアップロードするときのファイル名で保存せずに、プログラム側で指定するようにしましょう。セキュリティを強化する意味と、アップロードされたファイル名が被らないようにする意味があります。
アップロードできる拡張子は制限すること
上記のプログラムだけでは、すべてのファイルをアップロード出来てしまいます。しかし、アップロードして欲しいファイルの種類は、画像やテキスト、CSVなど、サイトによって違うはずです。そこで、アップロードできる拡張子を、プログラム側で制限するようにしましょう。そうすれば、不審なファイルがアップロードされることを防ぎます。
PHPでのファイルのアップロードに挑戦してみよう!
この記事では、PHPでファイルをアップロードする方法を解説してきました。PHPでファイルのアップロードフォームを記述するのはとても便利ですが、セキュリティ面への配慮が必要です。ぜひ安全にサイトを運用できる使い勝手のいいアップロードフォームを作成してみましょう。