PHPでPOSTした
ファイルをアップする部分を作ってました。
いつもは、とりあえず動くものができたらいいかなーなんて思って作るんですが。
なぜか先日は、いろいろアップロードできそうなクラスにすれば便利かなーと思い、
クラスに書き起こしてみました。
fileup.php
<?
/**
* fileup ver 1.0
* Copyright araishi.com
* MIT
* lastmodified 2011-10-29
**/
class fileup {
var $files;
var $dir;
var $filename;
var $error;
var $saveFilename;
var $_saveFilePath;
function setFiles ($value){
$this->files = $value;
}
function setDir ($value){
$this->dir = $value;
}
function setFilename ($value){
$this->filename = $value;
}
function getSaveFilename(){
return $this->saveFilename;
}
/*
アップロードする前に同名ファイルがあれば上書きされないようにしている
*/
function makeFilename (){
if($this->filename){
$filename = $this->filename . '.' . $this->getExtension();
}else{
$filename = $this->files['name'];
}
$this->saveFilename = $filename;
$this->_saveFilePath = $this->dir . $this->saveFilename;
if(is_file($this->_saveFilePath)){
$this->error = 'filename error 1';
return false;
}
return true;
}
/*
アップロードされたファイルから拡張子を正規表現で抜いて返す
*/
function getExtension (){
if(!$this->files['name']){
$this->error = 'getExtension error1';
return false;
}
if(!preg_match('/\.(.+)$/', $this->files['name'], $match)){
$this->error = 'getExtension error2';
return false;
}
return $match[1];
}
/*
アップロードするディレクトリが無ければ作る
*/
function chkDir (){
if(!is_dir($this->dir)){
if(!mkdir($this->dir)){
$this->error = 'chkDir make error';
return false;
}
if(!chmod($this->dir, 0777)){
$this->error = 'chkDir chmod error';
return false;
}
}
}
/*
アップロードして権限を777にしてる
*/
function up(){
$this->chkDir();
$this->makeFilename();
if($this->error){
return false;
}
$src = @file_get_contents($this->files['tmp_name']);
if(!$src){
$this->error = 'up error1';
return false;
}
file_put_contents($this->_saveFilePath, $src);
if(chmod($this->_saveFilePath, 0777)){
return true;
}
$this->error = 'up error2';
return false;
}
}
とりあえず動作するものを…。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
if(isset($_POST['submit'])){
include 'fileup.php';
$fileup = new fileup;
// ファイルを指定
$fileup->setFiles($_FILES['file']);
// ディレクトリを指定
$fileup->setDir('./up/');
// ファイル名を指定(省略すると元のファイル名になる)
$fileup->setFilename();
// アップ実行
if(!$fileup->up()){
echo $fileup->error; exit;
}
echo $fileup->getSaveFilename().'をアップロードしました。';
}
?>
<form action="./" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="アップ" name="submit">
</form>
</body>
</html>
PHPのバージョンが古かったりセーフモードだと動かないかもしれません><
さくらのレンタルサーバーとかさくらのVPSなら動作すると思います。