用php写可实现打包下载的类phpzip

2009年8月22日 无风的飘逸 2 条评论

这个程序在打包单层文件夹下的文件时是正常的,但是在打包内嵌多层文件夹时会出错

<?php
#
# PHPZip v1.2 by Sext (sext@neud.net) 2002-11-18
# (Changed: 2003-03-01)
#

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 descrīptor" 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

$zip = new PHPZip();
$dir = "E:/webroot/mailext/upload/cxh/a/";
$zipfilename = "a.zip";
$zip->Zip($dir,$zipfilename);
?>

Share
分类: PHP 标签:

SEO如何做外链

2009年8月21日 无风的飘逸 没有评论

alexa排名重不重要,但是怎么才能将alexa排名提高了,重要的方法就是提高外链,可以说,做外链是广大站长朋友最为头痛的事情了,因为大家深知,在网站本身的基础不错的情况下,同类别的网站我们能够比拼的就只有外部链接了。[url]http://www.alexa.com/data/details/editor?type=rl&url=down.vc[/url],看下这个站现在的排名。
那么,如何一步一步有效建设外链呢,下面是我自己总结的经验。
在做外链的时候,我们应该注意以下两个方面:
第一,外链贵在精,不是完全靠量来支撑的
第二,是外链的有效性,有时候看着别人给加了链接,但其实这个链接没有用。这个我要说一点:如果在链接后面加了,nofollow这样的语句的时候,那这个链接没有作用了,表明的意思是非本站本意.
下面我说一下,增加外链的途径:
第一点,提交网址目录站 在这个里面,最为经典的是:dmoz目录 加入这个目录是比较难的,这个网址目录是非常具有权威性的,所以加进去相对也就比较难了,一般要一个月一个流程,在申请之后,应该多注意下你的邮箱。
其实,除了这个权威的网址目录以外,还有好些网址目录。比如有265,hao123等,这样的资源大家以后多去总结,把那些那加进去的网址目录都存储起来,这就是我们的资源了,这是第一点,提交网址目录。
第二点,互惠链接交换,这个工程是比较大的,也要比较长远的去做。首先,我们要去收集那些对你有用的网站,然后把他们存储起来,然后制定一个计划,把这些收集到网站放到一个表格里面,然后做好计划,每天谈几个链接,再谈的时候是有技巧的,争取花言巧语,把链接争取过来,我当时做[url]www.p2pqvod.cn[/url]这个站时,就是这样,在收集这些网站的时候,要注意一下几点:
(一)与同行做链接:对于各大搜索引擎的来说,对于外链的相关性非常青睐,相关性强的链接,要比不相关的链接,权重高出好多倍。
(二)与pr值高的网站做链接:高pr的站意味权重比较高,与高pr的网站链接对与提高网站的pr是非常有意义的,为你继续找链接提供资本。
(三)与经常更新的网站做链接:经常更新的网站,蜘蛛经常来抓取,蜘蛛在抓取更新的页面的时候,也就能抓取到我们的页面。
(四)质量比数量重要。就是相关性要强,不要太在乎量有多少。
(五)链接的添加。要遵循循序渐进的过程。不要三天打鱼两天晒网,想起来做,想不起来就不做。那样是不好的。
在交换完链接之后,我们应该主要监控:
监控就包括,看给你做链接的网站是否被惩罚或者可能被惩罚,给你做的链接一定是文本形式的,而这个文本一定是跟你的网站主题相关的,跟你想推的主关键词一致。检查是否有 nofollow 语句,关于这个语句的详细如有不懂的,回头到论坛里面看详细的,这了就不再细说了。
上面讲了两点添加外链的方法:一,提交到网址目录
二,互惠链接交换
互换链接交换的注意事项
下面讲第三点:高质量的文章
又称软文,写软文,内容要能引起读者的兴趣。然后发表到相关性强,权重高的网站去。比如说:我以前就常写一些下载网站如何优化网站相关方面的文章,最后被很多权重高的网站转载,收到很好的效果!呵呵 推广的时候,要带上自己网站的链接,但我要声明一点,带链接不要加的太漏骨,不要赤裸裸的。
这种高质量的软文在对于外链的增加上,特别有帮助的,尤其是你的文采好,那你的文章会被反复转摘的,每一次转摘都可以给你带来链接。
第四点,提交到新闻源。在新闻源网站上写上你网站的文章,或者写一部分。然后提交到新闻源服务商(大家可以想到百度新闻),其他的还有好些,大家就在生活中积累吧。
第五点:善于助人。帮助那些朋友们解决一些他们的难题。
第六点:从权重高的网站如:.edu .org ,gov这样的网站获得链接。教育类网站和公益性组织站通常都有比较高的权重。
第七,论坛和博客的链接。找论坛发帖,找博客做沙发,效果也会比较好。
第八,提交到社会化的书签网站。现在有了很多的网站收藏夹,比如google的收藏夹,就在google的工具条上,使用起来很方便,你可能还不知道他对SEO还有作用的吧

