工作需要,整理一下最近对php的学习经验,希望能对自己有帮助或者能帮助那些需要帮助的人。
thinkphp对文件的操作,相对来说比较简单,因为tp封装好了一个上传类Upload.class.php
废话不多说,直接上真的。
源码分享地址:http://pan.baidu.com/s/1qXuMGGk
建立一个数据库:
username:上传者。
time:上传时间
size:文件大小。
path:路径。
filename:上传的文件名。
savename:上传后保存的加密文件名称。
对文件的上传,操作,先建立可视化界面。
如图:
视图代码不贴了,核心代码如下:
但是提交的form表单有一个是必须声明的:
<form action="" method="post" enctype="multipart/form-data">
public function addFile(){
$data['username'] = I('name');
$data['time'] = time(); $config = array(
'maxSize'=> 31457280,
'rootPath' => './Static/',
'savePath'=>'',
'saveRule'=>'time',
'allowExts'=>'array()',
); $upload = new \Think\Upload($config); $info = $upload->upload();
if(!$info){
$this->error('添加失败......',U('Upload/index'));
}else{
$imgurl = '/Static/'.$info['path']['savepath'].$info['path']['savename'];
} $size = $info['path']['size']/1024;
$data['path'] = $imgurl;
$data['size'] = sprintf("%.2f", $size);
$data['filename'] = $info['path']['name'];
$data['savename'] = $info['path']['savename'];
$obj = M('upload'); $res = $obj->data($data)->add(); if($res){
$this->success('上传成功!!',U('Upload/index'));
}else{
$this->error('上传失败!!',U('Upload/index'));
}
}
点击提交,文件即可上传成功。
另外是文件的删除了,记住一个方法就可以很好解决一个问题,就是unlink();
代码为:
//文件删除
public function delFile(){
$where['id'] = I('id');
$obj = M('upload');
$list = $obj->where($where)->find();
if(empty($list)){
$this->error('文件不存在或者已经被删除',U('Upload/fileList'));
}else{
$del = $obj->where($where)->delete();
$path = $_SERVER['DOCUMENT_ROOT']."power".$list['path'];//找到文件地址,echo即可 $res = unlink($path);//删除文件
if($res){
$this->success('文件成功删除!!',U('Upload/fileList'));
}else{
$this->error('文件删除失败或者文件不存在!!',U('Upload/fileList'));
}
}
}
更新文件操作:
//文件的更新,编辑操作
public function editFileController(){
$where['id'] = I('id');
$oldpath = $_SERVER['DOCUMENT_ROOT']."power".I('oldpath');//获取原文件存放地址
unlink($oldpath); //更新文件操作
$config = array(//配置上传文件信息
'maxSize'=> 31457280,
'rootPath' => './Static/',
'savePath'=>'',
'saveRule'=>'time',
'allowExts'=>'array()',
); $upload = new \Think\Upload($config);
$info = $upload->upload();
if(!$info){
$this->error('文件更新失败......',U('Upload/index?$w here[id]'));
}else{
$imgurl = '/Static/'.$info['path']['savepath'].$info['path']['savename'];
} //更新的数据
$data['username'] = I('username');//文件上传者
$data['time'] = time();//文件更新日期
$data['path'] = $imgurl;//文件路径
$data['filename'] = $info['path']['name'];//文件名称 $obj = M('upload'); $res = $obj->where($where)->data($data)->save(); if($res){
$this->success('更新成功。。。',U('Upload/fileList'));
}else{
$this->error('更新失败。。。',U('Upload/fileList'));
}
}
下载文件操作:
//文件下载
public function downloadFile(){
$where['data'] = I('id');
$obj = M('upload');
$list = $obj->where($where)->find();
if(empty($list)){
$this->success('文件不存在或者已经被删除',U('Upload/fileList'));
}else{
$path = $_SERVER['DOCUMENT_ROOT']."power".$list['path'];//找到文件路径
$file_name = $list['filename'];
if(!file_exists($path)){
$this->error("文件不存在!",U('Upload/fileList'));
}
$fp = fopen($path,'r'); $file_size=filesize($path); //下载文件需要用到的头
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".$file_name);
$buffer=1024;
$file_count=0;
//向浏览器返回数据
while(!feof($fp) && $file_count<$file_size){
$file_con=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_con;
}
fclose($fp);
}
}
既可以成功的操作了。不足之处,请大家指正。