轉載:http://www.jiaoben8.cn/Article-id123.html
在做項目的時候,需要將上傳的壓縮包進行解壓,不難想象,這樣的功能我在沒接觸php之前還真沒想過,php有這能力?於是我在網上找了些資料,並且還看過關於解壓的視頻,視頻教程地址:http://www.56.com/u86/v_NzM5Mzk3ODc.html,
具體的實現代碼也給大家寫出來了...
<?php
$dir=getcwd(); //獲得路徑地址
$upload_url=$dir."/upload/"; //上傳文件的路徑
if($_POST['submit'])
{
$tmp_name=$_FILES[file][tmp_name]; //臨時文件名字
$new_name=$_FILES[file][name]; //非臨時文件名字
$file_name=time().$new_name; //對上傳文件進行加前綴的改名處理
move_uploaded_file($tmp_name,"upload/".$file_name); //把文件從臨時文件夾移動到指定位置,並進行改名處理!
$obj=new com("wscript.shell"); //調用wscript.shell組件
$obj->run("winrar x $upload_url//".$file_name." ".$dir."/jieya/",1,true); //執行shell命令解壓rar壓縮包
echo '<script>alert("上傳並解壓到指定文件夾成功!")</script>';
//unlink($file_name); 如果要進行刪除上傳文件操作,可執行此步
}
?>
<form action="" method="post" enctype="multipart/form-data">
選擇文件:<input name="file" type="file">
<input type="submit" name="submit" value="上傳並解壓"/>
</form>
其實,這段代碼我在我的本機上測試就會報錯,但是代碼是絕對是按教程上抄下來的,報錯原因很可能是我的系統有問題,因爲在其他機器並未報錯...,我就想着,既然代碼沒有問題,那放在服務器上試試看能行不?結果大失所望,一如既往的報錯,難道就沒有辦法了嗎?
原來在php本來就封裝了處理壓縮包的類,這是關於這個類的說明地址:http://php.chinaunix.net/manual/zh/class.ziparchive.php
找到了解決的方法,問題就迎刃而解了,直接上代碼
$ming=explode(".",$rename1);//$reaname1表示上傳壓縮包的文件名,例如:file_2012909.zip,通過php函數explode可以將(file_2012909)取出,不帶後綴名,取出後賦值與$ming這個變量
$ming=$ming[0];
$zip = new ZipArchive;//實例化ZipArchive這個類
if ($zip->open('../files/'.$rename1) === TRUE) {//使用 ZipArchive 的 open() 方法,打開已創建的 ZIP 歸檔。if 語句將用作簡單的錯誤控制
$zip->extractTo('../files/'.$ming);//解壓後,生成(file_2012909)文件夾,$ming這裏可是具體的文件名
$zip->close();//關閉
}
此方法只對zip壓縮包,所以在上傳之前可以做一個後綴名判斷,小弟不才,功能做的不算全面,如果您有更好的方法,希望能與你交流學習...