我想让大家帮我改改手册中的文件上传处理,我想看看大家写成类时,大概思路是怎么样的?
代码如下:例子 38-2. 使文件上传生效请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。 <?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.$uploaddir = ' ar/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}echo 'Here is some more debugging info:';
print_r($_FILES);print "</pre>";?> 麻烦了
代码如下:例子 38-2. 使文件上传生效请查阅函数 is_uploaded_file() 和 move_uploaded_file() 以获取进一步的信息。以下范例处理由表单提供的文件上传。 <?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.$uploaddir = ' ar/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Possible file upload attack!\n";
}echo 'Here is some more debugging info:';
print_r($_FILES);print "</pre>";?> 麻烦了
解决方案 »
- php-5.4.10.tar.gz和php-5.4.10-Win32-VC9-x86.zip有什么区别?
- PHP socket通讯问题,如何 让服务器和客户端连接后,不断开进行通讯?
- mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
- php mail 函数
- php出现奇怪现象!!!帮忙~~
- 失恋了,散分...
- 求教:初学PHP,有什么建议,比如教程选择等.自己有做过一段时间的ASP
- 200分求购PHP网上书店源代码
- 请敎NT4.0 OPTION PACK 与 NT4.0 SERICE PACK的区别?
- html/css/js路径包含问题
- 这种访问怎样实现
- apache的端口问题
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.
class Uploads
{
var $uploaddir;
var $uploadfile; function Uploads($a,$b)
{
$this->uploaddir = $a;
$this->uploadfile = $a . basename($b['name']);
$this->movefile($b);
}
function movefile($b)
{
if (move_uploaded_file($b['tmp_name'], $uploadfile))
{
echo "File is valid, and was successfully uploaded.\n";
}
else
{
echo "Possible file upload attack!\n";
}
}
}
?><?
$shuizhe = new Uploads('/up/',$_FILES[$_POST['file']]);
?> 上传没有成功 上传完毕后 总输出这句Possible file upload attack!
* 提供对文件上传的的封装处理
*
*
*
* @package Plite.Lib
* @author ice_berg16(寻梦的稻草人)
* @copyright 2004-2006 [email protected]
* @version $Id: FileUploader.php 160 2006-12-30 08:04:31Z icesyc $
*/class FileUploader
{
//保存所有的上传文件列表
private $files = array(); /**
* 构造函数
*
* 将上传文件的数据保存在数组中,对于同名的数组,则分别产生新的序列
* 如<input type='file' name='file[]'/>
* <input type='file' name='file[]'/>
* 产生file1, file2的对应数组
*/
public function __construct()
{
foreach($_FILES as $key => $info)
{
if(is_array($info['name']))
{
foreach($info['name'] as $k => $v)
{
$inf = array(
"name" => $info['name'][$k],
"type" => $info['type'][$k],
"tmp_name" => $info['tmp_name'][$k],
"error" => $info['error'][$k],
"size" => $info['size'][$k]
);
$this->files[$key.$k] = new UploadFile($inf);
}
}
else
$this->files[$key] = new UploadFile($info);
}
} /**
* 返回指定名称的上传文件对象
*
* @param @string $name
* @return UploadFile对象
*/
public function getFile($name)
{
if(isset($this->files[$name]))
return $this->files[$name];
return null;
} /**
* 返回所有的上传文件对象数组
*
* @return Array
*/
public function getFiles()
{
return $this->files;
} /**
* 将所有的上传文件移动到指定文件夹
*
* @param $dir 要移动的目录
* @flag int OLD_NAME代表使用原来的文件名, RANDOM_NAME代表使用随机的文件名
*
* @return 返回一个路径列表
*/
public function move($dir, $flag=UploadFile::FILE_OLD_NAME)
{
foreach($this->files as $f)
{
if($n = $f->move($dir, $flag))
$path[] = $n;
}
return $path;
}
}/**
* 封装一个上传文件对象
*
* UploadFile是配合FileUploader一起使用的,单独使用时要注意
* 初始化时要将用$_FILES['filename']来构造,并且filename不能是数组
* $uf = new UploadFile($_FILES['filename']);
*
*
* @package Plite.Lib
* @author ice_berg16(寻梦的稻草人)
* @copyright 2004-2006 [email protected]
* @version $Id: FileUploader.php 160 2006-12-30 08:04:31Z icesyc $
*/class UploadFile
{
//保存上传文件的信息数组
private $file;
//移动时使用原始文件名
const FILE_OLD_NAME = 1; //移动时使用随机文件名
const FILE_RANDOM_NAME = 2; //构造函数
public function __construct($file)
{
$this->file = $file;
} /**
* 移动上传文件
*
* 可以使用UploadFile::FILE_RANDOM_NAME,UploadFile::FILE_OLD_NAME作为文件名
* 分别为随机名,原始文件名,使用新的文件名时要包括扩展名
*
* @param string $dir 目标目录
* @param int|string name
* @param string $prefix 文件名的前缀
* @return 如果成功返回上传后的新路径,否则返回false
*/
public function move($path, $name=self::FILE_OLD_NAME, $prefix='')
{
if(substr($path,-1) != "/" || substr($path,-1) != "\\")
$path .= "/";
if($name == self::FILE_RANDOM_NAME)
$path .= uniqid($prefix) . "." . $this->getExt();
elseif($name == self::FILE_OLD_NAME)
$path .= $prefix . $this->getName();
else
$path .= $prefix . $name;
if(file_exists($path))
throw new Exception("要上传的文件已经存在于目录中 => $path");
if(move_uploaded_file($this->file['tmp_name'], $path))
return $path;
return false;
}
//文件是否上传成功
public function uploadOK()
{
return $this->file['error'] == UPLOAD_ERR_OK;
} //取得扩展名
public function getExt()
{
return pathinfo($this->file['name'], PATHINFO_EXTENSION);
}
//使用魔法函数来取得文件的一些信息
public function __call($method, $arg)
{
if(substr($method,0,3) == "get")
{
$attr = strtolower(substr($method,3));
if(isset($this->file[$attr]))
return $this->file[$attr];
else
return null;
}
return false;
}
}
?>