プログラミングで飯を食え。腕をあげたきゃ備忘録!

PHP、JavaScript、HTML5、CSS3などWEB系言語を中心に基本テク、備忘録をまとめます。Android、Iphoneアプリ開発についても!

PHPでファイルをアップロードする関数!

サクウェブTVはコチラ↓↓↓
サクウェブTV

PHPでどんなファイルも全てアップロードできる関数は以下のように実現できます。

	/***************************************************
	 * ファイルを拡張子を変えずにアップロードする
	 * 引数:
	 * 	1.<input type="file"/>でアップロードしたデータ
	 * 	2.アップロード後のファイルにつける名前
	 * 	3.アップロード先のディレクトリ名(最後に/をつける必要なし)
	 * 戻り値:成功した場合はアップロード後のファイル名(保存されたファイル名)
	 * 		 失敗した場合にはfalse
	 ***************************************************/
	public function upload_files($data,$name,$dir){
		if(!empty($data["tmp_name"]) && $data["size"]>0){
			$name_array = explode(".",$data["name"]);
			$extention = $name_array[count($name_array)-1];
			$new_name = $name.".".$extention;
			$file_path = $dir."/".$new_name;
			if(move_uploaded_file($data["tmp_name"],$file_path)){
				return $new_name;
			}else{
				return false;
			}
		}else{
			return false;
		}
	}

cakePHPで使用する場合はcomponentに定義しておき、以下のように実行すると良いと思います。

DataConponent.phpに定義してあるとして、

$data = $this->data;
$date = date("YmdHis");
$movie_name = $date."_movie_name";
$thimbnail_name = $date."_thumbnail_name";
$text_book_name = $date."_text_book_name";
$movie_chk = $this->Data->upload_files($data["Lesson"]["movie_name"],$movie_name,"../webroot/movies");
$thumbnail_chk = $this->Data->upload_files($data["Lesson"]["thumbnail_name"],$thimbnail_name,"../webroot/img/thumbnails");
$text_chk = $this->Data->upload_files($data["Lesson"]["text_book_name"],$text_book_name,"../webroot/text_book");

これでwedrootに用意した各ディレクトリにファイルがアップロードされます。

しかし、これは拡張子を変えずにどんなファイルもアップロードしてしまうため、外部からのアップロードには使用しないことをお勧めします。

HPの管理者側のアップロードを簡単に実装したい場合にはこれで十分だとは思います。

また、ファイルの分類は拡張子で行っているため、本体$_FILES["●●"]["type"]で行うよりもセキュリティー上弱くなっています。

 

また、upload_files()の返り値はアップロードしたファイルの新しい名前になりますので、DBに登録する必要がある場合には返り値を変数で受け取って、クエリ用に整形した配列からDBにsaveすることになると思います。

>>PHPで画像をアップロードする関数!<<

>>PHPでPDFをアップロードする関数!<<

>>PHPでFLVをアップロードする関数!<<

>>PHPでファイルをアップロードする関数!<<

>>PHPで特定のファイルをアップロードする関数!<<