Share
分类: SEO 标签:

【传纪】传说中的谷歌炸弹正在试验中

2009年8月21日 无风的飘逸 没有评论

  谷歌炸弹,这个东西很好玩,如果你想给别人的网站做他意想不到的关键字从而使TA吃惊的话,那么就使用谷歌炸弹吧。
  比如,我现在要给我是阿布这个网站埋一个叫做“周玉萍”的炸弹,那么我只要到处去挂“周玉萍”这样的链接,使google在http://www.imabu.com/about/这个网站的锚点项中存在“周玉萍”这样的关键字,那么我的任务就大功告成了!
  我们简单地了解一下谷歌炸弹吧:一些人利用谷歌来提升有关他人不利报道的文章或网页的点击率,以此让搜索者能更容易找到这些文章或网页的方法称之为“谷歌炸弹”。
  比如在美国争夺国会控制权的选战中,一些民主党支持者利用“谷歌炸弹”来提升攻击共和党的文章的点击率,让搜索者能更容易找到这些文章。一些人利用这一手段,成功地将总统布什和“悲惨失败”四个字联系了起来,搜索者只要在英文谷歌网站上输入短语“悲惨失败(Miserable failure)”,就会被引导到白宫网站写有布什简历的页面上。
  而在2007年1月份,以色列总理奥尔默特也同样沦为“谷歌炸弹”攻击对象。搜索者只要在谷歌上用希伯来文输入“悲惨失败”,就会被引导到以色列官方网站写有奥尔默特简历的页面上。
  那么,我就开始啦,我现在就开始在我的博客中,我的外链资源中,还有其它一些可挂外链的网站挂上这样的一个外链——周玉萍,看看若干天之后,在谷歌上搜索“周玉萍”这三个字,首页结果中会不会找到http://www.imabu.com/about/呢?试目以待吧!

Share
分类: 邹清水 标签:

用了好几年傲游了,最近发现它不好用了,改用火狐

2009年8月20日 无风的飘逸 1 条评论

  现在浏览器多种多样,IE就不用说了,有点搓,本来用ie6还可以忍耐忍耐,升到IE7之后就实在忍受不了其界面和反应速 度了。选择真是件很头痛的事情。用了好几年傲游了,最近发现它不好用了,改用火狐。
  继 续换。这次换了firefox。之前曾经三换三卸。主要问题是用惯了遨游,不太习惯firefox的功能。这次下了决心告别遨游,才耐下心来好好扩展一下 功能。很简单,选择了几个插件,在操作习惯上终于符合了遨游。并且在扩展的过程中caoq发现firefox原来真是相当的强大,看来以前错怪它了。

caoq装了下列的一些插件,可以弥补的firefox的一些不足。这是只是常用的功能,如果想要扩展更多,可以访问这里查找

1.第一要解决的就是拖拽打开问题了。可以安装这个扩展。Easy DragToGo 1.1.2.3。功能很多,可以自定义设置。

2.双击打开和关闭标签功能。(没这个感觉真的很不爽) Tab Clicking Options 0.6.9 同上面的插件一样,可以设置定义多种方式。

