openSUSE之PHP学习之旅(9、上传并解压)

2011年05月29日 Linux, SUSE/openSUSE 暂无评论

曾在openSUSE之PHP学习之旅(4、文件上传)一文介绍过文件上传的方法。是采用move_uploaded_file来上传。

本次要做的是上传并解压文件,原理就是上传后在调用命令进行解压。当然我们依然可以利用move_uploaded_file来实现上传,不过本次在Linux,我们利用copy命令来实现。

我们可以先以ROOT的身份登录,或者在终端从普通用户切换,不过注意要用:su -  (中间有空格,这样保证不会因root读取普通用户的变量而出错,比如用gedit的时候会报错GLib-GIO:ERROR:gdbusconnection.c:2279:initable_init: assertion failed: (connection->initialization_error == NULL)

我们先在创建一个目录upload

linux-4k5v:mkdir /srv/www/htdocs/upload/

linux-4k5v:chmod 777 /srv/www/htdocs/upload/   (必须设置好权限,以免上传失败)

创建一个文件:upload.php

代码说明:把文件上传自linuxsight文件夹里并解压。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"
<html>
<body>
<?php
if (isset($_POST['submit'])){
$tname=$_FILES['upfile']['tmp_name']; //获取上传文件的临时路径
$nname=$_FILES['upfile']['name'];  //获取上传文件的名称
echo "路径:".$tname."<br />";
echo "名字:".$nname."<br />";
$path_info = pathinfo($nname);
echo "文件后缀:".$path_info['extension']."<br />";
if(!is_dir("linuxsight"))   {
mkdir("linuxsight");   //创建目录
chmod("linuxsight",0777);//改变权限
}
if($path_info['extension']=='zip'){
copy($tname,"linuxsight/temp.zip");//复制文件
exec("unzip -o linuxsight/temp.zip -d linuxsight/");//解压zip
exec("rm -f linuxsight/temp.zip");//删除
}else{
copy($tname,"linuxsight/temp.tar.gz");//复制文件
chdir("linuxsight");//更改执行目录
exec("tar -zxvf temp.tar.gz");//执行目录在当前,不需路经
exec("rm -f temp.tar.gz"); //删除
chdir("../");
}
//move_uploaded_file($tname,'linuxsight/'.$nname);
echo "上传成功";
}
?>
<form method="post" action="" enctype="multipart/form-data">
<input type="file" name="upfile"  size="20">&nbsp;
<input type="submit" name="submit" value="上传并解压">
<input type="reset" value="取消">
</form>
</body>
</html>

Linux最常见的压缩包是:zip和tar.gz  所以此代码也只是针对这2种情况。

(注:由于书写不规范而出现:Use of undefined constant - assumed 如果想去掉此报错,在代码开头加上 error_reporting(E_ERROR | E_WARNING | E_PARSE);)

附:windows下rar的解压:(使用PHP 预定义的Com组件加载Shell      命令:winrar   x  被解压文件  加压的位置)

$tname=$_FILES['upfile']['tmp_name']; //获取上传文件的临时路径  
$nname=$_FILES['upfile']['name']; //获取上传文件的名称  
$dir=getcwd();  
move_uploaded_file($tname,$nname);//移动文件  
$obj=new com("wscript.shell");//加载组件 获得解压  
echo "winrar x $dir\".$nname." ".$dir;
$obj->run("winrar x $dir\".$nname." ".$dir ,1,true);//上传解压文件  
unlink($nname);//删除文件

给我留言