php實現上傳壓縮包後自動解壓

轉載: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壓縮包,所以在上傳之前可以做一個後綴名判斷,小弟不才,功能做的不算全面,如果您有更好的方法,希望能與你交流學習...

發佈了6 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章