3.适应IE核心,因为有些网站的功能不支持firefox,幸好有这个插件。Coral IE Tab 0.9.20090228 可以随时切换任意标签页用IE核心浏览器打开。解决了这个问题

4.外部下载工具。firefox默认是不能用外部工具下载。装了这个之后flashgot,快车,迅雷都可以用。其实这个问题也可以用3中扩展解决。只要把要下载的网页转换用ie核心打开就可以正常下载了。

  caoq装上面的四个插件之后功能基本满足我的需求了。当然还有很多有用的插件可以选择安装。比如searchstatus,查看打开网站的PR和排名。这个确实比遨游的好用多了。比如gladder,可以用来爬GFW等等。
  本文转自荷包蛋博客,原文链接:http://www.hebaodans.com/index.php/2009/07/cong-you-dao-f-i-r-e-f-o-x-mi-bu-f-i-r-e-f-o-x-gong-neng-de-ji-ge-jian-dan-de-cha-jian/

Share
分类: 邹清水 标签:

【zen cart】如何清除产品库中的多余信息

2009年8月20日 无风的飘逸 没有评论

长期使用zen cart之后,会发现前台会显示出一些N久之前上的产品,这些产品多数都是因为某种原因已经下架了,而这样的产品信息绝不在少数,那么怎么清除这样的产品信息呢?在这里我介绍一个很快捷的方法。
我这里有一个SQL文件——cleanzenproducts.rar,在数据库中运行它将成功清理所有ZEN CART中无用的产品信息。

Share
分类: 邹清水 标签:

【转】戏剧——日常思考

2009年8月20日 无风的飘逸 1 条评论

时间:猴年马月
人物:X(先生)、M(先生)、S(先生、思维者)、P(女士)
背景:M先生中意P女士、X先生和M先生是死党、P女士和X先生关系如兄弟般……

画面一:(地点:户外)
  X君:P女士,这么巧。
  P:哦是啊,好巧。
  X君:对了,中午记得把事情先处理完,啊?
  P:哦……
(幕后词:这叫心有灵犀还是事先说好的呢?)

画面2:
  S君:X君,听说P君从京城回来啦?
  X君:对啊,刚回。
  S君:早上就到了?
  X君:是的。

画面3:
  S君:P君,居然能在中午看见你,真是太神奇了!
  P:没有啦,中午先做完该做的事情,晚上要出去转转。
  S君:不是转转那么简单吧?
  P:你想要多复杂?不信拉倒!

画面4:
  S君:晚上一个人都看不见,见鬼了?
  S君2:不对啊,今天的事情有点诡异。
  S君:不要想,想这么搞什么?
  S君2:第一、X君和P似乎约好了,所以才会有上午的默契事件。
  S君:……
  S君2:第二,M君回来了,那么按常理来说在他的圈子里必然会有一次小型聚会——小别胜XX嘛。
  S君:……
  S君2:第三,晚上P和X君一同消失,加上他们和M君的关系可以反过来验证了上面的两条,而上面的两条也可以解释第三条(本条),根据巧合率来判断P、M、X现在在一起聚会的可能性应该是77%以上,这时候如果M君有其它值得庆祝的事情的话,可能性就上升为90%以上。
  S君:那我是不是应该发信息祝贺一下M君呢,至少应该欢迎一下M君的回来吧?
  S君2:千万不可,你这样只会让事态变得尴尬。
  S君:那我只能在心中默默地给M君祝福啦,祝M君“天天开心,事业有成”。

                                                                                                             ——谢幕

Share
分类: 邹清水 标签:

【新闻】中日共同历史研究认定南京大屠杀等属实

2009年8月20日 无风的飘逸 没有评论

