Submitted by on 2007, July 29, 1:20 PM
Tags: rewrite, 伪静态
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1375
Submitted by on 2007, July 28, 6:36 AM
淡水河边测试可用的php+mysql的分页类,php4,5环境。
» 阅读全文
Tags: 分页, 类
网站|PHP学习 | 评论:1
| Trackbacks:0
| 阅读:1632
Submitted by on 2007, July 28, 1:06 AM
一 : 引 言
在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权限限制等,但是,对应一些我们经常频频使用的文件,比方说,开发的新闻发布系统,我们不希望很多用户都读取数据库才显示结果,这样一方面消耗了服务器的资源,另一方面占去了浏览者大量可贵的响应时间,所有,有了"静态页面话"的做法,当前很多网站都采用这种技术,一般都是由管理后台控制,或者生成html直接显示,或者xhtml用css控制显示,或者生成xml用xslt显示,这些技术都不是难的,在这里我就浅显的说说生成html的方法.
二 : 预备知识
模板技术:
[PHP]模板引擎Smarty深入浅出介绍--2005-12-31
[PHP]笑谈配置,使用Smarty技术 2006-01-04
缓存技术:
有些信息比方经常不变的,但是还是能变的信息放在缓存中以加快显示速度,这是很有价值的,所谓的缓存,通俗的理解就是一些保存在服务器端的共用信息.它是于服务器同生死的,我们在保存缓存的时候可以指定下次更新的时间的判断,比方要在5分钟更新一次,可以记录上次更新的时间,和当前时间比较,如果大于 5 分钟 ,读取数据库,更新换成,否则直接读取缓存数据,当然,缓存需要客户端用户激活的,只需一次.
ob_start()函数:打开输出缓冲区.
函数格式 void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
ob_get_contents :返回内部缓冲区的内容。
函数格式:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.
ob_get_length:返回内部缓冲区的长度。
函数格式:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.
ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
函数格式:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除
ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
函数格式:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)
ob_implicit_flush:打开或关闭绝对刷新
函数格式:void ob_implicit_flush ([int flag])
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
文件写入:
int fwrite ( resource handle, string string [, int length] )
fwrite() 把 string 的内容写入 文件指针 handle 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。
fwrite() 返回写入的字符数,出现错误时则返回 FALSE 。
相关参考官方网站: 文件参考
三 : 解决方案
思路: 开启 ob_start缓冲,当已经调出数据的时候获取 ob_get_contents,然后生成静态页,ob_end_clean清除缓冲.ok,就这么来,来看一个例子(php+mysql的结合):
创建数据库:
Create TABLE `bihtml` (
`id` int(11) NOT NULL auto_increment,
`szdtitle` varchar(16) NOT NULL,
`szdcontent` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
获取当前的ID,并导入模板:
ob_start();
$id=_POST["id"]
if(!isset($id)&&is_integer($id))
{
@$db=new mysqli("localhost","root","admin","bihtml");
$result=$db->fetch_one_array("select * from szd_bi where id="$id"");
if(!empty($result))
{
$tmp->assign(array(
"Szdtitle",htmlspecialchars($result["titles"]),
"Szdcontent",$result["titles"]));
}
$tpl->display("default_1.tpl");
$this_my_f= ob_get_contents(); //此处关键
ob_end_clean();
$filename = "$id.html";
if(tohtmlfile_cjjer($filename,$this_my_f))
echo "生成成功 $filename";
else
echo "生成识别";
}
}
//把生成文件的过程写出函数
function tohtmlfile_cjjer($file_cjjer_name,$file_cjjer_content)
{
if (is_file ($file_cjjer_name)){
@unlink ($file_cjjer_name);
}
$cjjer_handle = fopen ($file_cjjer_name,"w");
if (!is_writable ($file_cjjer_name)){
return false;
}
if (!fwrite ($cjjer_handle,$file_cjjer_content)){
return false;
}
fclose ($cjjer_handle); //关闭指针
return $file_cjjer_name;
}
四 : 说明事项
1: 一般建议管理员添加数据的时候就生成静态页面,可以考虑记录生成的文件名次和路径.
2:php主要是 ob_starts()和 ob_get_contents,生成静态页面的时候很有用,当然也可以考虑调出数据库直接替换模板里面的变量也是可以的.
3:主要的模板使用smarty,phplib都是可以的,smarty使用比较简易.
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:858
Submitted by on 2007, July 26, 8:53 PM
折腾了好久,自动插入到fck编辑器中的js总是报错原来是以下这句出了问题。可惜我研究许久未能解决这个疑问。
if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG) ,只能放弃这个判断了。
ps:正式使用时,upload.php需要加个权限判断,这里用来测试就省了。
首先是添加内容的表单页。
| 代码: |
<?php
include_once( "../fckeditor/fckeditor.php" ) ;
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml...
<html xmlns="http://www.w3.org/1999/xht...
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<?php
$editor = new FCKeditor("Content");
$editor->BasePath = "../fckeditor/";
$editor->ToolbarSet = "Default";
$editor->Width = "100%";
$editor->Height = "320";
$editor->Value = "1122";
$FCKeditor = $editor->CreateHtml();
echo $FCKeditor;
?>
<iframe ID="uploadphp" src="upload.php" frameBorder="0" marginHeight="0" marginWidth="0" scrolling="No" style="height:22px;width:400px"></iframe>
</body>
</html> |
接着帖上传页upload.php
| 代码: |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml...
<html xmlns="http://www.w3.org/1999/xht...
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>文件上传</title>
<style type="text/css">
<!--
body,td,th {
font-size: 12px;
}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #eeeeee;
}
-->
</style>
<script language="javascript">
//插入上传附件
function addUploadItem(type,path){
var oEditor = parent.FCKeditorAPI.GetInstance("Content")
var Fhref="http://"+location....
path=Fhref+path;
type=type.toLowerCase()
switch(type){
case "gif":
oEditor.InsertHtml("<img src=""+path+"" alt=""/>");
break;
case "jpg":
oEditor.InsertHtml("<img src=""+path+"" alt=""/>");
break;
case "png":
oEditor.InsertHtml("<img src=""+path+"" alt=""/>");
break;
case "bmp":
oEditor.InsertHtml("<img src=""+path+"" alt=""/>");
break;
case "jpeg":
oEditor.InsertHtml("<img src=""+path+"" alt=""/>");
break;
case "mp3":
oEditor.InsertHtml("<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" id="MediaPlayer" width="450" height="70"><param name=""howStatusBar" value="-1"><param name="AutoStart" value="False"><param name="Filename" value=""+path+""></object>");
break;
case "wma":
oEditor.InsertHtml("<object classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95" id="MediaPlayer" width="450" height="70"><param name=""howStatusBar" value="-1"><param name="AutoStart" value="False"><param name="Filename" value=""+path+""></object>");
break;
case "rm":
oEditor.InsertHtml("<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="300"><param name="SRC" value=""+path+"" /><param name="CONTROLS" VALUE="ImageWindow" /><param name="CONSOLE" value="one" /><param name="AUTOSTART" value="true" /><embed src=""+path+"" nojava="true" controls="ImageWindow" console="one" width="400" height="300"></object><br/><object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="32" /><param name="CONTROLS" value="StatusBar" /><param name="AUTOSTART" value="true" /><param name="CONSOLE" value="one" /><embed src=""+path+"" nojava="true" controls="StatusBar" console="one" width="400" height="24" /></object><br/><object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="32" /><param name="CONTROLS" value="ControlPanel" /><param name="AUTOSTART" value="true" /><param name="CONSOLE" value="one" /><embed src=""+path+"" nojava="true" controls="ControlPanel" console="one" width="400" height="24" autostart="true" loop="false" /></object>");
break;
case "rmvb":
oEditor.InsertHtml("<object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="300"><param name="SRC" value=""+path+"" /><param name="CONTROLS" VALUE="ImageWindow" /><param name="CONSOLE" value="one" /><param name="AUTOSTART" value="true" /><embed src=""+path+"" nojava="true" controls="ImageWindow" console="one" width="400" height="300"></object><br/><object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="32" /><param name="CONTROLS" value="StatusBar" /><param name="AUTOSTART" value="true" /><param name="CONSOLE" value="one" /><embed src=""+path+"" nojava="true" controls="StatusBar" console="one" width="400" height="24" /></object><br/><object classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA" width="400" height="32" /><param name="CONTROLS" value="ControlPanel" /><param name="AUTOSTART" value="true" /><param name="CONSOLE" value="one" /><embed src=""+path+"" nojava="true" controls="ControlPanel" console="one" width="400" height="24" autostart="true" loop="false" /></object>");
break;
case "ra":
oEditor.InsertHtml("<object classid="clsid:CFCDAA03-8BE4-11CF-B84B-0020AFBBCCFA" id="RAOCX" width="450" height="60"><param name="_ExtentX" value="6694"><param name="_ExtentY" value="1588"><param name="AUTOSTART" value="true"><param name="SHUFFLE" value="0"><param name="PREFETCH" value="0"><param name="NOLABELS" value="0"><param name="SRC" value=""+path+""><param name="CONTROLS" value="StatusBar,ControlPanel"><param name="LOOP" value="0"><param name="NUMLOOP" value="0"><param name="CENTER" value="0"><param name="MAINTAINASPECT" value="0"><param name="BACKGROUNDCOLOR" value="#000000"><embed src=""+path+"" width="450" autostart="true" height="60"></embed></object>");
break;
case "asf":
oEditor.InsertHtml("<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.c...,0,02,902" type="application/x-oleobject" standby="Loading..." width="400" height="300"><param name="FileName" VALUE=""+path+"" /><param name="ShowStatusBar" value="-1" /><param name="AutoStart" value="true" /><embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/W... src=""+path+"" autostart="true" width="400" height="300" /></object>");
break;
case "avi":
oEditor.InsertHtml("<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.c...,0,02,902" type="application/x-oleobject" standby="Loading..." width="400" height="300"><param name="FileName" VALUE=""+path+"" /><param name="ShowStatusBar" value="-1" /><param name="AutoStart" value="true" /><embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/W... src=""+path+"" autostart="true" width="400" height="300" /></object>");
break;
case "wmv":
oEditor.InsertHtml("<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" codebase="http://activex.microsoft.c...,0,02,902" type="application/x-oleobject" standby="Loading..." width="400" height="300"><param name="FileName" VALUE=""+path+"" /><param name="ShowStatusBar" value="-1" /><param name="AutoStart" value="true" /><embed type="application/x-mplayer2" pluginspage="http://www.microsoft.com/W... src=""+path+"" autostart="true" width="400" height="300" /></object>");
break;
case "swf":
oEditor.InsertHtml("<embed src=""+path+"" type="application/x-shockwave-flash" play="true" loop="true" menu="true"></embed>");
break;
default :
oEditor.InsertHtml("<a href=""+path+"">点击下载此文件</a>");
break;
}
}
</script>
</head>
<body>
<?php
if($_POST["Submit"]){
$file_name = $_FILES["file"]["name"];
$file_size = $_FILES["file"]["size"];
$file_type = $_FILES["file"]["type"];
$file_tn = time().$file_name;
$save_path = "../uploadfile/";
$messg = "<div><a href="?">返回重试</a>意外:";
$messg_sr = $messg;
if($file_size > 1*1024*1024){
$messg .= "不能超过2MB,本文件为".round(($file_size/1024/1024),2)."MB</div>";
}
if($messg != $messg_sr){
echo $messg;
}else{
if(move_uploaded_file($_FILES["file"]["tmp_name"],$save_path.$file_tn)){
$extStr=explode(".",$file_name);
$count=count($extStr)-1;
$ext = $extStr[$count];
echo "<script>addUploadItem(\"{$ext}\",\"/uploadfile/{$file_tn}\")</script>";
echo "<meta http-equiv=\"refresh\" content=\"3;URL=upload.php\"><div id=\"container\" style=\"margin:0px; padding:0px;text-align:center; font-size:12px;\">上传成功!</div>";
}else{
echo $messg;
}
}
}else{
?>
<form id="form1" name="form1" method="post" enctype="multipart/form-data" action="">
<input name="file" type="file" id="file" size="32" style="height:20px" />
<input type="submit" name="Submit" value="提 交" style="height:20px" />
</form>
<?php }?>
</body>
</html> |
再贴个静态引用的(方便在template中使用)
| 代码: |
<input type="hidden" id="Content" name="Content" value="" style="display:none" />
<input type="hidden" id="Content___Config" value="" style="display:none" />
<iframe id="Content___Frame" src="../fckeditor/editor/fckeditor.html?InstanceName=Content&Toolbar=Default" width="100%" height="320" frameborder="0" scrolling="no"></iframe> |
Tags: FCKeditor
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1189
Submitted by on 2007, July 26, 4:33 AM
我们可能都有这样的经验,用php写了一个打开好几个数据库,几十次数据查询的首页,速度慢是可想而知啊,但是这个页面不大好做模板生成静态页,太麻烦了。怎么办了?我使用了这个解决方案,控制php的输出缓冲,截获处理后的html,保存成文件,然后的请求就检查这个文件的时间,若在设置的时间内,直接读取,发送。如果已经超时,就重新读取动态页面。
| 代码: |
<?php
// --------------------------------------------------------------------------
// 文件名 : index.php
// 描述 : 主站首页
// 需求 : PHP4 (http://www.php.net)
// Copyright(C), www.cnfdc.com.cn, 2005, All Rights Reserved.
// 作者 : lonestone (wangyong.yichang@gmail.com)
// --------------------------------------------------------------------------
// 缓存文件名和缓存时间
$cachefilename = "./cache/index.cache";
$cachetime = 3600;
// 强制更新缓存
if ( $_GET["c"] )
{
echo CacheFile();
die();
}
// 检测缓存是否存在
if ( file_exists( $cachefilename ) )
{
$lastmodifytime = filemtime( $cachefilename );
if ( $lastmodifytime && ( time() - $lastmodifytime ) > $cachetime )
{
echo CacheFile();
}
else
{
echo ReadCache();
}
}
else
{
echo CacheFile();
}
//生成HTML并缓存成文件
function CacheFile()
{
global $cachefilename;
// 打开输出缓存
ob_start();
//这里开始链接数据库,查询,用ADODB+SMARTY技术。
$tpl->Display( "index.html" );
//处理完成,截获缓冲内容
//得到缓存内容
$content=ob_get_contents();
//清空缓冲区,否则最终还是会输出给浏览器,这样就会有两个首页了
ob_end_clean();
//写入文件,若不可写则返回缓存
if(is_writable($cachefilename))
{
$handle = fopen($cachefilename,"w");
fwrite($handle,$content);
fclose($handle);
}
else
{
return ReadCache()." outdated";
}
return $content."newcache";
}
//读取缓存文件
function ReadCache()
{
global $cachefilename;
$handle=fopen($cachefilename,"r");
$content="";
while (!feof($handle))
{
$line = fgets($handle);
$content.=$line;
}
fclose($handle);
return $content."cached at ".date("Y-m-d H:i:s",filemtime($cachefilename));
} |
Tags: 缓冲, ob_start
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1071
Submitted by on 2007, July 25, 1:22 AM
GD.pm 就是 Perl 的绘图模块,由 Lincoln D. Stein 写的,官方支持主页是
http://stein.cshl.org/WWW/...,在 1.19 版之前,GD.pm 生成的是 .GIF 格式的图像,但由于 .GIF 格式使用的 LZW 算法牵涉到 Unisys 的专利权,因此,GD.pm 在 1.20 版以后,生成的图像格式是 .PNG。关于 GD.pm 的安装,我相信大家遇到过不少问题,现在我就详细谈谈它在 Unix 和 Windows 下的具体安装方法!
1. Unix 下的安装
① 从
http://stein.cshl.org/WWW/... 上下载 GD.pm 的最新版 for Unix。
② 确认主机是否已经安装好 Perl 解释器和 GCC 编译器,而且你必须以 root 身份登陆,否则无法安装。
③ 执行以下命令:
cp GD_pm_tar.gz /tmp
gzip -d GD_pm_tar.gz
tar xvf GD_pm_tar
cd GD-1.30
perl Makefile.PL
make
make install
④ 成功后就 OK 啦。
2. Windows 下的安装
在 Windows 下安装的办法有两种,一种采用本站独家提供的简单安装方法,一种复杂的、类似 Unix 下的安装方法。
a) 简单的方法(本站独家提供)。
① 从本站的 Perl 软件工具栏目中下载"由本站提供的 GD.pm 1.18 自动安装版本",并解压到 c:\gd 目录下。
② 确定你安装的是 Active Perl 5.10 以上版(假设安装在 c:\perl 目录下)。
③ 在 c:\gd 目录下执行以下命令:
c:\gd> c:\perl\bin\ppm install gd.ppd
④ OK 啦,简单不?
b) 复杂的方法(类似 Unix 下的安装)。
① 从
http://stein.cshl.org/WWW/... 上下载 GD.pm 的最新版 for Win32。
在 ppm> 底下??入install
http://theoryx5.uwinnipeg....
② 用 Winzip 等工具解压到 c:\gd 目录下。
③ 确定你已经安装好了 Perl 解释器。
④ 在 c:\gd 目录下执行以下命令:
perl Makefile.PL
Nmake perl
Nmake inst_perl
⑤ 成功后就 OK 啦。
慢,什么?你没有 Nmake ?上帝,在本站的 Perl 软件工具栏目中就有下载的啦!还有提示一下,用这种办法安装如果出现错误就表示安装不了,请用 a) 方法安装。
测试系统是否安装正确:
输入以下简单程序(请注意第一行,本人假设你的 Perl 解释器是安装在 /usr 下的,如果你安装的是 /perl 下,请把第一行改为 #!/perl/bin/perl),然后存盘为 test.cgi,放在你的 CGI-BIN 目录下。
请注意:如果你安装的是 GD.pm 1.19 以上版本的话,请把下面所有出现的 gif 改为 png (共两处)。
#-----------------------------------------------------------
#!/usr/bin/perl
print "Content-type: image/gif\n\n";
use GD;
$im = new GD::Image(130,18);
$black = $im->colorAllocate(0,0,0);
$white = $im->colorAllocate(255,255,255);
$im->fill(10,10,$black);
$im->string(gdSmallFont,2,1,"
http://www.CGIer.com/&...,$white);
binmode STDOUT;
print $im->gif;
exit;
#-----------------------------------------------------------
运行 WEB 服务器,然后运行浏览器,输入
http://localhost/cgi-bin/t...,如果浏览器上出现黑底白字的
http://www.CGIer.com/ 则表示你的 GD.pm 已经成功安装好了。
网站|PHP学习 | 评论:5
| Trackbacks:0
| 阅读:1516
Submitted by on 2007, July 25, 1:19 AM
一。Apache基本设置
1、Apache的核心配置文件名是"httpd.conf",其所存放的路径为"X:\Apache2\conf"目录下。用记事本打开它后,对它进行修改后再保存便可达到配置Apache服务器的目的.
2、由于配置文件"httpd.conf"决定着整个Apahce服务器的使用,因此对于它的修改千万要小心!强烈建议先做好多个备份,以防出错!如果实在忘了备份了,系统还为你准备了个名为"httpd.default.conf"的备份文件,它是你初安装好Apache后系统自动做好的"httpd.conf"的备份。你可以去掉“.default”来使用。
3、更改主页路径 Apache主页文件默认存放在"X:\Apache\htdocs"目录下,如果想改为如"以E:\myweb\ddj88"目录下的自己的主页文件,则先用记事本打开"X:\Apache\conf"目录下的"httpd.conf"文件,用"编辑"菜单中的"查找"功能,找到"DocumentRoot "x:/Apache/htdocs""一句,然后将半角引号中的"X:/Apache/htdocs"改成"E:/myweb/ddj88"。
4、更改默认主页文件名,Apache默认主页只有一个"index.html",如果你的不是,找到"DirectoryIndex index.html"行,这里放的就是默认调用的文件!在"index.html"的后面加入你的"index.htm"和其他类型,各文件类型之间都必须要用一个空格来分隔开,再保存即可。
5、重启Apache程序,在开始菜单中的"程序"里找到"Apache httpd Server"组件,再选其下"Control Apache Server"中的"Restart"重新运行一下Apache的HTTP服务。
6、在你的浏览器中输入“
http://localhost”或“
http://127.0.0.1”试试看,哈,可以看你的网站了吧?哎,发现英文可以显示,中文是乱码,当把IE工具栏的查看-->编码设置成简体中文,可以正常显示中文,但点击连接,其它页面还是乱码,关掉IE,从新启动IE,发现也是乱码,怎么办?
二、Apache 2.0.47出现乱码的解决办法
原因很简单,由于Apache它默认的编码是西欧编码,你只要在“httpd.conf”中找到“AddDefaultCharset ISO-8859-1”将它修改为“AddDefaultCharset GB2312 ”,保存然后重新启动Apache再试,可能有的朋友的已经解决了,但还是有很多的朋友的网站依然是乱码,包括我的,这是什么原因呢,网上也有介绍把它改为“AddDefaultCharset off ”,可能在你的网站也不一定行得通,实质问题在于它是由网页制作软件引起的,如果你使用的是Macromedia公司的Dreamweaver系列软件制作的,由于它的编码为“gb2312”,所以就会出现乱码,因此你只要在你网页的代码中找到“”,把“gb2312”改为“GB2312”然后保存网页,再试试看,行了吧!
三:httpd.conf 的配置
首先来说明一下Apache目录下各个文件夹的作用:
bin:存放Apache运行的的各个软件,包括一个名为ad.exe的服务器调试工具
conf:Apache的配置文件放在这个文件夹里面,我们要修改其中的httpd.conf文件
htdocs:默认的web主目录,我们可以在httpd.conf中修改网站根目录的路径
下面让我们来修改httpd.conf文件
httpd.conf文件是Apache工作的重要配置文件,在X:Apache GroupApache2conf里
面,找到并用记事本打开。大家可以参照下面进行修改:
ServerRoot "X:/Apache Group/Apache2"
这个是服务器的根路径,不用更改
MaxKeepAliveRequests 100
最大在线人数,根据你需要的人数和你服务器机器的配置来确定
Listen 80
Apache2监听端口,一般情况下不用改,也就是网站的http端口
DocumentRoot "C:/htroot"
这个是你放置网页文件的地方,编译后的PHP文件就放在这里,一定要确保这个文件
夹存在,这个也就是是你的站点目录
同上,跟着上一步一起修改,确保文件夹的存在
DirectoryIndex index.htm index.php index.html
这个是服务器默认打开的主页文档类型,可以改成如上的,中间用空格格开
LanguagePriority zh-CN zh-TW en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv
语言优先级,把中文(zh-CN zh-TW)的部分剪切放到前面(也就是将原来文件中的相应
部分改成如上的)
另外,如果想要禁止主页浏览,找到如下代码:
Options Indexes FollowSymLinks
去掉其中的indexes即可,即改成:
Options FollowSymLinks
第三步:PHP的挂载
还是在httpd.conf中搜索LoadModule找到相关章节 ,在后面添加如下内容
LoadModule php5_module "X:/PHP/php5Apache2.dll"
AddType application/x-httpd-php .php
注意:其中X:PHP/PHP5Apache2.dll 中的X:/PHP/是你安装PHP的路径
重启Apache使修改生效
如何在apache下建立多个站点
NameVirtualHost 211.161.197.119
<VirtualHost 211.161.197.119>
ServerName bug.unigium.com
DocumentRoot /www/http/mantisbt
</VirtualHost>
<VirtualHost 211.161.197.119>
ServerName mycity.unigium.com
DocumentRoot /www/http/billing_system
</VirtualHost>
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1970
Submitted by on 2007, July 24, 8:42 PM
一、 么是JpGraph
以前用PHP作图时必须要掌握复杂抽象的画图函数,或者借助一些网上下载的花柱形图、饼形图的类来实现。没有一个统一的chart类来实现图表的快速开发。
现在我们有了一个新的选择:JpGraph。专门提供图表的类库。它使得作图变成了一件非常简单的事情,你只需从数据库中取出相关数据,定义标题,图表类型,然后的事情就交给JpGraph,只需掌握为数不多的JpGraph内置函数(可以参照JpGraph附带例子学习),就可以画出非常炫目的图表!
一、 JpGraph安装方法:
1、先到
http://www.aditus.nu/jpgra...下载最新的版本。
2、确保你的PHP版本最低为4.04(最好是4.1.1),并且支持GD2库。必须确保GD2库可以正常运行,可以通过运行phpinfo()来查看GD库的信息是否存在的方法来判断。
3、将下载的JpGraph压缩包解压到任意文件夹。
4、设置jpgraph.php(jpgraph的主配置文件)。设置jpgraph的cache(缓存)文件夹,和TTF(字体)文件夹。
分别在35行和38行
| 代码: |
35 // DEFINE("CACHE_DIR","/tmp/jpgraph_cache/");
38 // DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/"); |
Linux系统改为:
| 代码: |
DEFINE("CACHE_DIR","/tmp/jpgraph_cache/");"
DEFINE("TTF_DIR","/usr/X11R6/lib/X11/fonts/truetype/"); |
Windows系统改为:
| 代码: |
DEFINE("CACHE_DIR","c:/apache/htdocs/ jpgraph_cache/");"
DEFINE("TTF_DIR","c:/windows/fonts"); |
注意事项:
(1)cache(缓存)文件夹路径可以自己定义,而TTF(字体)文件夹必须是%system%/Fonts。
(2)确保PHP对cache(缓存)文件夹有写的权限。
5、完成上述设置后就可以使用JpGraph了,可以先将JpGraph的例子copy到htdocs文件夹中,运行一下看看。呵呵,200多个例子,包含各类图表,够学一阵子的。
在实际使用中,笔者还遇到了一些问题,比如字体错误等等,还在研究中……
从数据库中读取数据到jpgraph图表中
1、将./src/Examples目录中的文件example16.2.php以及./src目录中的文件jpgraph_bar.php、jpgraph_gradient.php、jpgraph_line.php、jpgraph_plotmark.inc、jpgraph.php拷贝到同一目录下。
2、建立数据库jpg,数据库表test
建立2个字段:
id(主键):int
number:int
并添加一些数据
3、修改example16.2.php
修改后的代码
| 代码: |
<?php
include ("jpgraph.php");
include ("jpgraph_line.php");
include ("jpgraph_bar.php");
$connect=mysql_connect("localhost","root","");
mysql_select_db("jpg",$connect);
$query=mysql_query("select * from test",$connect);
$i=0;
while ($array=mysql_fetch_array($query)) {
$l2datay[$i]=$array["number"];
$i++;
}
mysql_close($connect);
// Create the graph.
$graph = new Graph(400,200,"auto");
$graph->SetScale("textlin");
$graph->img->SetMargin(40,130,20,40);
$graph->SetShadow();
// Create the bar plot
$bplot = new BarPlot($l2datay);
$bplot->SetFillColor("orange");
$bplot->SetLegend("Result");
// Add the plots to t"he graph
$graph->Add($bplot);
$graph->title->Set("Adding a line plot to a bar graph v1");
$graph->xaxis->title->Set("X-title");
$graph->yaxis->title->Set("Y-title");
$graph->title->SetFont(FF_FONT1,FS_BOLD);
$graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
$graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
//$graph->xaxis->SetTickLabels($datax);
//$graph->xaxis->SetTextTickInterval(2);
// Display the graph
$graph->Stroke();
?> |
4、刷新页面即可看到结果
Tags: 绘图
网站|PHP学习 | 评论:1
| Trackbacks:0
| 阅读:1431
Submitted by on 2007, July 21, 1:36 AM
PHP接收多个同名复选框信息不像ASP那样自动转换成为数组,这给使用带来了一定不便。但是还是有解决办法的,就是利用JavaScript做一下预处理。多个同名复选框在JavaScript中还是以数组的形式存在的,所以在表单提交之前可以利用JavaScript把复选框中的信息组合成一个字符数组赋值给表单中的隐藏元素,然后用PHP中的explode函数解析此数组,这样就可以实现复选框信息的传递了。下面举例说明。
假设有这样一个表单:
<form name="form1" id="form1" method="post" action="myphp.php" onSubmit="return Checker()">
<input type="checkbox" name="item" value="淡">淡<br>
<input type="checkbox" name="item" value="水">水<br>
<input type="checkbox" name="item" value="河">河<br>
<input type="checkbox" name="item" value="边">边<br>
<input type="hidden" name="items" value="">
<input type="submit" value="Submit">
</form>
这个表单有四个名字都是item的复选框,当用户单击Submit按钮的时候,Checker函数会被调用,并且如果Checker返回true表单就被提交,返回false表单就不会被提交。这里Checker函数就是我们要编写的预处理函数。在HTML的header部分添加下面的JavaScript:
<script language="JavaScript">
<!--
function Checker()
{
form1.items.value = "";
if ( !form1.item.length ) // 只有一个复选框,form1.item.length = undefined
{
if ( form1.items.checked )
form1.items.value = form1.item.value;
} else {
for ( i = 0 ; i < form1.item.length ; i++ )
{
if ( form1.item(i).checked ) // 复选框中有选中的框
{
form1.items.value = form1.item(i).value;
for ( j = i + 1 ; j < form1.item.length ; j++ )
{
if ( form1.item(j).checked )
{
form1.items.value += " "; //用空格做分割符
form1.items.value += form1.item(j).value;
}
}
break;
}
}
}
return true;
}
-->
</script>
这样就可以把所有选中的复选框的value组合成为一个字符串数组,在myphp.php使用这样的语句:
$items = explode(" ", $_POST["items"]);
print_r($items);
就可以把这些选项分离出来成为数组。需要注意的是选项中的value不能包含分割符(这里是空格)。
完整源码:
[html]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml...
<html xmlns="
http://www.w3.org/1999/xht...
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Untitled Document</title>
<script language="JavaScript">
<!--
function Checker()
{
form1.items.value = "";
if ( !form1.item.length ) // 只有一个复选框,form1.item.length = undefined
{
if ( form1.items.checked )
form1.items.value = form1.item.value;
} else {
for ( i = 0 ; i < form1.item.length ; i++ )
{
if ( form1.item(i).checked ) // 复选框中有选中的框
{
form1.items.value = form1.item(i).value;
for ( j = i + 1 ; j < form1.item.length ; j++ )
{
if ( form1.item(j).checked )
{
form1.items.value += " "; //用空格做分割符
form1.items.value += form1.item(j).value;
}
}
break;
}
}
}
return true;
}
-->
</script>
</head>
<body>
<form name="form1" id="form1" method="post" action="" onSubmit="return Checker()">
<input type="checkbox" name="item" value="淡">淡<br>
<input type="checkbox" name="item" value="水">水<br>
<input type="checkbox" name="item" value="河">河<br>
<input type="checkbox" name="item" value="边">边<br>
<input type="hidden" name="items" value="">
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>[/html]
Tags: 复选框
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:990
Submitted by on 2007, July 21, 12:49 AM
php引号转义,又叫魔术引号。入库出库时做数据的处理。
» 阅读全文
Tags: 转义
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1181