PHP勉強中の者なのですが、ファイルアップロード時に同名ファイルが存在する場合の処理について考えています。
自分なりに調べた結果、「同じ名前のファイルが存在するときは番号(連番)を付ける」と書いてあるサイトを見つけたのですが、書いてあるコードが難しく、理解することができませんでした。その時のコードはこちらになります。
php
1<?php 2$filepath = unique_filename(dirname(__FILE__). '/' . 'test.txt'); 3file_put_contents($filepath, "sample"); 4echo $filepath; 5 6 7function unique_filename($org_path, $num=0){ 8 9 if( $num > 0){ 10 $info = pathinfo($org_path); 11 $path = $info['dirname'] . "/" . $info['filename'] . "_" . $num; 12 if(isset($info['extension'])) $path .= "." . $info['extension']; 13 } else { 14 $path = $org_path; 15 } 16 17 if(file_exists($path)){ 18 $num++; 19 return unique_filename($org_path, $num); 20 } else { 21 return $path; 22 } 23}
僕の作成した、ファイルアップロード時の処理については以下になります。
html
1<form method="post" enctype="multipart/form-data"> 2 <div><input type="file"name="new_img"></div> 3 <div><input type="submit" value="送信"></div> 4</form>
php
1$tmp_file = $_FILES['new_img']['tmp_name']; 2$file_name = 'img/' . $_FILES['new_img']['name']; 3if (is_uploaded_file($tmp_file) === TRUE){ 4 if ( move_uploaded_file($tmp_file,$file_name ) === TRUE){//同名ファイルがアップロードされた場合の処理 5 if (file_exists($faile_name)) { 6 $error_msg = '同名のファイルがアップロードされています。'; 7 } 8 //MIMEタイプ指定 9 $finfo = finfo_open(FILEINFO_MIME_TYPE); 10 $mime_type = finfo_file($finfo, $file_name); 11 finfo_close($finfo); 12 13 if(strpos($mime_type,'jpeg')||strpos($mime_type,'jpg')||strpos($mime_type,'png') === FALSE){ 14 unset($file_name); 15 $error_msg[] = 'ファイル形式が異なります。画像ファイルはJPEG又はPNGのみ利用可能です。'; 16 } 17 } else { 18 $err_msg[] = 'ファイルがアップロードできません'; 19 } 20 21} else { 22 $err_msg[] = 'ファイルが選択されていません'; 23}
某サイトのコードの、unique_filename関数の中身に関してはどこでどのような処理が行われてどうなっているかが、全くと言っていい程分からない状態です...
僕のコードに何か付け加える形でできるのならば、そうしたいと考えております。
どなたか簡単にご説明くださる方いましたら、教えて下さい...

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/24 03:57