仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1918|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网页设计PHP网站备份法式代码分享

[复制链接]
再现理想 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:36:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
从刚开始练习的PHP基础语法练习,到PHP语言在WEB中的应用,再到实际的项目开发,如留言版,相册系统,中小型公司网站系统,以及期间做过的有关团队合作的小游戏,让我受益匪浅,学到了很多。   后果图:

PHP代码
复制代码 代码以下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>网站法式备份</title>
</head>
<body>
<form name="myform" method="post" action="">
<?php
error_reporting(E_ALL & ~E_NOTICE);
ini_set("memory_limit", "2048M");
echo "选摘要紧缩的文件或目次:<br>";
$fdir = opendir("./");
while($file=readdir($fdir))
{
if($file=="." $file=="..")
continue;
echo "<input name="dfile[]" type="checkbox" value="$file" ".($file==basename(__FILE__)?"":"checked")."> ";
if(is_file($file))
{
echo "<font face=\"wingdings\" size=\"5\">2</font> $file<br>";
}
else
{
echo "<font face=\"wingdings\" size=\"5\">0</font> $file<br>";
}
}
?>
<br>
包括以下文件类型:
<input name="file_type" type="text" id="file_type" value="" size="50">
<font color="red">
(文件类型用""离隔,默许空则包括恣意文件,例:假如需求打包php和jpg文件,则输出"phpjpg")
</font>
<br>
紧缩文件保留到目次:
<input name="todir" type="text" id="todir" value="__dwb2011__" size="15">
<font color="red">
(留空为本目次,必需有写入权限)
</font>
<br>
紧缩文件称号:
<input name="zipname" type="text" id="zipname" value="dwb2011.zip" size="15">
<font color="red">
(.zip)
</font>
<br>
<br>
<input name="myaction" type="hidden" id="myaction" value="dozip">
<input type="button" value="反选" >
<input type="submit" name="Submit" value=" 入手下手紧缩 ">
<script language="javascript">
function selrev()
{
with(document.myform)
{
for(i=0;i<elements.length;i++)
{
thiselm = elements;
if(thiselm.name.match(/dfile\[]/))
thiselm.checked = !thiselm.checked;
}
}
}
</script>
<?php
error_reporting(E_ALL & ~E_NOTICE);
set_time_limit(0);
class PHPzip
{
var $file_count = 0 ;
var $datastr_len = 0;
var $dirstr_len = 0;
var $filedata = ""; //该变量只被类内部法式会见
var $gzfilename;
var $fp;
var $dirstr="";
var $filefilters = array();
function SetFileFilter($filetype)
{
$this->filefilters = explode("",$filetype);
}
//前往文件的修正工夫格局.
//只为本类外部函数挪用.
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;
}
return (($timearray["year"] - 1980) << 25) ($timearray["mon"] << 21) ($timearray["mday"] << 16) ($timearray["hours"] << 11) ($timearray["minutes"] << 5) ($timearray["seconds"] >> 1);
}
//初始化文件,创立文件目次,
//并前往文件的写入权限.
function startfile($path = "dodo.zip")
{
$this->gzfilename=$path;
$mypathdir=array();
do
{
$mypathdir[] = $path = dirname($path);
} while($path != ".");
@end($mypathdir);
do
{
$path = @current($mypathdir);
@mkdir($path);
} while(@prev($mypathdir));
if($this->fp=@fopen($this->gzfilename,"w"))
{
return true;
}
return false;
}
//添加一个文件到 zip 紧缩包中.
function addfile($data, $name)
{
$name = str_replace("\\", "/", $name);
if(strrchr($name,"/")=="/")
return $this->adddir($name);
if(!empty($this->filefilters))
{
if (!in_array(end(explode(".",$name)), $this->filefilters))
{
return;
}
}
$dtime = dechex($this->unix2DosTime());
$hexdtime = "\x" . $dtime[6] . $dtime[7] . "\x" . $dtime[4] . $dtime[5] . "\x" . $dtime[2] . $dtime[3] . "\x" . $dtime[0] . $dtime[1];
eval("$hexdtime = "" . $hexdtime . "";");
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);
//新添文件内容格局化:
$datastr = "\x50\x4b\x03\x04";
$datastr .= "\x14\x00"; // ver needed to extract
$datastr .= "\x00\x00"; // gen purpose bit flag
$datastr .= "\x08\x00"; // compression method
$datastr .= $hexdtime; // last mod time and date
$datastr .= pack("V", $crc); // crc32
$datastr .= pack("V", $c_len); // compressed filesize
$datastr .= pack("V", $unc_len); // uncompressed filesize
$datastr .= pack("v", strlen($name)); // length of filename
$datastr .= pack("v", 0); // extra field length
$datastr .= $name;
$datastr .= $zdata;
$datastr .= pack("V", $crc); // crc32
$datastr .= pack("V", $c_len); // compressed filesize
$datastr .= pack("V", $unc_len); // uncompressed filesize
fwrite($this->fp,$datastr); //写入新的文件内容
$my_datastr_len = strlen($datastr);
unset($datastr);
//新添文件目次信息
$dirstr = "\x50\x4b\x01\x02";
$dirstr .= "\x00\x00"; // version made by
$dirstr .= "\x14\x00"; // version needed to extract
$dirstr .= "\x00\x00"; // gen purpose bit flag
$dirstr .= "\x08\x00"; // compression method
$dirstr .= $hexdtime; // last mod time & date
$dirstr .= pack("V", $crc); // crc32
$dirstr .= pack("V", $c_len); // compressed filesize
$dirstr .= pack("V", $unc_len); // uncompressed filesize
$dirstr .= pack("v", strlen($name) ); // length of filename
$dirstr .= pack("v", 0 ); // extra field length
$dirstr .= pack("v", 0 ); // file comment length
$dirstr .= pack("v", 0 ); // disk number start
$dirstr .= pack("v", 0 ); // internal file attributes
$dirstr .= pack("V", 32 ); // external file attributes - "archive" bit set
$dirstr .= pack("V",$this->datastr_len ); // relative offset of local header
$dirstr .= $name;
$this->dirstr .= $dirstr; //目次信息
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_datastr_len;
}
function adddir($name)
{
$name = str_replace("\\", "/", $name);
$datastr = "\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
$datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
$datastr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);
fwrite($this->fp,$datastr); //写入新的文件内容
$my_datastr_len = strlen($datastr);
unset($datastr);
$dirstr = "\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
$dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v", strlen($name) );
$dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );
$dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name;
$this->dirstr .= $dirstr; //目次信息
$this -> file_count ++;
$this -> dirstr_len += strlen($dirstr);
$this -> datastr_len += $my_datastr_len;
}
function createfile()
{
//紧缩包停止信息,包含文件总数,目次信息读取指针地位等信息
$endstr = "\x50\x4b\x05\x06\x00\x00\x00\x00" .
pack("v", $this -> file_count) .
pack("v", $this -> file_count) .
pack("V", $this -> dirstr_len) .
pack("V", $this -> datastr_len) .
"\x00\x00";
fwrite($this->fp,$this->dirstr.$endstr);
fclose($this->fp);
}
}
if(!trim($_REQUEST[zipname]))
$_REQUEST[zipname] = "dodozip.zip";
else
$_REQUEST[zipname] = trim($_REQUEST[zipname]);
if(!strrchr(strtolower($_REQUEST[zipname]),".")==".zip")
$_REQUEST[zipname] .= ".zip";
$_REQUEST[todir] = str_replace("\\","/",trim($_REQUEST[todir]));
if(!strrchr(strtolower($_REQUEST[todir]),"/")=="/")
$_REQUEST[todir] .= "/";
if($_REQUEST[todir]=="/")
$_REQUEST[todir] = "./";
function listfiles($dir=".")
{
global $dodozip;
$sub_file_num = 0;
if(is_file("$dir"))
{
if(realpath($dodozip ->gzfilename)!=realpath("$dir"))
{
$dodozip -> addfile(implode("",file("$dir")),"$dir");
return 1;
}
return 0;
}
$handle=opendir("$dir");
while ($file = readdir($handle))
{
if($file=="."$file=="..")
continue;
if(is_dir("$dir/$file"))
{
$sub_file_num += listfiles("$dir/$file");
}
else
{
if(realpath($dodozip ->gzfilename)!=realpath("$dir/$file"))
{
$dodozip -> addfile(implode("",file("$dir/$file")),"$dir/$file");
$sub_file_num ++;
}
}
}
closedir($handle);
if(!$sub_file_num)
$dodozip -> addfile("","$dir/");
return $sub_file_num;
}
function num_bitunit($num)
{
$bitunit=array(" B"," KB"," MB"," GB");
for($key=0;$key<count($bitunit);$key++)
{
if($num>=pow(2,10*$key)-1)
{ //1023B 会显示为 1KB
$num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]";
}
}
return $num_bitunit_str;
}
if(is_array($_REQUEST[dfile]))
{
$dodozip = new PHPzip;
if($_REQUEST["file_type"] != NULL)
$dodozip -> SetFileFilter($_REQUEST["file_type"]);
if($dodozip -> startfile("$_REQUEST[todir]$_REQUEST[zipname]"))
{
echo "正在添加紧缩文件...<br><br>";
$filenum = 0;
foreach($_REQUEST[dfile] as $file)
{
if(is_file($file))
{
if(!empty($dodozip -> filefilters))
if (!in_array(end(explode(".",$file)), $dodozip -> filefilters))
continue;
echo "<font face=\"wingdings\" size=\"5\">2</font> $file<br>";
}
else
{
echo "<font face=\"wingdings\" size=\"5\">0</font> $file<br>";
}
$filenum += listfiles($file);
}
$dodozip -> createfile();
echo "<br>紧缩完成,共添加 $filenum 个文件.<br><a href="$_REQUEST[todir]$_REQUEST[zipname]" _fcksavedurl="$_REQUEST[todir]$_REQUEST[zipname]">$_REQUEST[todir]$_REQUEST[zipname] (".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")).")</a>";
}
else
{
echo "$_REQUEST[todir]$_REQUEST[zipname] 不克不及写入,请反省途径或权限是不是准确.<br>";
}
}
?>
</form>
</body>
</html>

