我們今天為大家帶來的是關於具體代碼如下:
- <?php
- /**
- * 我的文件上傳類
- *
- * 未完成的功能:
- * 1.對目標目錄是否存在的判斷
- * 2.如果上傳時出現重名,自動重命名
- *
- * @author M.Q. <[url]www.mengqi.net[/url]>
- */
- class upload
- {
- /**
- * PHP上傳類upload.php上傳文件的信息,此值由構造函數取得,如果上傳文件失敗或出錯或未上傳,則此值為false
- *
- * @var array
- */
- private $file = false;
- /**
- * 構造函數:取得上傳文件的信息
- *
- * 如果在上傳文件的工程中發生錯誤,那麼出錯的文件不會放在結果中返回,結果中的文件都是可用的
- *
- * @param string $tag form表單中<input>標簽中name屬性的值,例<input name="p" type="file">
- *
- * 例1,上傳單個文件:
- * <input name="upfile" type="file">
- *
- * 例2,上傳多個文件:
- * <input name="upfile[]" type="file">
- * <input name="upfile[]" type="file">
- *
- * 結果(保存在$file變量中)如下:
- *
- * array(
- * [0] => array(
- * 'name' => 'abc.txt'
- * 'type' => 'text/plain’
- * 'tmp_name' => '/tmp/phpgxecCb'
- * 'error' => 0
- * 'size' => 62
- * )
- * [1] => array(
- * 'name' => 'abc.txt'
- * 'type' => 'text/plain’
- * 'tmp_name' => '/tmp/phpgxecCb'
- * 'error' => 0
- * 'size' => 62
- * )
- * )
- */
- public function __construct($tag)
- {
- $file = $_FILES[$tag];
- if (!isset($file) || empty($file))
- {
- return; //沒有上傳文件
- }
- $num = count($file['name']); //PHP上傳類upload.php上傳文件的個數
- $data = array(); //用來保存上傳文件的信息的數組
- //上傳了多個文件
- if ($num > 1)
- {
- for($i = 0; $i < $num; $i++)
- {
- $d = array();
- $d['name'] = $file['name'][$i];
- $d['type'] = $file['type'][$i];
- $d['tmp_name'] = $file['tmp_name'][$i];
- $d['error'] = $file['error'][$i];
- $d['size'] = $file['size'][$i];
- if ($d['error'] == 0)
- {
- $data[] = $d;
- }
- else
- {
- @unlink($d['tmp_name']);
- }
- }
- }
- //只上傳了一個文件
- else
- {
- $d = array();
- $d['name'] = $file['name'];
- $d['type'] = $file['type'];
- $d['tmp_name'] = $file['tmp_name'];
- $d['error'] = $file['error'];
- $d['size'] = $file['size'];
- if ($d['error'] == 0)
- {
- $data[] = $d;
- }
- else
- {
- @unlink($d['tmp_name']);
- }
- }
- if (empty($data)) return;
- $this -> file = $data; //保存上傳文件的信息
- }
- /**
- * 將上傳的文件從臨時文件夾移動到目標路徑
- *
- * @param array $src 文件信息數組,是$file數組的其中一個元素(仍然是數組)
- * @param string $destpath 上傳的目標路徑
- * @param string $filename 上傳後的文件名,如果為空,則使用上傳時的文件名
- * @return bool
- */
- public function save($src, $destpath, $filename = null)
- {
- $srcTName = $src['tmp_name']; //原始上傳文件的臨時文件名
- $srcFName = $src['name']; //原始文件名
- //如果$filename參數為空,則使用上傳時的文件名
- if (empty($filename))
- {
- $filename = $srcFName;
- }
- //$dest是文件最終要復制到的路徑和文件名
- if (empty($destpath))
- {
- $dest = $filename;
- }
- else
- {
- //修正路徑中的斜槓,將末尾的修改為/,如果末尾不是也不是/,則給末尾添加一個/
- $pathend = $destpath[strlen($destpath) - 1]; //上傳的目標路徑的最後一個字符
- if ($pathend == '\')
- {
- $dest = substr_replace($destpath, '/', strlen($destpath)-1).$filename;
- }
- else if ($pathend != '/')
- {
- $dest = $destpath.'/'.$filename;
- }
- else
- {
- $dest = $destpath.$filename;
- }
- }
- //上傳文件成功
- if (@move_uploaded_file($srcTName, $dest))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- /**
- * 取得上傳文件的信息
- *
- * @return array
- */
- public function getFileInfo()
- {
- return $this->file;
- }
- }
- $a = new upload('upfile');
- $fileinfo = $a -> getFileInfo();
- if ($fileinfo == false)
- {
- echo '沒有上傳文件!';
- exit;
- }
- for($i = 0; $i < count($fileinfo); $i++)
- {
- echo '正在上傳 '.$fileinfo[$i]['name'].' ';
- if ($a -> save($fileinfo[$i], 'upload')) echo '完畢';
- else echo '失敗';
- echo '<br>';
- }
- ?>
以上代碼就是關於PHP上傳類upload.php的具體使用方法。