画像をアップロード保存するPHPプログラム $_FILES

PHPで画像処理プログラム PHP/MySQL

PHP


<form enctype="multipart/form-data" action="__URL__" method="POST">
	<!-- MAX_FILE_SIZE は、必ず "file" input フィールドより前に、valueは単位:バイトでサイズ制限 -->
	<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
	<!-- input 要素の name 属性の値が、$_FILES 配列のキーになる -->
	<input name="userfile" type="file" />
	<input type="submit" value="ファイルを送信" />
</form>
<form>に enctype=”multipart/form-data”が必須、methodはPOST <input>「type=”file”」が必須、 name=””は、一時保存ファイル名の配列file_uploadの名前になる。

$_FILESの配列

PHP


move_uploaded_file //サーバーに一時保存されたファイルをmove_uploaded_fileで指定場所に移動

PHP


//サーバーに一時保存されたファイル情報は配列形式
//$_FILES[inputのname][アップロードされたファイルの情報]

$_FILES[inputのname]['name'] //元のファイル名
$_FILES[inputのname]['tmp_name'] //サーバーに一時保存されたファイル名
$_FILES[inputのname]['error'] //エラー内容
$_FILES[inputのname]['type'] //ファイルタイプ
$_FILES[inputのname]['size'] //ファイルサイズ
配列キー 一時保存された内容
name 元のファイル名
tmp_name サーバーに一時保存されたファイル名
error エラー内容
type ファイルタイプ
size ファイルサイズ

エラー: $_FILES[”][‘error’]

[‘error’]は0~8の数字で返される。エラーがない場合は”0” $_FILES[”][‘error’]に値5が無いので注意。
コード エラー定数 説明
0 UPLOAD_ERR_OK エラーなし
1 UPLOAD_ERR_INI_SIZE php.iniのupload_max_filesizeのサイズを超えている
2 UPLOAD_ERR_FORM_SIZE HTMLフォームで指定された MAX_FILE_SIZE を超えている
3 UPLOAD_ERR_PARTIAL 一部のみしかアップロードされていない
4 UPLOAD_ERR_NO_FILE アップロードされなかった
6 UPLOAD_ERR_NO_TMP_DIR サーバー一時保管フォルダがない
7 UPLOAD_ERR_CANT_WRITE ディスクへの書き込みに失敗
8 UPLOAD_ERR_EXTENSION PHPの拡張モジュールがアップロードを中止した
PHPマニュアル日本語

POST遷移かの判定

PHP


//POSTリクエストによるページ遷移かチェック
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
	//適正なPOSTによる取得

}else{
	//POSTリクエストによる遷移じゃない場合
	 echo '不正なアクセスです!';
}//

ファイル形式のチェック

PHP

	

//jpeg形式じゃない場合
if ($_FILES['upimg']['type'] !=='image/jpeg'){
	echo 'JPEG形式の画像を選択してください!';
}//
// PNG形式じゃない場合
if($_FILES['upimg']['type'] !=='image/png'){
	echo 'PNG形式の画像を選択してください!';
}//

//テキストファイルじゃない場合
if ($_FILES['upload']['type'] !== 'text/plain') {
	echo 'テキストファイルを選択してください!';
}//

エラー無しなら保存する

PHP


	$uploadfile  ="/files/memo.txt";//ファイルの保存先

	//エラー無し
	if($_FILES['upload']['error'] === 0) {

		// アップロードされたファイルに、パスとファイル名を設定して保存
		move_uploaded_file($_FILES['upload']['tmp_name'], $uploadfile);
		// 完了メッセージを表示
		echo '完了!';
	}//	

画像をアップロード、リサイズする

PHP


<?php
	//フォーム返値を判別--------
	if($_FILES['upimg']['size'] < 0){
		echo "返り値がありません。";

	}else{
		echo ($_FILES['upimg']['type'])."<br>";

		//画像拡張子チェック----
		if( $_FILES['upimg']['type'] =='image/jpeg'  ||   $_FILES['upimg']['type'] =='image/png' ){

			date_default_timezone_set('Asia/Tokyo');//タイムエリア
			$set_date = date('Ymd_His');//日付
			$img_name = $set_date. "_" .$_FILES['upimg']['name']; //変更後ファイル名
			$setimg_area =  "img/".$img_name ; // (保存先ファイル名)ファイル名_$date
			move_uploaded_file( $_FILES['upimg']['tmp_name']  , $setimg_area );

			//サムネthumb作成------
			$moto_img = imagecreatefromjpeg("img/$img_name");
			list($w,$h) = getimagesize("img/$img_name");
			$new_h = 100;
			$new_w = $w *100 /$h;
			$mythumb = imagecreatetruecolor($new_w, $new_h );
			imagecopyresized($mythumb , $moto_img , 0,0,0,0 , $new_w, $new_h,$w, $h);
			imagejpeg($mythumb , "thumb/$img_name");

			//サムネ表示--
			echo "サムネUP成功";
?>
				<img src="thumb/<?php echo $img_name  ?>"  >
<?php
		}else{
			echo"不適切な画像です";

		}//end_if
	}//end_if
?>

ディレクトリ内ファイル表示

保存した画像ファイルの一覧を表示する。dir関数を利用してファイル一覧を表示する

PHP


$dir = dir("img/");
while(FALSE !== ($fileName = $dir->read())){
	if ($fileName != "." && $fileName != "..") {
		echo $fileName ."<br>";
	}
}
画像をアップロード保存するPHPプログラム $_FILES、説明画像1

画像読込、アップロードとCookieで画像name保存のサンプル

画像をアップロード保存するPHPプログラム $_FILES、説明画像2

処理内容

画像判定、画像保存、クッキー保存、inputボタンの書き換え、クッキー保存画像名で表示 ・ファイルがjpgかpngなら画像をupload/フォルダに保存 ・「upload/画像名」をCookiに保存する ・Cookiが保存されていたら画像を表示して更新ボタンを表示する

(PHP内容)upload-top.php

PHP


<?php 
//画像01---

	//画像01の表示
	$file01_mes = "";
	$file01_url = "img/no_photo.png";
	$file01_button = "読込み";

if ($_FILES['upfile'] <>"" ){	//POSTファイルのがあったら

	if(isset($_FILES)&& isset($_FILES['upfile']) && is_uploaded_file($_FILES['upfile']['tmp_name'])){
	
		if(!file_exists('upload')){
			mkdir('upload');
		}

		//画像の確認
		if( 
			( $_FILES['upfile'] > 0 ) &&
			( $_FILES['upfile']['type'] =='image/jpeg'  ||  $_FILES['upfile']['type'] =='image/png' ) && 
			(	( strtolower (mb_strrchr($_FILES['upfile']['name'],'.',FALSE )) == ".jpg" ) || 
				( strtolower (mb_strrchr($_FILES['upfile']['name'],'.',FALSE )) == ".png" ) 
			)
			){
				$a = 'upload/' . basename($_FILES['upfile']['name']);
				if(move_uploaded_file($_FILES['upfile']['tmp_name'], $a)){
					$msg = $a. 'のアップロードに成功しました';
					//Cookiに画像名を保存  time()1時間
					setcookie('photo_up01', $a, time()+ 60 * 60 * 1 );
					echo "Cooki保存";

					$file01_mes = "画像を変更する";
					$file01_url = $a;
					$file01_button = "更新";
				}else {
					$msg = 'アップロードに失敗しました';
				}//end_if

		}else{
			$msg = 'jpgかpng形式の画像ファイルを選択してください';


			if( $_COOKIE['photo_up01'] != ""){ //Cooliがあったら
					echo "クッキーは有:".$_COOKIE['photo_up01']."<br>";
					$file01_mes = "画像を選び直す";
					$file01_url = $_COOKIE['photo_up01'] ;
					$file01_button = "更新";
			}else{
						echo "クッキー無し".$_COOKIE['photo_up01']."<br>";
					$file01_mes = "画像を選択してください";
					$file01_url = "img/no_photo.png";
					$file01_button = "読込み";
		
			}//end_if

		}//end_if

	}//end_if

}else{	//POSTファイルが無かったら

	if( $_COOKIE['photo_up01'] != ""){ //Cooliがあったら
			echo "クッキーは有:".$_COOKIE['photo_up01']."<br>";
			$file01_mes = "画像を選び直す";
			$file01_url = $_COOKIE['photo_up01'] ;
			$file01_button = "更新";
	}else{
				echo "クッキー無し".$_COOKIE['photo_up01']."<br>";
			$file01_mes = "画像を選択してください";
			$file01_url = "img/no_photo.png";
			$file01_button = "読込み";

	}//end_if

}//end_if

?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">



</head>
<body>
<h1>アルバム作成:画像アップロード</h1>

<?php
//メッセージ作成
if(isset($msg) && $msg == true){
	echo '<p>'. $msg . '</p>';
}
?>

<br>
<p>画像を選択を選んだ後に「読込み」を押してください。</p>

		<p>	<img src="<?php echo ($file01_url); ?>" alt="登録済画像01" width="10%" />
			<form action="upload-top.php" method="post" enctype="multipart/form-data">
				<label class="my-file-input"><input type="file" id="test3" name="upfile" /><?php echo ($file01_mes); ?></label>
				<input type="submit" value="<?php echo ($file01_button); ?>">
			</form>
		</p>



</body>



<!-- Labeの変更 -->
<style type="text/css">
<!--
label {
	margin-left: 3em;
}
.my-file-input {
  display: inline-block;
  padding: 5px;
  width: 200px;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  font-size: 14px;
  text-overflow: ellipsis;
  background-color: #55f;
  color: white;
  box-shadow: #888 2px 2px 1px;
  cursor: pointer;
}
.my-file-input:hover {
  background-color: #88f;
}
.my-file-input:hover {
  background-color: #88f;
}
.my-file-input:active {
  box-shadow: #888 1px 1px 1px;
  position: relative;
  top: 1px; left: 1px;
}
.my-file-input input {
  display: none;
}
</style>


<script>
document.getElementById("test2").addEventListener("change", function(e){
		e.target.nextSibling.nodeValue = e.target.files.length ? e.target.files[0].name : "ファイルを選ぶぜ!";
});
document.getElementById("test3").addEventListener("change", function(e){
	e.target.nextSibling.nodeValue = e.target.files.length ? e.target.files[0].name : "ファイルを選ぶぜ!";
});
</script>


</html>

画像をアップロード保存するPHPプログラム $_FILES、説明画像3

4つの画像をアップロード

重複は登録せず、画像を選びなおすときは古い画像を削除して更新する

PHP


<?php 
//画像01---

	//画像01の表示
	$file01_mes = "";
	$file01_url = "img/no_photo.png";
	$file01_button = "読込み";


