引用 | 编辑
dycheng81
2005-08-20 18:08 |
楼主
▼ |
||
![]() [此文章售价 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] ![]()
|
引用 | 编辑
fishingboy
2005-08-22 23:54 |
4楼
▲ ▼ |
下面是引用dycheng81于2005-08-20 18:08发表的 我要PHP程式自动将整个目录内容压缩成某档案+自动将资料库打包的程式(可分开)(赏1000雅币)急: 哇~~~赏金这么高啊~~~ 我有点疑问想请问? 可否把需求讲的详细一点.... 我对这么高的赏金有点心动.... 不过对于你(使用者)的需求不是很了解.... 关于档案压缩的部份.... 只是要把某资料夹里所有的档案压缩就行了对吗? 那有关link的部份,就直接当成档案压起来哦~~ 这样可以吗? 至于资料库的部份.... 不知道你指的打包是什么意思? 是像phpMyAdmin那样把资料库内容包装成 .sql档案(档案内容皆为sql语法,全部执行后可得到一样的资料库)吗? 还是说有另外的要求? 等您的答覆啰....感觉写这个程式应该会蛮好玩的.... 只是没有十足的把握能写得出来.... (压缩档案及汇出资料库都没碰过...) ![]() |
引用 | 编辑
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 ?> ![]() |
引用 | 编辑
chris710908
2005-09-17 16:18 |
7楼
▲ ▼ |
PHP程式自动将目录内容(包括子目录)压缩成单一档案
这边我看不太懂耶~~要加代码做成PHP页面吗 可以指点一下吗~不知道要把代码加在哪边 ![]() |
引用 | 编辑
dycheng81
2005-09-17 18:55 |
8楼
▲ ▼ |
就是建立一个php页面(也可用现有的)
加入以上function 然后用我所写的方法执行 就可以把一整个目录压所成一个.tar.gz的档案 然后下载回来用winrar解..... ![]() ![]() |
引用 | 编辑
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');这段要怎嚜执行说~~ 小弟笨了点~请帮个忙~谢谢 ----------------------------------------- ![]() |
引用 | 编辑
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去执行页面 ![]() |
引用 | 编辑
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执行网页后~目录下面没有产生压缩档案耶? 是哪边有错吗? ![]() |
引用 | 编辑
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'); ?> ![]() |
引用 | 编辑
xxxzzz
2005-09-22 19:30 |
13楼
▲ ▼ |
下面是引用chris710908于2005-09-17 23:31发表的 :tar不是linux的指令吗? windows应该没有这个指令吧? ![]() |
引用 | 编辑
warkinger
2005-11-16 15:14 |
15楼
▲ ▼ |
我想问楼主,这个方案好像用处不大..........
你是要用在那? 之前在别论坛看过,意思是缩短上传时间,压成一个档含目录,上传后解压,可是如果档案太大,执行会出现超时,还不如用FTP慢慢传就好,而且有的档案还要设定,目录属性,最后还不是要用FTP,跟本没必要 ![]() |
引用 | 编辑
dongjie815
2005-12-11 18:44 |
16楼
▲ ▼ |
有了这套程式以后就不愁资料毁损啦!!
感谢大大分享~ 赶紧来用看看啰^_^ ![]() |
引用 | 编辑
月光
2005-12-30 03:10 |
17楼
▲ ▼ |
不知道这个程序能不能在Windows上运行...买下来看看= =
下载后发现...还是没有定时被份功能@@|用不上呵呵不过还是感谢了﹋! ![]() |
引用 | 编辑
kenshin3333
2006-01-25 19:34 |
18楼
▲ ▼ |
这个工具很实际…可是…没钱丫…
![]() |
引用 | 编辑
martinyueh3
2006-02-21 19:43 |
19楼
▲ ▼ |
下面是引用warkinger于2005-11-16 15:14发表的 : webshell可以解决你的问题 问题是@@@记得要设密码.... ![]() |
引用 | 编辑
~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 ![]() |
引用 | 编辑
williamyii77
2010-12-01 21:47 |
27楼
▲ ▼ |
好文,送比你花花先
![]() |
引用 | 编辑
williamyii77
2010-12-02 19:52 |
28楼
▲ ▼ |
多谢大大分享
![]() |