引用 | 編輯
dycheng81
2005-08-20 18:08 |
樓主
▼ |
||
x0
PHP程式自動將目錄內容(包括子目錄)壓縮成單一檔案-(*.tar.gz)(用WINRAR解)(原創)[此文章售價 5 雅幣已有 114 人購買]若發現會員採用欺騙的方法獲取財富,請立刻舉報,我們會對會員處以2-N倍的罰金,嚴重者封掉ID! PHP程式直接備份還原整個資料庫(Mysql)(原創) 需建立6個檔案,放在相同目錄 再建立一個空目錄 sql 可依功能需求不同上傳不同檔案,當然全上傳是最好.... [此文章售價 5 雅幣已有 114 人購買]若發現會員採用欺騙的方法獲取財富,請立刻舉報,我們會對會員處以2-N倍的罰金,嚴重者封掉ID! 以下為歷史紀錄 複製程式 [color=silver] 請問有無PHP程式執行之後自動將整個目錄內容壓縮成某檔案(有賞) 獎金已經累積到2000雅幣 [ s:361] 我寫過....但是不成功... 賞200雅幣+花20朵(前題是你回文數要大於20) [ quote] $d = dir("/usr/home/server/home".$dir); $entry = $d -> read(); $entry = $d -> read(); while($entry = $d -> read()){ echo "<a href=\"files/".$dir."/".$entry."\">".$entry."</a><br>\n"; } $d -> close(); gzputs($d,"XXX.gz")[/quote] 還有ㄧ樣 如果有輸入資料庫帳密跟名稱自動將資料庫打包的程式 懸賞100雅幣+10朵鮮花 [ s:361] ------------ 哇!大家都好大方喔 我在加注400雅幣(我有另外的分身^^某版豬) 獎金累積到2000了喔 ------------ 關於檔案壓縮的部份.... 只是要把某資料夾裡所有的檔案壓縮就行了對嗎? 那有關link的部份,就直接當成檔案壓起來哦~~ 這樣可以嗎? 是的 但是我要再freebsd下跑的php程式 5樓 用PHP制作zip壓縮程式 使用方法 $z = new PHPZip(); //新建立一個zip的類 方法一: $z -> Zip("", "out1.zip"); //添加目前工作目錄和子目錄下的所有檔案 方法二: $files=array(Ƈ.txt','gb.txt'); $files[]=Ƌ.txt' $z -> Zip($files, "out2.zip"); //添加文件清單 方法三: $z -> Zip("/usr/local/sext/", "out3.zip"); //添加指定目錄 以下是代碼: <?php # # PHPZip v1.2 by Sext (<a href="mailto:sext@neud.net">[email]sext@neud.net[/email]</a>) 2002-11-18 # (Changed: 2003-03-01) # # Makes zip archive # # Based on "Zip file creation class", uses zLib # # Examples in sample1.php, sample2.php and sample3.php # class PHPZip { function Zip($dir, $zipfilename) { if (@function_exists('gzcompress')) { $curdir = getcwd(); if (is_array($dir)) { $filelist = $dir; } else { $filelist = $this -> GetFileList($dir); } if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); else chdir($curdir); if (count($filelist)>0) { foreach($filelist as $filename) { if (is_file($filename)) { $fd = fopen ($filename, "r"); $content = fread ($fd, filesize ($filename)); fclose ($fd); if (is_array($dir)) $filename = basename($filename); $this -> addFile($content, $filename); } } $out = $this -> file(); chdir($curdir); $fp = fopen($zipfilename, "w"); fwrite($fp, $out, strlen($out)); fclose($fp); } return 1; } else return 0; } function GetFileList($dir) { if (file_exists($dir)) { $args = func_get_args(); $pref = $args[1]; $dh = opendir($dir); while($files = readdir($dh)) { if (($files!=".")&&($files!="..")) { if (is_dir($dir.$files)) { $curdir = getcwd(); chdir($dir.$files); $file = array_merge($file, $this -> GetFileList("", "$pref$files/")); chdir($curdir); } else $file[]=$pref.$files; } } closedir($dh); } return $file; } var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * * @param integer the current Unix timestamp * * @return integer the current date in a four byte DOS format * * @access private */ function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } // end of the 'unix2DosTime()' method /** * Adds "file" to archive * * @param string file contents * @param string name of the file in the archive (may contains the path) * @param integer the current timestamp * * @access public */ function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= $hexdtime; // last mod time and date // "local file header" segment $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $fr .= pack('v', strlen($name)); // length of filename $fr .= pack('v', 0); // extra field length $fr .= $name; // "file data" segment $fr .= $zdata; // "data descriptor" segment (optional but necessary if archive is not // served as file) $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize // add this entry to array $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); // now add to central directory record $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= $hexdtime; // last mod time & date $cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('v', strlen($name) ); // length of filename $cdrec .= pack('v', 0 ); // extra field length $cdrec .= pack('v', 0 ); // file comment length $cdrec .= pack('v', 0 ); // disk number start $cdrec .= pack('v', 0 ); // internal file attributes $cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header $this -> old_offset = $new_offset; $cdrec .= $name; // optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec; } // end of the 'addFile()' method /** * Dumps out file * * @return string the zipped file * * @access public */ function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall pack('V', strlen($ctrldir)) . // size of central dir pack('V', strlen($data)) . // offset to start of central dir "\x00\x00"; // .zip file comment length } // end of the 'file()' method } // end of the 'PHPZip' class ?> 這個只能ㄧ層目錄,不能壓子目錄 -------------3樓 哇~~~賞金這麼高啊~~~ 我有點疑問想請問? 可否把需求講的詳細一點.... 我對這麼高的賞金有點心動.... 不過對於你(使用者)的需求不是很了解.... 關於檔案壓縮的部份.... 只是要把某資料夾裡所有的檔案壓縮就行了對嗎? 那有關link的部份,就直接當成檔案壓起來哦~~ 這樣可以嗎? 至於資料庫的部份.... 不知道你指的打包是什麼意思? 是像phpMyAdmin那樣把資料庫內容包裝成 .sql檔案(檔案內容皆為sql語法,全部執行後可得到一樣的資料庫)嗎? 還是說有另外的要求? 等您的答覆囉....感覺寫這個程式應該會蠻好玩的.... 只是沒有十足的把握能寫得出來.... (壓縮檔案及匯出資料庫都沒碰過...) [/color] x2
|
引用 | 編輯
fishingboy
2005-08-22 23:54 |
4樓
▲ ▼ |
下面是引用dycheng81於2005-08-20 18:08發表的 我要PHP程式自動將整個目錄內容壓縮成某檔案+自動將資料庫打包的程式(可分開)(賞1000雅幣)急: 哇~~~賞金這麼高啊~~~ 我有點疑問想請問? 可否把需求講的詳細一點.... 我對這麼高的賞金有點心動.... 不過對於你(使用者)的需求不是很了解.... 關於檔案壓縮的部份.... 只是要把某資料夾裡所有的檔案壓縮就行了對嗎? 那有關link的部份,就直接當成檔案壓起來哦~~ 這樣可以嗎? 至於資料庫的部份.... 不知道你指的打包是什麼意思? 是像phpMyAdmin那樣把資料庫內容包裝成 .sql檔案(檔案內容皆為sql語法,全部執行後可得到一樣的資料庫)嗎? 還是說有另外的要求? 等您的答覆囉....感覺寫這個程式應該會蠻好玩的.... 只是沒有十足的把握能寫得出來.... (壓縮檔案及匯出資料庫都沒碰過...) x0 |
引用 | 編輯
xxxzzz
2005-08-23 18:16 |
5樓
▲ ▼ |
本來要寫寫看...找資料時..有似曾相似的感覺
忽然想起以前似乎研究過 結果一找...果真有玩過... 不過最後也沒自己寫出來... 倒是收集到一個class...如下 (不是自己寫的...只求一朵花 ) 用PHP制作zip壓縮程式 使用方法 $z = new PHPZip(); //新建立一個zip的類 方法一: $z -> Zip("", "out1.zip"); //添加目前工作目錄和子目錄下的所有檔案 方法二: $files=array(Ƈ.txt','gb.txt'); $files[]=Ƌ.txt' $z -> Zip($files, "out2.zip"); //添加文件清單 方法三: $z -> Zip("/usr/local/sext/", "out3.zip"); //添加指定目錄 複製程式 <?php # # PHPZip v1.2 by Sext ([email]sext@neud.net[/email]) 2002-11-18 # (Changed: 2003-03-01) # # Makes zip archive # # Based on "Zip file creation class", uses zLib # # Examples in sample1.php, sample2.php and sample3.php # class PHPZip { function Zip($dir, $zipfilename) { if (@function_exists('gzcompress')) { $curdir = getcwd(); if (is_array($dir)) { $filelist = $dir; } else { $filelist = $this -> GetFileList($dir); } if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); else chdir($curdir); if (count($filelist)>0) { foreach($filelist as $filename) { if (is_file($filename)) { $fd = fopen ($filename, "r"); $content = fread ($fd, filesize ($filename)); fclose ($fd); if (is_array($dir)) $filename = basename($filename); $this -> addFile($content, $filename); } } $out = $this -> file(); chdir($curdir); $fp = fopen($zipfilename, "w"); fwrite($fp, $out, strlen($out)); fclose($fp); } return 1; } else return 0; } function GetFileList($dir) { if (file_exists($dir)) { $args = func_get_args(); $pref = $args[1]; $dh = opendir($dir); while($files = readdir($dh)) { if (($files!=".")&&($files!="..")) { if (is_dir($dir.$files)) { $curdir = getcwd(); chdir($dir.$files); $file = array_merge($file, $this -> GetFileList("", "$pref$files/")); chdir($curdir); } else $file[]=$pref.$files; } } closedir($dh); } return $file; } var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; /** * Converts an Unix timestamp to a four byte DOS date and time format (date * in high two bytes, time in low two bytes allowing magnitude comparison). * * @param integer the current Unix timestamp * * @return integer the current date in a four byte DOS format * * @access private */ function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } // end if return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } // end of the 'unix2DosTime()' method /** * Adds "file" to archive * * @param string file contents * @param string name of the file in the archive (may contains the path) * @param integer the current timestamp * * @access public */ function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; // ver needed to extract $fr .= "\x00\x00"; // gen purpose bit flag $fr .= "\x08\x00"; // compression method $fr .= $hexdtime; // last mod time and date // "local file header" segment $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $c_len = strlen($zdata); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize $fr .= pack('v', strlen($name)); // length of filename $fr .= pack('v', 0); // extra field length $fr .= $name; // "file data" segment $fr .= $zdata; // "data descriptor" segment (optional but necessary if archive is not // served as file) $fr .= pack('V', $crc); // crc32 $fr .= pack('V', $c_len); // compressed filesize $fr .= pack('V', $unc_len); // uncompressed filesize // add this entry to array $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); // now add to central directory record $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; // version made by $cdrec .= "\x14\x00"; // version needed to extract $cdrec .= "\x00\x00"; // gen purpose bit flag $cdrec .= "\x08\x00"; // compression method $cdrec .= $hexdtime; // last mod time & date $cdrec .= pack('V', $crc); // crc32 $cdrec .= pack('V', $c_len); // compressed filesize $cdrec .= pack('V', $unc_len); // uncompressed filesize $cdrec .= pack('v', strlen($name) ); // length of filename $cdrec .= pack('v', 0 ); // extra field length $cdrec .= pack('v', 0 ); // file comment length $cdrec .= pack('v', 0 ); // disk number start $cdrec .= pack('v', 0 ); // internal file attributes $cdrec .= pack('V', 32 ); // external file attributes - 'archive' bit set $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header $this -> old_offset = $new_offset; $cdrec .= $name; // optional extra field, file comment goes here // save to central directory $this -> ctrl_dir[] = $cdrec; } // end of the 'addFile()' method /** * Dumps out file * * @return string the zipped file * * @access public */ function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall pack('V', strlen($ctrldir)) . // size of central dir pack('V', strlen($data)) . // offset to start of central dir "\x00\x00"; // .zip file comment length } // end of the 'file()' method } // end of the 'PHPZip' class ?> x1 |
引用 | 編輯
chris710908
2005-09-17 16:18 |
7樓
▲ ▼ |
PHP程式自動將目錄內容(包括子目錄)壓縮成單一檔案
這邊我看不太懂耶~~要加代碼做成PHP頁面嗎 可以指點一下嗎~不知道要把代碼加在哪邊 x0 |
引用 | 編輯
dycheng81
2005-09-17 18:55 |
8樓
▲ ▼ |
就是建立一個php頁面(也可用現有的)
加入以上function 然後用我所寫的方法執行 就可以把一整個目錄壓所成一個.tar.gz的檔案 然後下載回來用winrar解..... x0 |
引用 | 編輯
chris710908
2005-09-17 19:05 |
9樓
▲ ▼ |
我適用WINDOWS系統
function dictgz('test','C:\Program Files\EasyPHP1-7\www\phpwind'){ $file='test' $dic='C:\Program Files\EasyPHP1-7\www\phpwind' $cmd="tar zcvf ".$file.".tar.gz ".$dic; system("$cmd");} 是將代碼改成這樣存成PHP頁面~~然後再用IE執行嗎? 不是很懂dictgz('test','/usr/local/home');這段要怎嚜執行說~~ 小弟笨了點~請幫個忙~謝謝 ----------------------------------------- x0 |
引用 | 編輯
dycheng81
2005-09-17 22:04 |
10樓
▲ ▼ |
不是的
前面的邏輯不要去動他 function dictgz($file="dict",$dic){ $file='test' $dic='/usr/local/home' $cmd="tar zcvf ".$file.".tar.gz ".$dic; system("$cmd");} 要改的是這一段 dictgz('test','C:\Program Files\EasyPHP1-7\www\phpwind'); 所以要一個頁面能執行就是這樣打 function dictgz($file="dict",$dic){ $file='test' $dic='/usr/local/home' $cmd="tar zcvf ".$file.".tar.gz ".$dic; system("$cmd");} dictgz('test','C:\Program Files\EasyPHP1-7\www\phpwind'); 存成php 然後用ie去執行頁面 x0 |
引用 | 編輯
chris710908
2005-09-17 23:31 |
11樓
▲ ▼ |
PHP頁面如下~
<?php function dictgz($file="dict",$dic){ $file='test' $dic='/usr/local/home' $cmd="tar zcvf ".$file.".tar.gz ".$dic; system("$cmd");} dictgz('test','C:\Program Files\EasyPHP1-7\www\phpwind');?> 然後IE執行網頁後~目錄下面沒有產生壓縮檔案耶? 是哪邊有錯嗎? x0 |
引用 | 編輯
dycheng81
2005-09-21 15:43 |
12樓
▲ ▼ |
下面是引用chris710908於2005-09-17 23:31發表的 :複製程式 <?php function dictgz($file="dict",$dic){ $cmd="tar zcvf ".$file.".tar.gz ".$dic; system("$cmd"); } dictgz('test','C:\Program Files\EasyPHP1-7\www\phpwind'); ?> x0 |
引用 | 編輯
xxxzzz
2005-09-22 19:30 |
13樓
▲ ▼ |
下面是引用chris710908於2005-09-17 23:31發表的 :tar不是linux的指令嗎? windows應該沒有這個指令吧? x0 |
引用 | 編輯
warkinger
2005-11-16 15:14 |
15樓
▲ ▼ |
我想問樓主,這個方案好像用處不大..........
你是要用在那? 之前在別論壇看過,意思是縮短上傳時間,壓成一個檔含目錄,上傳後解壓,可是如果檔案太大,執行會出現超時,還不如用FTP慢慢傳就好,而且有的檔案還要設定,目錄屬性,最後還不是要用FTP,跟本沒必要 x0 |
引用 | 編輯
dongjie815
2005-12-11 18:44 |
16樓
▲ ▼ |
有了這套程式以後就不愁資料毀損啦!!
感謝大大分享~ 趕緊來用看看囉^_^ x0 |
引用 | 編輯
月光
2005-12-30 03:10 |
17樓
▲ ▼ |
不知道這個程序能不能在Windows上運行...買下來看看= =
下載後發現...還是沒有定時被份功能@@|用不上呵呵不過還是感謝了﹋! x0 |
引用 | 編輯
kenshin3333
2006-01-25 19:34 |
18樓
▲ ▼ |
這個工具很實際…可是…沒錢丫…
x0 |
引用 | 編輯
martinyueh3
2006-02-21 19:43 |
19樓
▲ ▼ |
下面是引用warkinger於2005-11-16 15:14發表的 : webshell可以解決你的問題 問題是@@@記得要設密碼.... x0 |
引用 | 編輯
~Jimmy~
2007-03-11 10:58 |
21樓
▲ ▼ |
下面是引用andyde於2007-03-2 04:38發表的 : 錯誤碼: Fatal error: Call to undefined function: file_get_contents() in c:\appserv\www\data_revert.php on line 5 x0 |
引用 | 編輯
williamyii77
2010-12-01 21:47 |
27樓
▲ ▼ |
好文,送比你花花先
x0 |
引用 | 編輯
williamyii77
2010-12-02 19:52 |
28樓
▲ ▼ |
多謝大大分享
x0 |