echo "<br>01:".$_COOKIE['photo_up01'];
echo "<br>02:".$_COOKIE['photo_up02'];
echo "<br>03:".$_COOKIE['photo_up03'];
echo "<br>04:".$_COOKIE['photo_up04'];
echo"<br><br>";

	
		//Cooki画像のセット‐------------------------
		if( $_COOKIE['photo_up01'] != ""){ //Cooliがあったら
				echo "クッキーは有:".$_COOKIE['photo_up01']."<br>";
				$file01_mes = "画像を選び直す";
				$file01_url = $_COOKIE['photo_up01'] ;
				$file01_button = "更新";
		}else{
				 echo "クッキー無し".$_COOKIE['photo_up01']."<br>";
				$file01_mes = "画像を選択してください";
				$file01_url = "img/no_photo.png";
				$file01_button = "読込み";
		}//end_if
	
		//Cooki画像のセット‐------------------------
		if( $_COOKIE['photo_up02'] != ""){ //Cooliがあったら
				echo "クッキーは有:".$_COOKIE['photo_up02']."<br>";
				$file02_mes = "画像を選び直す";
				$file02_url = $_COOKIE['photo_up02'] ;
				$file02_button = "更新";
		}else{
				 echo "クッキー無し".$_COOKIE['photo_up02']."<br>";
				$file02_mes = "画像を選択してください";
				$file02_url = "img/no_photo.png";
				$file02_button = "読込み";
		}//end_if
	
		//Cooki画像のセット‐------------------------
		if( $_COOKIE['photo_up03'] != ""){ //Cooliがあったら
				echo "クッキーは有:".$_COOKIE['photo_up03']."<br>";
				$file03_mes = "画像を選び直す";
				$file03_url = $_COOKIE['photo_up03'] ;
				$file03_button = "更新";
		}else{
				 echo "クッキー無し".$_COOKIE['photo_up03']."<br>";
				$file03_mes = "画像を選択してください";
				$file03_url = "img/no_photo.png";
				$file03_button = "読込み";
	
		}//end_if
	
		//Cooki画像のセット‐------------------------
		if( $_COOKIE['photo_up04'] != ""){ //Cooliがあったら
				echo "クッキーは有:".$_COOKIE['photo_up04']."<br>";
				$file04_mes = "画像を選び直す";
				$file04_url = $_COOKIE['photo_up04'] ;
				$file04_button = "更新";
		}else{
				 echo "クッキー無し".$_COOKIE['photo_up04']."<br>";
				$file04_mes = "画像を選択してください";
				$file04_url = "img/no_photo.png";
				$file04_button = "読込み";
		}//end_if
		//------------------------------------



if ($_FILES['upfile'] <>"" ){	//POSTファイルがあったら

	if(isset($_FILES)&& isset($_FILES['upfile']) && is_uploaded_file($_FILES['upfile']['tmp_name'])){
	
		if(!file_exists('upload')){
			mkdir('upload');
		}

		//画像の確認
		if( 
			( $_FILES['upfile'] > 0 ) &&
			( $_FILES['upfile']['type'] =='image/jpeg'  ||  $_FILES['upfile']['type'] =='image/png' ) && 
			(	( strtolower (mb_strrchr($_FILES['upfile']['name'],'.',FALSE )) == ".jpg" ) || 
				( strtolower (mb_strrchr($_FILES['upfile']['name'],'.',FALSE )) == ".png" ) 
			)
		  ){
					$a = 'upload/' . basename($_FILES['upfile']['name']);//画像のURL作成

						$cookiname = "photo_up". $_POST['cooki_sw'];//Cooki名の作成

				//Cookiに保存されていないかの確認
				if( ($_COOKIE['photo_up01'] == $a ) || ($_COOKIE['photo_up02'] == $a ) || 
					($_COOKIE['photo_up03'] == $a ) || ($_COOKIE['photo_up03'] == $a ) 
					){
						$msg = $a. 'の画像は既に選択されています';	
				}else{


					//画像を保存する------
					if(move_uploaded_file($_FILES['upfile']['tmp_name'], $a)){	//画像が保存できたら
						$msg = $a. 'のアップロードに成功しました';

						if ( $_COOKIE["$cookiname"]!= ""){
							$dalete_img = $_COOKIE["$cookiname"];
							echo $dalete_img."ファイルを削除します";										
							unlink("$dalete_img"); //古い画像の削除
						}

						setcookie($cookiname , $a, time()+ 60 * 60 * 1 );	//Cookiに画像名を保存  time()1時間
						echo $_POST['cooki_sw']."**Cooki保存";

									if($_POST['cooki_sw'] == 01){
										$file01_mes = "画像を変更する";
										$file01_url = $a;
										$file01_button = "更新";
									}
									if($_POST['cooki_sw'] == 02){
										$file02_mes = "画像を変更する";
										$file02_url = $a;
										$file02_button = "更新";
									}
									if($_POST['cooki_sw'] == 03){
										$file03_mes = "画像を変更する";
										$file03_url = $a;
										$file03_button = "更新";
									}
									if($_POST['cooki_sw'] == 04){
										$file04_mes = "画像を変更する";
										$file04_url = $a;
										$file04_button = "更新";
									}
						}else {//アップロードに失敗したら
							$msg = 'アップロードに失敗しました';
						}//end_if
						//画像保存するここまで----

				}//end_if


		}else{
			 $msg = 'jpgかpng形式の画像ファイルを選択してください';


		}//end_if

	}//end_if

}//end_if