php   manual(PHP手册)肯定是要从网上下载一个的,它很权威,也很全面,我自己认为它是一本很好的参考书,但是不适合新手当教材使用。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-2-4 03:47:31 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
老尸 该用户已被删除
板凳
发表于 2015-2-8 08:18:42 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
冷月葬花魂 该用户已被删除
地板
发表于 2015-3-7 15:53:10 | 只看该作者
做为1门年轻的语言,php一直很努力。
飘飘悠悠 该用户已被删除
5#
发表于 2015-3-15 08:57:39 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
谁可相欹 该用户已被删除
6#
发表于 2015-3-15 21:58:36 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
变相怪杰 该用户已被删除
7#
发表于 2015-3-19 10:31:22 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
小魔女 该用户已被删除
8#
发表于 2015-3-27 17:11:01 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
乐观 该用户已被删除
9#
发表于 2015-3-30 00:00:59 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
深爱那片海 该用户已被删除
10#
发表于 2015-3-30 14:18:41 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
飘灵儿 该用户已被删除
11#
发表于 2015-3-30 23:39:36 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
小妖女 该用户已被删除
12#
发表于 2015-4-9 16:16:11 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
不帅 该用户已被删除
13#
发表于 2015-4-11 12:51:27 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
莫相离 该用户已被删除
14#
发表于 2015-4-13 07:32:09 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
admin 该用户已被删除
15#
发表于 2015-4-13 20:12:19 | 只看该作者
实践是检验自己会不会的真理。
只想知道 该用户已被删除
16#
发表于 2015-4-20 11:10:55 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
精灵巫婆 该用户已被删除
17#
发表于 2015-4-21 03:34:29 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
小女巫 该用户已被删除
18#
发表于 2015-4-22 08:51:13 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
第二个灵魂 该用户已被删除
19#
发表于 2015-5-4 02:29:55 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
20#
发表于 2015-5-6 19:10:20 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 11:34

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表