0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHP For Beginnersチュートリアル その10 ファイルアップロードの振り返り

Posted at

このシリーズの目的

体系的なwebコーディングの訓練ができるようになるためにPHPの初学のきっかけかつ、PHPでログインフォームやフォームを実装することができるようになるために

PHP For Beginners

上記のチュートリアルを進めているのでその備忘録。

前回

内容

今回のチュートリアル

PHP Tutorial For Beginners: File Upload

このチュートリアルでやること

・PHPでのファイルのアップロードについて再度確認をする

成果物

index.php

<?php 

if (isset($_POST['submit'])) {
	// echo "<pre>";
	// print_r($_FILES);

	$targetfile = "uploads/".basename($_FILES['attachment']['name']);
	$extension = pathinfo($targetfile,PATHINFO_EXTENSION);
	// echo $extension;
	
	if($_FILES['attachment']['size'] > 500000) 
		echo "your file is too big!";

	else if($extension != "png" && $extension != "jpg" && $extension != "jpeg")
		echo "Only the image files are allowed!";

	else if(file_exists($targetfile)) 
		echo "File with name already exists!";
	
	 else if(move_uploaded_file($_FILES['attachment']['tmp_name'],$targetfile))

		echo "File Uploaded!";
}



 ?>

 <!DOCTYPE html>
 <html>
 <head>
 	<title>PHP File Upload test</title>
 </head>
 <body>
 <form action="index.php" method="post" enctype="multipart/form-data">
	<input type="file" name="attachment"><br>
	<input type="submit" name="submit" value="Upload">
 </form>
 </body>
 </html>
 

大まかな手順

今回と次回はこれまでのチュートリアルで出てきたことについて改めて補足を兼ねて基本を確認する回である。今回はその7のチュートリアルでサクッと出てきた、PHPでのファイルのアップロードについて。

1.PHPの設定について

index.php

<?php 

 echo phpinfo();

?>

PHPのバージョンや設定を確認するためのコマンド。
直接ターミナル出力したり色々あるが、これはindex.phpを読み込むとwebブラウザで表示するようなものになっている。
確認して変更する項目があるなら今度はphp.iniを探して編集する。
今回用があるのはfile_uploadとfile_max_uploadの2項目。
前者はファイルのアップロード機能のオンオフ、後者はアップロードするファイルのサイズの上限を指定する項目なので、それぞれ目的に応じて編集する。
編集したら再起動(私はXAMPPで仮想環境を作っているのでXAMPPのApacheとMysqlを再起動する)し、もう一度phpinfoを確認して変更されているかどうか確認をする。

2.ファイルのアップロードのための下準備

その7でも触れたが、ファイルをアップロードした際には仮に保存されるフォルダとそこからファイルを移して保存しておくフォルダの2つが必要である。
前者は用意されているが、後者は自分で予め用意しておく必要があるので準備しておく。

3.今回実装する処理

・アップロードされるファイルサイズに制限をつける
・アップロードされるファイルの拡張子に制限をつける
・同一のファイルはアップロードされないようにする

今回想定されているファイルのアップロードは画像のアップロードなので、例えば動画ファイルやあまりにもサイズが大きいものは弾かれるようにしておくということ。

今回のコードの注釈

アップロードの基本であるbasename及びmove_upload_fileについては以下を参照してほしい。

PHP For Beginnersチュートリアル その7

pathinfo()について

$extension = pathinfo($targetfile,PATHINFO_EXTENSION);


pathinfoはパスを取得するための関数で具体的にはディレクトリ名、名前。拡張子、拡張子を覗いたファイルの名前が連想配列で取得される。
引数の次にオプションを設定すると連想配列の中から任意の値だけ返すようになる。

オプションは

オプション名   取得する値     
PATHINFO_DIRNAME      ディレクト名    /home/test/web
PATHINFO_BASENAME ファイル名     web.jpg
PATHINFO_EXTENSION 拡張子      jpg
PATHINFO_FILENAME 拡張子なしのファイル名      web

と以上4つがあるので取得したい値に応じて指定する。
今回は拡張子を取得したいのでPATHINFO_EXTENSIONを指定する。

参考

pathinfo

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?