upload.class.func
<?php
class upload
{
protected $fileName;
protected $maxSize;
protected $allowMime;
protected $allowExt;
protected $uploadPath;
protected $imgFlag;
protected $fileInfo;
protected $error;
protected $ext;
protected $destination;
private $uniName;
/**
* upload constructor.
* @param string $fileName
* @param string $uploadPath
* @param bool $imgFlag
* @param int $maxSize
* @param array $allowExt
* @param array $allowMime
*/
public function __construct($fileName = 'myFile', $uploadPath = './uploads', $imgFlag = true, $maxSize = 5242880,
$allowExt = array('jpeg', 'jpg', 'png', 'gif'),
$allowMime = array('image/jpeg', 'image/png', 'image/gif'))
{
$this->fileName = $fileName;
$this->maxSize = $maxSize;
$this->allowMime = $allowMime;
$this->allowExt = $allowExt;
$this->uploadPath = $uploadPath;
$this->imgFlag = $imgFlag;
$this->fileInfo = $_FILES[$this->fileName];
}
/**
* 檢測上傳文件是否出錯
* @return bool
*/
protected function checkError()
{
if (!is_null($this->fileInfo)) {
if ($this->fileInfo['error'] > 0) {
switch ($this->fileInfo['error']) {
case 1:
$this->error = '超過了PHP配置文件中upload_max_filesize選項的值';
break;
case 2:
$this->error = '超過了表單中MAX_FILE_SIZE設置的值';
break;
case 3:
$this->error = '文件部分被上傳';
break;
case 4:
$this->error = "沒有選擇上傳文件";
break;
case 6:
$this->error = "沒有找到臨時目錄";
break;
case 7:
$this->error = "文件不可寫";
break;
case 8:
$this->error = "由于PHP的擴展程序中斷文件上傳";
break;
}
return false;
} else {
return true;
}
} else {
$this->error = "文件上傳出錯";
return false;
}
}
/**
* 檢測上傳文件的大小
* @return bool
*/
protected
function checkSize()
{
if ($this->fileInfo['size'] > $this->maxSize) {
$this->error = "上傳文件過大";
return false;
}
return true;
}
/**
* 檢測擴展名
* @return bool
*/
protected
function checkExt()
{
$this->ext = strtolower(pathinfo($this->fileInfo['name'], PATHINFO_EXTENSION));
if (!in_array($this->ext, $this->allowExt)) {
$this->error = '不允許的擴展名';
return false;
}
return true;
}
/**
* 檢測文件的類型
* @return bool
*/
protected
function checkMime()
{
if (!in_array($this->fileInfo['type'], $this->allowMime)) {
$this->error = '不允許的文件類型';
return false;
}
return true;
}
/**
* 檢測是否是真實圖片
* @return bool
*/
protected
function checkTrueImg()
{
if ($this->imgFlag) {
if (!@getimagesize($this->fileInfo['tmp_name'])) {
$this->error = "不是真實圖片";
return false;
}
return true;
}
}
/**
* 檢測是否通過HTTP POST方式上傳的
* @return bool
*/
protected
function checkHTTPPost()
{
if (!is_uploaded_file($this->fileInfo['tmp_name'])) {
$this->error = "文件不是通過HTTP POST方式上傳的";
return false;
}
return true;
}
/**
* 顯示錯誤
*/
protected
function showError()
{
exit('<span style="color:red">' . $this->error . '</span>');
}
/**
* 檢測目錄不存在則創(chuàng)建
*/
protected
function checkUploadPath()
{
if (!file_exists($this->uploadPath)) {
mkdir($this->uploadPath, 0777, true);
}
}
/**
* 產(chǎn)生唯一字符串
* @return string
*/
protected
function getUniName()
{
return md5(uniqid(microtime(true), true));
}
/**
*上傳文件
*/
public
function uploadFile()
{
if ($this->checkError() && $this->checkExt()
&& $this->checkMime() && $this->checkTrueImg()
&& $this->checkHTTPPOST()
) {
$this->checkUploadPath();
$this->uniName = $this->getUniname();
$this->destination = $this->uploadPath . "/" . $this->uniName . '.' . $this->ext;
if (@move_uploaded_file($this->fileInfo['tmp_name'], $this->destination)) {
return $this->destination;
} else {
$this->error = "文件移動失敗";
$this->showError();
}
} else {
$this->showError();
}
}
}
test.php
<html>
<head><title></title></head>
<body>
<form action="doAction.php" method="post" enctype="multipart/form-data">
請選擇您要上傳的文件:<input type="file" name="myFile1"><br/>
<input type="submit" value="上傳文件">
</form>
</body>
</html>
doAction.php
<?php
header("content-type:text/html;charset=utf-8");
require_once 'upload.class.php';
$upload = new upload('myFile1','imooc');
$dest = $upload->uploadFile();
echo $dest;
?>
最后編輯于 :
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者