?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">



</head>
<body>
<h1>アルバム作成:画像アップロード</h1>

<?php
//メッセージ作成
if(isset($msg) && $msg == true){
	echo '<p>'. $msg . '</p>';
}
?>

<br>
<p>画像を選択を選んだ後に「読込み」を押してください。</p>

		<p>	<img src="<?php echo ($file01_url); ?>" alt="登録済画像01" width="10%" />
			<form action="upload-top.php" method="post" enctype="multipart/form-data">
				<label class="my-file-input"><input type="file" id="test3" name="upfile" /><?php echo ($file01_mes); ?></label>
				<input type="hidden" name="cooki_sw" value="01">
				<input type="submit" value="<?php echo ($file01_button); ?>">
			</form>
		</p>
	<br>
		<p>	<img src="<?php echo ($file02_url); ?>" alt="登録済画像02" width="10%" />
			<form action="https://www.brandshop.co.jp/brand-kaitori/form/upload-top.php" method="post" enctype="multipart/form-data">
				<label class="my-file-input"><input type="file" id="test3" name="upfile" /><?php echo ($file02_mes); ?></label>
				<input type="hidden" name="cooki_sw" value="02">
				<input type="submit" value="<?php echo ($file02_button); ?>">
			</form>
		</p>
	<br>
		<p>	<img src="<?php echo ($file03_url); ?>" alt="登録済画像03" width="10%" />
			<form action="https://www.brandshop.co.jp/brand-kaitori/form/upload-top.php" method="post" enctype="multipart/form-data">
				<label class="my-file-input"><input type="file" id="test3" name="upfile" /><?php echo ($file03_mes); ?></label>
				<input type="hidden" name="cooki_sw" value="03">
				<input type="submit" value="<?php echo ($file03_button); ?>">
			</form>
		</p>
	<br>
		<p>	<img src="<?php echo ($file04_url); ?>" alt="登録済画像04" width="10%" />
			<form action="https://www.brandshop.co.jp/brand-kaitori/form/upload-top.php" method="post" enctype="multipart/form-data">
				<label class="my-file-input"><input type="file" id="test3" name="upfile" /><?php echo ($file04_mes); ?></label>
				<input type="hidden" name="cooki_sw" value="04">
				<input type="submit" value="<?php echo ($file04_button); ?>">
			</form>
		</p>
	<br>


</body>



<!-- Labeの変更 -->
<style type="text/css">
<!--
label {
	margin-left: 3em;
}
.my-file-input {
  display: inline-block;
  padding: 5px;
  width: auto;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  font-size: 14px;
  text-overflow: ellipsis;
  background-color: #fa8072;
  color: #000000;
  box-shadow: #888 2px 2px 1px;
  cursor: pointer;
}
.my-file-input:hover {
  background-color: #cd5c5c;
}
.my-file-input:active {
  box-shadow: #888 1px 1px 1px;
  position: relative;
  top: 1px; left: 1px;
}
.my-file-input input {
  display: none;
}
</style>


<script>
document.getElementById("test2").addEventListener("change", function(e){
		e.target.nextSibling.nodeValue = e.target.files.length ? e.target.files[0].name : "ファイルを選ぶぜ!";
});
document.getElementById("test3").addEventListener("change", function(e){
	e.target.nextSibling.nodeValue = e.target.files.length ? e.target.files[0].name : "ファイルを選ぶぜ!";
});
</script>


</html>

タイトルとURLをコピーしました