据中国日报网中国在线消息:英文《中国日报》报道:中日政府联合组织的“中日共同历史研究委员会”经过三年努力,即将在九月发布中日古代及近代史研究报告,宣布日本侵华及南京大屠杀等历史属实,中国日本史学会会长汤重南昨天在社科院发布《日本发展报告》时向《中国日报》透露了这一消息。
  “日本学者承认日本在南京屠杀了无辜的市民,也承认包括七七事变和九一八事变在内的侵华历史。在这些事情的定性上我们已经没有问题,”汤重南说。但是他说目前双方在南京大屠杀死亡人数和其他一些细节上仍然存在争议。中方认为有30万中国人在1937年的南京大屠杀中丧生。而远东军事法庭的审判估计这个数字在26万左右。但是日本全国发行的数十本历史教材对南京大屠杀死亡人数有各种版本的描述,有些相差甚远,一部分右翼学者甚至在教科书中否认侵华历史。
  这场长达几十年的争论严重损害了中日关系并且在中国激 阅读全文...

Share
分类: 其他转载 标签:

测试你的幼稚指数(巨搞)

2009年8月20日 无风的飘逸 没有评论

很多人的心智年龄跟实际年龄其实是有距离的,以下的心理测试就来测测你的幼稚程度。

  如果你是童话故事中想吃掉3只小猪的大野狼,你觉得用哪一种方法可以吃掉它们?

 
  A.模仿猪妈妈声音骗开门

  B.用锤子把门整个砸坏

  C.从烟囱偷偷爬进屋去

  D.等小猪没戒心自己出来

  E.用烟把小猪熏到晕倒
  答案:

  选择A:你的幼稚指数40%

  这类型的人会用言语做沟通的方式,跟人家做进一步的交谈,处理事情的时候会很有耐心而且能够抓住人性。

  选择B:你的幼稚指数80%

  这类型的人比较大男人或大女人,表面上很成熟,其实内心是非常幼稚的。

  选择C:你的幼稚指数55%

  这类型的人知道做事情要利用方法,在人生的路途中会慢慢地让自己学习成长。

  选择D:你的幼稚指数20%

  这类型的人对很多事情已经懂得放手,知道争取强求其实是没有用的,因此会用等待的方式来做任何事情,不管是工作或者是爱情。

  选择E:你的幼稚指数99%

  这类型的人凭着感觉走,想要做什么就做什么。

Share
分类: 轻松一下 标签:

【开心一笑】如何体现出自己有钱(仅供娱乐)

2009年8月20日 无风的飘逸 没有评论

接电话的时候第一句话怎么说能让周围的人觉得我很有钱呢?先说几个方案,有想法大家一起补充
  
1 欠我的五百万什么时候还,再不还我就不要了!
  
2 等一下,我在数钱呢。一千一百三十六万八毛五,一千一百三十六万八毛六……
  
3 喂,如果你不管我借钱就把电话挂掉!
  
4 为了几个亿的小事,你老电话给我烦不烦啊!说过了,不用还了!
  
5 说过多少次了,一亿以下的买卖不要请示,让看门的王大爷去跟他把合同签了吧!以后这种小事别来烦我,多浪费电话费啊!
  
6 又要500万,你零花钱每天都要那么多!
  
7 喂……喂,你说什么啊?没信号啊,你等一会啊,我叫我司机把直升飞机开高一点啊!
  
8 (抬高声音)我一分钟几百万上下,还要和你俩去吃牛杂面?!
  
9 让保镖都回去吧,我一个人走走,很久没回来了…

Share
分类: 轻松一下 标签:

成熟男人不应该犯的十大幼稚行为

2009年8月20日 无风的飘逸 没有评论

行为一:

看见人家开公司赚钱,自己还没想好做什么就草草辞职创业,公司先开起来再说,至于怎么做业务,都还在打算中,以为开了公司钱就像自来水一样哗哗流进来。

行为二:

年过30,还事业无成,怨天怨地怨父母,怨党怨国怨人民。就是不从自己身上找原因。其实在任何社会成功人士都是少数,没有成就是正常,但求无愧我心就行。喜欢抱怨的,是幼稚的表现。

行为三:

胡子一大把,五短身材肚腩突出,还上套套头运动衫胸前米老鼠下穿牛仔裤,一进电梯就对着镜子捋头发,看见前台喊美女,对着老板叫帅哥。 阅读全文...

Share
分类: 其他转载 标签: