燕之庐网站建设 - 优质网站设计公司

Archive for 10月, 2009

php

2009/10/31

几个php技巧

Tags: ,

1、关于PHP重定向
方法一:header(”Location: index.php”);
方法二:echo “<script>window.location =\”$PHP_SELF\”;</script>”;
方法三:echo “<META HTTP-EQUIV=\”Refresh\” CONTENT=\”0; URL=index.php\”>”;

2、获取访问者浏览器
function browse_infor()
{
$browser=”";$browserver=”";
$Browsers =array(”Lynx”,”MOSAIC”,”AOL”,”Opera”,”JAVA”,”MacWeb”,”WebExplorer”,”OmniWeb”);
$Agent = $GLOBALS["HTTP_USER_AGENT"];
for ($i=0; $i<=7; $i++)
{
if (strpos($Agent,$Browsers[$i]))
{
$browser = $Browsers[$i];
$browserver =”";
}
}
if (ereg(”Mozilla”,$Agent) && !ereg(”MSIE”,$Agent))
{
$temp =explode(”(”, $Agent); $Part=$temp[0];
$temp =explode(”/”, $Part); $browserver=$temp[1];
$temp =explode(” “,$browserver); $browserver=$temp[0];
$browserver =preg_replace(”/([\d\.]+)/”,”\1″,$browserver);
$browserver = ” $browserver”;
$browser = “Netscape Navigator”;
}
if (ereg(”Mozilla”,$Agent) && ereg(”Opera”,$Agent))
{
$temp =explode(”(”, $Agent); $Part=$temp[1];
$temp =explode(”)”, $Part); $browserver=$temp[1];
$temp =explode(” “,$browserver);$browserver=$temp[2];
$browserver =preg_replace(”/([\d\.]+)/”,”\1″,$browserver);
$browserver = ” $browserver”;
$browser = “Opera”;
}
if (ereg(”Mozilla”,$Agent) && ereg(”MSIE”,$Agent))
{
$temp = explode(”(”, $Agent); $Part=$temp[1];
$temp = explode(”;”,$Part); $Part=$temp[1];
$temp = explode(” “,$Part);$browserver=$temp[2];
$browserver =preg_replace(”/([\d\.]+)/”,”\1″,$browserver);
$browserver = ” $browserver”;
$browser = “Internet Explorer”;
}
if ($browser!=”")
{
$browseinfo = “$browser$browserver”;
}
else
{
$browseinfo = “Unknown”;
}
return $browseinfo;
}
//调用方法$browser=browseinfo() ;直接返回结果

3、获取访问者操作系统
function osinfo() {
$os=”";
$Agent = $GLOBALS["HTTP_USER_AGENT"];
if (eregi(’win’,$Agent) && strpos($Agent, ‘95′)) {
$os=”Windows 95″;
}
elseif (eregi(’win 9x’,$Agent) && strpos($Agent, ‘4.90′)) {
$os=”Windows ME”;
}
elseif (eregi(’win’,$Agent) && ereg(’98′,$Agent)) {
$os=”Windows 98″;
}
elseif (eregi(’win’,$Agent) && eregi(’nt 5\.0′,$Agent)) {
$os=”Windows 2000″;
}
elseif (eregi(’win’,$Agent) && eregi(’nt’,$Agent)) {
$os=”Windows NT”;
}
elseif (eregi(’win’,$Agent) && eregi(’nt 5\.1′,$Agent)) {
$os=”Windows XP”;
}
elseif (eregi(’win’,$Agent) && ereg(’32′,$Agent)) {
$os=”Windows 32″;
}
elseif (eregi(’linux’,$Agent)) {
$os=”Linux”;
}
elseif (eregi(’unix’,$Agent)) {
$os=”Unix”;
}
elseif (eregi(’sun’,$Agent) && eregi(’os’,$Agent)) {
$os=”SunOS”;
}
elseif (eregi(’ibm’,$Agent) && eregi(’os’,$Agent)) {
$os=”IBM OS/2″;
}
elseif (eregi(’Mac’,$Agent) && eregi(’PC’,$Agent)) {
$os=”Macintosh”;
}
elseif (eregi(’PowerPC’,$Agent)) {
$os=”PowerPC”;
}
elseif (eregi(’AIX’,$Agent)) {
$os=”AIX”;
}
elseif (eregi(’HPUX’,$Agent)) {
$os=”HPUX”;
}
elseif (eregi(’NetBSD’,$Agent)) {
$os=”NetBSD”;
}
elseif (eregi(’BSD’,$Agent)) {
$os=”BSD”;
}
elseif (ereg(’OSF1′,$Agent)) {
$os=”OSF1″;
}
elseif (ereg(’IRIX’,$Agent)) {
$os=”IRIX”;
}
elseif (eregi(’FreeBSD’,$Agent)) {
$os=”FreeBSD”;
}
if ($os==”) $os = “Unknown”;
return $os;
}
//调用方法$os=os_infor() ;

4、文件格式类
$mime_types = array(
‘gif’ => ‘image/gif’,
‘jpg’ => ‘image/jpeg’,
‘jpeg’ => ‘image/jpeg’,
‘jpe’ => ‘image/jpeg’,
‘bmp’ => ‘image/bmp’,
‘png’ => ‘image/png’,
‘tif’ => ‘image/tiff’,
‘tiff’ => ‘image/tiff’,
‘pict’ => ‘image/x-pict’,
‘pic’ => ‘image/x-pict’,
‘pct’ => ‘image/x-pict’,
‘tif’ => ‘image/tiff’,
‘tiff’ => ‘image/tiff’,
‘psd’ => ‘image/x-photoshop’,

’swf’ => ‘application/x-shockwave-flash’,
‘js’ => ‘application/x-javascript’,
‘pdf’ => ‘application/pdf’,
‘ps’ => ‘application/postscript’,
‘eps’ => ‘application/postscript’,
‘ai’ => ‘application/postscript’,
‘wmf’ => ‘application/x-msmetafile’,

‘css’ => ‘text/css’,
‘htm’ => ‘text/html’,
‘html’ => ‘text/html’,
‘txt’ => ‘text/plain’,
‘xml’ => ‘text/xml’,
‘wml’ => ‘text/wml’,
‘wbmp’ => ‘image/vnd.wap.wbmp’,

‘mid’ => ‘audio/midi’,
‘wav’ => ‘audio/wav’,
‘mp3′ => ‘audio/mpeg’,
‘mp2′ => ‘audio/mpeg’,

‘avi’ => ‘video/x-msvideo’,
‘mpeg’ => ‘video/mpeg’,
‘mpg’ => ‘video/mpeg’,
‘qt’ => ‘video/quicktime’,
‘mov’ => ‘video/quicktime’,

‘lha’ => ‘application/x-lha’,
‘lzh’ => ‘application/x-lha’,
‘z’ => ‘application/x-compress’,
‘gtar’ => ‘application/x-gtar’,
‘gz’ => ‘application/x-gzip’,
‘gzip’ => ‘application/x-gzip’,
‘tgz’ => ‘application/x-gzip’,
‘tar’ => ‘application/x-tar’,
‘bz2′ => ‘application/bzip2′,
‘zip’ => ‘application/zip’,
‘arj’ => ‘application/x-arj’,
‘rar’ => ‘application/x-rar-compressed’,

‘hqx’ => ‘application/mac-binhex40′,
’sit’ => ‘application/x-stuffit’,
‘bin’ => ‘application/x-macbinary’,

‘uu’ => ‘text/x-uuencode’,
‘uue’ => ‘text/x-uuencode’,

‘latex’=> ‘application/x-latex’,
‘ltx’ => ‘application/x-latex’,
‘tcl’ => ‘application/x-tcl’,

‘pgp’ => ‘application/pgp’,
‘asc’ => ‘application/pgp’,
‘exe’ => ‘application/x-msdownload’,
‘doc’ => ‘application/msword’,
‘rtf’ => ‘application/rtf’,
‘xls’ => ‘application/vnd.ms-excel’,
‘ppt’ => ‘application/vnd.ms-powerpoint’,
‘mdb’ => ‘application/x-msaccess’,
‘wri’ => ‘application/x-mswrite’,
);
5、php生成excel文档
<?
header(”Content-type:application/vnd.ms-excel”);
header(”Content-Disposition:filename=test.xls”);
echo “test1\t”;
echo “test2\t\n”;
echo “test1\t”;
echo “test2\t\n”;
echo “test1\t”;
echo “test2\t\n”;
echo “test1\t”;
echo “test2\t\n”;
echo “test1\t”;
echo “test2\t\n”;
echo “test1\t”;
echo “test2\t\n”;
?>
//改动相应文件头就可以输出.doc .xls等文件格式了

php

使用PHP和XSL stylesheets转换XML文档

Tags: ,

PHP是不少在Web开发领域奋战的勇士们所选用的武器,因为它是一种很直观的编程语言,有强大的函数,良好的跨平台兼容性,还有它是免费的。从网上的小商店到大型企业的网站都能看到PHP的影子。

PHP有一点特性经常被人们忽视,那就是和XSL stylesheets合作对XML进行解析的能力。下面就让我们来看看怎样在PHP中设置一个XSL解析器以及你该如何使用这一功能。

例子
列表A是一个简单的订单文档,我们会将这个文档输入XSL解析器。同时,列表B中的XSL stylesheet也会被输入XSL解析器。
Listing A: order.xml
<?xml version=”1.0″ ?>
<Order>
<Account>9900234</Account>
<Item id=”1″>
<SKU>1234</SKU>
<PricePer>5.95</PricePer>
<Quantity>100</Quantity>
<Subtotal>595.00</Subtotal>
<Description>Super Widget Clamp</Description>
</Item>
<Item id=”2″>
<SKU>6234</SKU>
<PricePer>22.00</PricePer>
<Quantity>10</Quantity>
<Subtotal>220.00</Subtotal>
<Description>Mighty Foobar Flange</Description>
</Item>
<Item id=”3″>
<SKU>9982</SKU>
<PricePer>2.50</PricePer>
<Quantity>1000</Quantity>
<Subtotal>2500.00</Subtotal>
<Description>Deluxe Doohickie</Description>
</Item>
<Item id=”4″>
<SKU>3256</SKU>
<PricePer>389.00</PricePer>
<Quantity>1</Quantity>
<Subtotal>389.00</Subtotal>
<Description>Muckalucket Bucket</Description>
</Item>
<NumberItems>1111</NumberItems>
<Total>3704.00</Total>
<OrderDate>07/07/2002</OrderDate>
<OrderNumber>8876</OrderNumber>
</Order>
Listing B: order.xsl
<?xml version=”1.0″  ?>
<xsl:stylesheet version=”1.0″ xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<xsl:param name=”column” select=”’SKU’”/>
<xsl:param name=”order” select=”’ascending’”/>
<xsl:template match=”/”>
<html>
<body>
<xsl:apply-templates select=”Order”>
<xsl:with-param name=”sortcolumn” select=”$column” />
<xsl:with-param name=”sortorder” select=”$order” />
</xsl:apply-templates>
</body>
</html>
</xsl:template>
<xsl:template match=”Order”>
<xsl:param name=”sortcolumn” />
<xsl:param name=”sortorder” />
<table border=”1″>
<tr>
<th>Account</th>
<th>SKU</th>
<th>Description</th>
<th>Price</th>
<th>Quantity</th>
<th>Subtotal</th>
</tr>
<xsl:apply-templates select=”Item”>
<xsl:sort select=”*[name()=$sortcolumn]“  order=”{$sortorder}” />
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match=”Item”>
<tr>
<td><xsl:value-of select=”../Account” /></td>
<td><xsl:value-of select=”SKU” /></td>
<td><xsl:value-of select=”Description” /></td>
<td><xsl:value-of select=”PricePer” /></td>
<td><xsl:value-of select=”Quantity” /></td>
<td><xsl:value-of select=”Subtotal” /></td>
</tr>
</xsl:template>
</xsl:stylesheet>

概述
在这个例子中我们主要用到PHP中的三个XSL函数。首先我们要创建一个XSL引擎的实例,然后把所有要输入的文档输入这个XSL引擎进行处理,并得到返回结果,最后,当我们再也不需要这个XSL引擎时就关闭它。

创建、处理、关闭
我们将要在内存中新建一个XSL进程。为了方便在其他XSL函数中使用这个XSL进程,PHP会给我们提供这个XSL进程的句柄,而不是一个对象。建立这个XSL引擎的命令是xslt_create。函数返回一个句柄,如下所示:
$handle = xslt_create();
为了真正的解析XML文档并使XSLT能够进行处理,你必须使用PHP中的xslt_process函数。这个函数需要获取几个不同的参数。
在这里我们使用一个很基本的方法,为xslt_process提供三个参数。第一个参数是我们较早前创建的那个XSL引擎的句柄。第二个参数是输入的XML文档的文件名。第三个参数是输入的XSL文件的文件名。这个函数会返回处理结果。下面是例子:
$return = xslt_process($handle, $xmlfile, $xslfile);
最后我们要用到的函数是xslt_free。这个函数用来杀掉内存中的XSL引擎实例并释放出内存空间。它只需要一个参数,就是内存中这个XSL实例的句柄。下面是个例子:
xslt_free($handle);
综合实现
下面让我们结合上面的各个代码片断实现PHP通过XSL stylesheets来处理XML文档的方法。我们使用列表A作为我们的输入XML文档,列表B作为我们XSL输入。列表C是这个例子的完整PHP代码:
Listing C: order.php
<?php
$xmlfile = ”order.xml”;
$xslfile = ”order.xsl”;
$args = array(”column”=>”Quantity”, ”order”=>”descending”);
$engine = xslt_create();
$output = xslt_process($engine, $xmlfile, $xslfile, NULL, NULL, $args);
print $output;
xslt_free($engine);
?>
这 里需要注意一点,我们在代码中做了一点变动。在XSL stylesheet中,通过指定一些参数,我们可以改变一些区域,比如地址。这时我们要指定订单 上的项目应该按数量递减方式排列。我们使用PHP的数组来存储名字对应我们的参数,然后通过xslt_process函数将名字传递给XSL引擎。

php

使用PHP实现动态网页

Tags: ,

Merriam-Webster Online地解释,动态一词的意思是网页的内容由“通常是连续的和实时生成的活动或者改变的信息组成。”因此当我们谈 论动态数据的时候,我们也就是在谈论作为Web页面发送给用户的信息是由不同的源数据组合而成的。这与静态网页的概念是相对的,静态网页的内容并不依赖用 户输入的数据而改变而且通常是直接解析给用户。Web页面上的动态信息有三种主要的类型:
动态数据–在一个Web页面里产生的变量。
动态Web页面–整个Web页面都是动态生成的。
动态内容–Web页面的一部分是动态生成的。
你 如果希望对动态内容产生的过程进行细微的控制,就象动态数据的那种类型一样,那么数据处理的过程就会复杂一些。而如果你想生成大范围的信息,就象动态 Web页面的生成那样,那么程序的逻辑就会变得复杂。动态内容的生成是这两种方式的折衷,它能够让我们使用两个很有用的PHP函数,include()和 require()。
要记住,你在后端加入的逻辑越多,那么你的Web站点的性能将会损失得越严重。幸运的是,PHP能够很流畅的进行预处理过程,所以当我在处理动态内容和数据的时候都尽可能多的使用PHP的功能。
数据源和PHP功能
所有的动态内容都有一个共同点:它们从一个原始页面以外的数据源而来。图A列出了一些常见的数据源以及用来处理它们的相应的PHP函数。
Figure A
数据源
PHP 函数
注释
User
$HTTP_POST_VARS
$HTTP_GET_VARS
这些函数处理由用户通过Web表单直接输入的数据。
Database (local or remote)
<dbtype>_connect()
<dbtype>_pconnect()
<dbtype>_close()
<dbtype>_<function>()
example:
mysql_fetch_array()
这些都只是PHP许多数据库访问函数中的一部分,许多函数是为每个不同的数据库特别编写的。你能够在PHP函数参考手册里找到这些函数的完整列表。
Remote file
fopen(), fclose()
fgets(), fputs()
这些函数处理一个远程服务器上文件中的数据,这个文件可以通过FTP访问。
Local file
include(), require()
fopen(), fclose()
这些函数处理位于本地服务器上的文件中的数据,比方说配置文件。
常见的数据源和处理它们的PHP函数
在 这篇文章“教程:PHP起步中,”我们观看了一个演示的脚本,这个脚本要求用户输入他们最喜欢的数字。根据用户输入的结果,我们在Web页面上显示一条消 息。这就是一个由用户驱动的动态Web内容的例子。从Web表单返回的结果将决定显示的内容。一个更复杂的例子是“点击流程”应用程序,这个程序能够根据 一个用户在Web站点上访问过的页面来决定向他或者她发送什么广告。
一旦数据已经输入,不管它是由用户或者其它的方式输入的,将会被保存在一个 数据库中并在以后重新使用。如果它被用来决定显示的内容,那么这些内容将可以被认为是“由数据库驱动的动态内容。”我们将在下一篇文章中更仔细的看看这种 类型的动态信息。 目前,让我们先察看一个由文件驱动的动态内容的简单的PHP脚本的例子。我们将使用基于一个配置文件的逻辑来决定在Web页面上应该显 示什么样的页面风格和字体。我们选择的页面风格将会在用户请求Web页面的时候显示出来。(这里我想就包括文件的例子给你提个醒:你真的应该在这个例子中 为完成要求的功能而使用风格页。)
例子程序:Display.php
Display脚本使用一个独立的配置文件来包含变量值和几个含 有HTML的变量部分的包括文件。虽然这看起来不是特别动态,但是你能够轻易的要求用户使用Web表单来创建一个配置文件并使用一定的逻辑来判断应该加载 哪一个配置文件,等等。(我们在“理解PHP的函数和类”这篇文章中所作的讨论将帮助你完成这个工作。)
由于本文的目的所限,我们将跳过这方面的处理过程并尽量使它简化。表A展示了我们的主页面,以及你通过浏览器调用的页面,Display.php。(PHP代码将用粗体进行显示。)
表A
这段简单的代码必须做三件事情:

使用PHP include()函数来包含<!– display.php 这个Web页面的风格由一个配置文件决定 –>
<html>
<head>
<title>Mood Page</title>
</head>
<?php
include(”displayconf.php”);
$required_file = $display.”.php”;
require $required_file;
?>
<br><br>
<center>This is the best ”mood page” ever!</center>
</font>
</body>
</html>
Displayconf.php中的变量并对它们进行求值。
创建一个表示用户请求的文件名的变量。在我们这个例子中,Displayconf.php文件里定义的变量$display被求值,然后加上.php后缀。(这是由我们的逻辑完成的。)
使用PHP的require()函数显示正确的包含文件里的内容。
你 应该注意到在我们的例子中,PHP require()函数和include()函数是完全可以互换的。这两个函数之间主要的区别在于目标文件处理的方式 不同。一个require()语句将会由它所调用的文件替换。这意味着在一个循环当中,远程的文件只会被调用一次。而另一方面,在每次遇到 include()函数的时候,它都会被重新求值。这意味着在一个循环的过程中,文件将在每一次循环过程中都被访问一次,而且在包括文件中设置的变量每次 都会更新。
在这个例子中,我试图讲清楚什么时候使用什么函数合适。对于文件Displayconf.php,很有可能它里面的变量值已经改变。 毕竟,这是一个配置文件。因此,我选择了include()函数。而另一方面,$required文件在交互的过程中很有可能不会改变。如果用户请求的是 不同的文件体,那么我们有可能会创建一个新的文件再把它包括进来,所以我使用require()函数。
高级用户可能希望看看PHP的手册来了解更多的关于函数require_once() 和 include_once() 的信息以便能够对文件处理和配置文件变量的管理进行更好的控制。
表B 显示了我们的配置文件,Displayconf.php。(为了简单化的目的,我们将把所有的文件放在和Web服务器相同的目录下。)我们在这里要做的就是将$display变量设置成一个可选的值。
表B
<?php# displayconf.php
# display.php 的配置文件
# ————————————————-
# 将变量 $display 设置成下列值之一:
# happy, sad, 或者 generic
$display = ”happy”;
?>
最 后我们需要一些内容文件–对应配置文件中的每一个选项。因为这些内容都是静态的HTML,所以我们不需要在文件里加上PHP脚标。当你在PHP里使用 include()或者require()函数的时候,被调用的文件在处理过程开始的时候被跳过然后在处理结束的时候被加进来。
“happy”文件内容(happy.php)
<body bgcolor=pink text=yellow>
<font size=”+5″>
“Sad” 文件内容 (sad.php)
<body bgcolor=blue text=white>
<font face=”arial, helvetica” size=”+5″>
“Generic” 文件内容 (generic.php)
<body bgcolor=white text=black>
<font face=”courier” size=”+5″>
当你单击页面Display.php的时候,这个页面的外观和感受将会根据你在配置文件中输入的值而改变。
总结
在本文中,我们讨论了动态信息的基础知识并使用一个脚本来创建由文件驱动的动态内容。特别的是,我们使用include() 和 require() PHP函数来提取和发送我们的数据。
下面是一些最后的话。虽然我相信你一定熟悉WAI Web编程指南,但是你也许还应该看看W3C对于动态内容所说的支配以及用户对它的访问能力。你可能还要看看PHP手册中的这一章“使用远程文件”来学习如何使用FTP来提取配置数据。

php

Php利用java解析xml

Tags: ,

请先安装JAVA的执行环境与PHP结合,具体参考http://www.phpx.com/happy/thr78795.html
或者下载http://www.javax.org/download/php_java.rar
里面我写有个readme.txt说明文档,这个压缩包是个简单的例子。
要下载我的JAVA源码请到http://www.javax.org/download/JavaXml.rar
有其他问题请到http://www.javax.org/提问。

一 开始我想用PHP解析XML,但发现PHP要解析XML有点麻烦,好象PHP5比较方便了,但我这边没有装5,还是4.3。后来我看到IBM一篇文章 (http://www-900.cn.ibm.com/developer…kit/index.shtml)讲到可以利用JAVA来做,所以我现 在就试验了一下。
要解析的XML文件:first.xml,内容如下:
<?xml version=”1.0″ encoding=”UTF-8″?>
<product>
<hello>
<name>小曾</name>
<age>20</age>
</hello>
<hello>
<name>雨伞</name>
<age>20</age>
</hello>
</product>
其中<product>是根,<hello>是节点,一共有两个,name值名字不一样,一个是小曾一个是雨伞,年龄一样。
下面看PHP解析时候的文件:
<?php
$JavaXml = new Java(”JavaXml”); //这里是生成一个我写的JAVA解析XML数据的类
$JavaXml->init(); //这里为初始化,比如取global.properties文件里的XML文件目录(当然你下载了例子以后要改成你的XML文件目录)
$JavaXml->Parse(”first.xml”); //指定要解析的文件,相对于global.properties文件里指定的目录下
$JavaXml->get(0); //这里为取得第一个节点
echo $JavaXml->getValue(”name”).”<br>”; //取得第一个节点name标签值
echo $JavaXml->getValue(”age”).”<br>”; //取得第一个节点age标签值
$JavaXml->setValue(”name”,”大头爸爸”); //设置第一个节点name标签值为大头爸爸
$JavaXml->get(1); //这里为取得第二个节点
echo $JavaXml->getValue(”name”).”<br>”; //取得第二个节点name标签值
echo $JavaXml->getValue(”age”).”<br>”; //取得第二个节点age标签值
?>

$JavaXml->get(0);取得节点位置,比如我的XML文件有两组<hello>,这里get(0)的话就是取第一组的<hello> ,get(1)就是取第二组的<hello>.
最后输出是
小曾
20
雨伞
20
因为$JavaXml->setValue(”name”,”大头爸爸”); 这句修改了第一个节点的name标签的值,XML文件已经被更新过了,所以当再执行一次这个PHP文件的时候结果会成为
大头爸爸
20
雨伞
20

以上简单几句就解析完了,下面是我的JAVA类,里面用到了JDOM来解析XML。
import org.jdom.* ;
import org.jdom.output.* ;
import org.jdom.input.* ;
import java.io.* ;
import java.util.*;
public class JavaXml {
public String path=null;
public String XmlFileName=null;
public SAXBuilder sax=null;
public Document doc=null;
public Element root=null;
public List xlist=null;
public Element e=null;
public Element value=null;
public String getTest(){
return new String(”haha”);
}
public JavaXml(){
}
public String init(){
InputStream is = getClass().getResourceAsStream(”global.properties”);
Properties dbProps = new Properties();
try {
dbProps.load( is ) ;
}
catch ( Exception e ) {
return (”error file”);
}
this.path=dbProps.getProperty(”XmlPath”);
return (”ok”);
}
public void get(int child){
this.e=(Element)xlist.get(child);
}
public String getValue(String name){
this.value=e.getChild(name);
return this.value.getText();
}
public void setValue(String name,String value)throws Exception{
this.value=e.getChild(name);
this.value.setText(value);
XMLOutputter xmlout=new XMLOutputter();
xmlout.output(doc,new FileOutputStream(path+XmlFileName));
}
public void Parse(String XmlFileName)
throws Exception
{
this.XmlFileName=XmlFileName;
this.sax=new SAXBuilder();
this.doc=sax.build(new FileInputStream(path+XmlFileName));
this.root=doc.getRootElement();
this.xlist=root.getChildren();
}
}

php

在php中输出html代码

Tags: ,

<?php
echo <<< EOT
<table width=80% border=”2″ cellpadding=”3″ cellspacing=”0″ bordercolor=”#808080″>
<tr bgcolor=”#84A9E1″>
<td align=”center”>ClassID</td>
<td align=”center”>stuno</td>
<td  align=”center”>学生姓名</td>
<td align=”center”>家长姓名</td>
<td align=”center”>家长手机号</td>
</tr>
EOT;
?>

php

长沙发上的对话(四)

Tags: ,

有很多给猫换肤的办法

当然,如果你的站点仍然运行着PHP3,你就无法使用迄今为止的任何代码。但是不要沮丧有另一种提供给PHP3用户的解决办法。它就叫做PHPLIB,它提供了一组有用的类,允许在你的PHP3中增加对session的管理。可以按照包中的指示进行安装,你还需要修改local.inc配置文件来创建你自已的类。
PHP4中一样,在每次你初始化一个session时,你需要预先调用page_open()函数。PHPLIB返回一个缺省的名为Example_Session的类你可以在local.inc文件中修改这个值它将用在下面的例子中:

<?php

page_open(array(”sess” => “Example_Session“));

?>

在任何发给浏览器的输出之前调用page_open()非常重要。为了注册你的session变量,下面的语句可以完成这个工作。
<?php

//初始化一个sessionpage_open(array(”sess” => “Example_Session“));

//注册一个session变量$sess->register(’username’);

?>

每一个页面也必须包含相应的page_close()函数,用来确认所以的改变量被保存在数据库中。

<?php

page_close();

?>

除了这些,大部分的代码都是一样的。看一下以前例子的PHPLIB版本:

<?php

//初始化一个sessionpage_open(array(”sess” => “Custom_Session“));

//注册session变量-注意语法
$sess->register(’username’);
$sess->register(’stock1′);
$sess->register(’stock2′);
$sess->register(’stock3′);
$sess->register(’stock4′);

//连接MySQL$db =mysql_connect(”someserver.com”, “tom”, “jones“);

//选择数据库mysql_select_db(”stock_db”,$db);

//使用SQL查询数据库
$query = “select stock_pref1,stock_pref2,stock_pref3,stock_pref4
fromuser_infowhere username=’$username’”;

$result =mysql_query($query,$db);

//从数据库中取股票代码,并赋值给session变量
list($stock1,$stock2,$stock3,$stock4) =mysql_fetch_row($result);

//输出
echo “Hi $username!<br>”;
echo “Your selected stocks are:<br>”;
echo “$stock1<br>”;
echo “$stock2<br>”;
echo “$stock3<br>”;
echo “$stock4<br>”;

//生成页面其余代码

//将数据保存到数据库中

page_close();
?>

如你所见,一旦你放下PHP4版本,理解PHPLIB版并不因难当你知道了PHP4中的对session的内部支持很大程度上基于PHPLIB模块你就不会感到奇怪了。如果你感兴趣,PHPLIB实际上在对session的管理中,对身份认证和权限的类更加深入,它允许你在基于数据库的认证管理上,给一个用户允许或禁止处理的权力可以看一下文档中关于如何使用这些特性的例子。

PHPLIB也提供一些有趣的内建函数。

unregister(variable)
允许你从一个特别的session中注销一个变量。注意在那种情况下,变量并没有被删除,可是它的值将会在页尾丢失,因为它不再被保存到数据库中。

<?php

page_open(array(”sess” => “Example_Session“));

//注册一个变量$sess->register(’username’);

//检查是否它已经被注册了
if($sess->is_registered(’username’))
{
echo “Variable \”username\” is registered!<br>”;
}
else
{
echo “Variable \”username\” is unregistered!<br>”;
}

//注销一个变量$sess->unregister(’username’);

//检查是否已经被注销if($sess->is_registered(’username’))
{
echo “Variable \”username\” is registered!<br>”;
}
else
{
echo “Variable \”username\” is unregistered!<br>”;
}

page_close();

?>

is_registered(variable)如果在一个session已经被注册了,返回true,否则返回false

<?php

page_open(array(”sess” => “Example_Session“));

if($sess->is_registered(’username’))
{
echo “A session variable by the name \”username\” already
exists”;
}
else
{
$sess->register(’username’);
}

page_close();

?>

delete()释放当前的session

要注意地有趣的一点是:在PHPLIBcookie模式中,有可能在调用过delete()之后开始一个新的session,在客户端设置一个新的cookie,甚至重新注册一些以前session的变量可以从根本上使改变session飞一样。当然,你这样做事情,你需要让你的生活快起来!

url($url)充许你将用户重定向到一个新的页面。

self_url()返回一个当前页的URL的引用,包括PHP_SELFQUERY_STRING信息。

那么在最后,对那些不幸拥有一个不提供PHP4PHPLIBISP的你来说记住,通过好的cookie技术总是可能模拟出session来的。你所要做的只是设置一个带有信息的cookie,用来长期保留用户对你的站点的访问过程,每次在用户访问一个新页面的时候处理这个信息。很原始但是它可以工作,而且有时你也不能将能够做成一件事的简单方法打死!

病人离开医院

病人:哇哦,医生太好了!非常感谢你做的一切!

心理医生:没问题,维克多。我很乐意帮助你。现在感觉好点吗?

病人:噢,轻松!当我刚进来时,整个天看上去都是灰色和阴沉的现在,这个雨蓬窗户外面的景色从来没有那么好过

心理医生:维克多如果我是你在外面会很小心,扶手有一点坏了,在那可能不太安全。

病人:别担心,医生这样的天,我感到神啊啊!

php

长沙发上的对话(三)

Tags: ,

市场游戏

现在你已经知道了基本的东西,再来点复杂的吧,演示一个现实生活中的session应用。让我们假设一下,你有一个金融门户,它允许它的用户选择四支股票,然后显示每支股票的当前市场价格,并且在每一页上显示用户在这个站点上的过程。

在下面的例子中,我们假定用户已经被验证过身份并且登录到站点上来了。我们使用了MySQL数据库,里面有一个名为user_info的表,用于存储用户的四支股票和唯一用户名。一旦一个session被初始化了,我们注册变量保存用户名和四支股票,然后同数据库进行连接,取回值并显示在页面上。

代码如下:

<?php

//初始化一个sessionsession_start();

//注册session变量

//用户名
session_register(’username’);

//选择的股票变量
session_register(’stock1′);
session_register(’stock2′);
session_register(’stock3′);
session_register(’stock4′);

//连接MySQL
$db =mysql_connect(”someserver.com”, “tom”, “jones“);

//选择数据库
mysql_select_db(”stock_db“, $db);

//使用SQL查询数据库
$query = “select stock_pref1,stock_pref2,stock_pref3,stock_pref4
fromuser_infowhere username=’$username’”;

$result =mysql_query($query,$db);

//从数据库中取股票代码,并赋值给session变量
list($stock1,$stock2,$stock3,$stock4) =mysql_fetch_row($result);

echo “Hi $username!<br>”;
echo “Your selected stocks are:<br>”;
echo “$stock1<br>”;
echo “$stock2<br>”;
echo “$stock3<br>”;
echo “$stock4<br>”;

// code to generate rest of page

?>

PHP4有许多与session相关的函数大部分都不需要解释,把他们列在下面。

session_destroy():释放所有的session数据(当一个用户从一个站点注销时非常有用,你需要释放掉在他访问期间的所创建的所有变量)

session_name():设置或读取当前session的名字。

session_id():设置或读取当前sessionid值。

session_unregister(session_variable_name):从一个特别的session注销一个变量。

session_is_registered():检查是否一个session变量已经注册了。

例如:

<?php

session_start();

if(session_is_registered(username))
{
echo “A session variable by the name \”username\”
already exists”;
}
else
{
echo “No variable named \”username\” registered yet.
Registering…”;
session_register(username);
}

?>

session_encode() andsession_decode():session数据编码成字符串或将字符串解码成session数据。

在这里你可能使用他们:

<?php

session_start();

session_register(’someString‘);
$someString=”I hate cats!”;

//将所有的session变量编成一个字符串
$sessStr=session_encode();

//可以在这里看到
echo $sessStr;

echo “<br><br>”;

//在出现cats的地方用dogs进行替换
$sessStr=ereg_replace(”cats”,”dogs”,$sessStr);

//解码后更新了session变量
session_decode($sessStr);

//再显示一次$sessstr
echo $someString;

?>

最后,在开始PHPLIB之前,有一个技术性问题你应该知道的上面所有的例子都使用了cookies在客户端来保存session id值。但是如果用户的浏览器被设成拒绝cookies会怎么样呢?

如果发生这种情况,那就需要将一个session id通过嵌在url中从一页传递到另一页上去。例如:<a href=”http://www.someserver.com/admin/preferences.php3?PHPSESSID=<?echo“$PHPSESSID”; ?>”>Edit Your Portfolio! </a>

这个就可以保证在后面的页面中session变量是有效的。

php

长沙发上的对话(二)

Tags: ,

第一个session

关于演示session是如何工作的标准例子之一就是点击计数的应用这是一个简单的基于session的计数器,在你第一次访问一个web页面时初始化一个变量,每一次当你重新装入这个页面时增加它的计数。代码如下:

<?php

//初始化一个sessionsession_start();

//注册一个session变量session_register(’counter’);

?>

PHP4中每一个session都通过调用session_start()函数开始,这个函数检查一个session是否存在,如果不存在则创建一个新的。接着,用session_register()函数来注册一个变量,它将生存在整个session在上面的例子中,变量名为“counter”,并且没有给它赋任何值。

现在,让我们在上面的例子中加几行代码,点击计数将开始工作了:

<?php

//初始化一个sessionsession_start();

//注册一个session变量session_register(’counter’);

//增加计数器$counter++;echo(”You have visited this page $counter times! Don’t you have anything else to do, you bum?!”);

?>

试一试它!当你每一次重装这个页面时,计数器的值都在增加,这个说明了在session中变量是如何被保存的。

为什么为发会生这样的情况呢?唔,每次一个session被创建,一个sessioncookie[叫做PHPSESSID]会在客户系统中被创建并且被赋了一个随机数;同时,在服务器端一个相似的入口被创建,它包含着在session中注册过的变量。在客户与服务器之间的通讯就通过这个有相同命名的session的标识号(id)来实现,这样就可以在整个session期间保存不同的变量。

让我们再看一下复杂一点的吧?看这个例子,它演示了一个使用session变量的计时器,它将告诉你在重新装入页面时过了多长的时间。

<?php

session_start();

//session变量用于保存计数器session_register(’counter’);

//session变量用于保存最后装入的时间值

//这个值被保存以便比较两次的不同session_register(’timeAtLastLoad‘);

//当前时间$timeNow= time();

//增加计数$counter++;

//计算两次时间间隔$timeLapsed= $timeNow- $timeAtLastLoad;

//显示信息if($counter > 1)
{
echo “<b>It’s been $timeLapsedseconds since you last viewed
this page.</b>”;
}
else
{
echo “<b>First time here? Reload this page to see how the
session works!</b>”;

}

$timeAtLastLoad= $timeNow;

?>

php

长沙发上的对话(一)

Tags: ,

开始治疗

心理医生: 好。你今天感觉怎么样,维克多?

病人: 不太好,医生。我近来感到有点忧郁…

心理医生: 那是为什么,维克多?

病人: 我不知道,医生。我睡眠不太好,而且我一点胃口也没有。有一天我们去一个意大利餐馆,要了通心面 — 但时当他们把它端上来的时候,我一点也吃不下去。我就一直看着它,在我的头里一直回荡着“女高音”的主题曲…

心理医生: 家里怎么样?

病人: 都很好,我想。Marge大部分时间都在厨房,试她从网上下载的菜谱。孩子们每天很早就出去了,一般在吃饭时才看得见他们,但是现在他们开始在Burger King吃了。那我也不能责备他们。

心理医生: 工作 – 都很好吧?

病人: 不太好 – 我有一个虐待成性的魔鬼老板,他打算打我的生活变成象Dilbert Zone一样!

心理医生: 跟我说一说他吧。

病 人: 好,你知道我是做什么的 – 我是一个在Used Socks. Inc.的web程序员。下个星期我们的新网站就要使用了,我们正在做着完全不同的东西 — 一个在线商店,供人们出售他们的旧物。我们得到了一些好心人的投资 – 6百万元,如果我们成为在web最受欢迎的旧物门户,我们还可得到更多的投资。

心理医生: 听上去对你不错嘛。

病人: 你说的对。但是,然后有一天老板进来,他说他交给我一项开发在线商店购物车的工作。他明确地要求我用什么叫“session”的东西。当然,只不过让事情变得有趣,他说他想在两天内做完并能运行…虐待狂、变态!

心理医生: 有问题吗?

病人: 有,特别是首先我根本不知道“session”是什么,或怎么去用它。我意思是说,我原以为一个session 就是对一个病人的短期治疗 — 有一点象我们正在做的一样。

心理医生: 哦,维克多,维克多…这就是麻烦你的事吗?我想我可能有东西能帮助你…西雅图无状态

开低级玩笑的人为了给能听到谈话的年轻女性留下印象,互相之间最经常说的事情之一就是:“HTTP是一种无状态协议,Internet是无状态开发环 境”。用简单的话来讲,HTTP(HyperText Transfer Protocal )协议,作为web的骨干,不能够记住与一个网站连接用户的身份,所以对web页的请求被看作是唯一和独立的连接,与在它之前的连接无论如何都没有关系 — 这一点与今天很多爱冒险的十几岁的年轻人的行为很象,他们每天喝? 夜,第二天早晨醒来对发生过什么都不记得了,晚上再出去做同样的事,一遍又一遍…

现在,如果你是漫无目的地从一个站点冲浪到另一个,没有什么问题。但是当你想从Amazon.com上买几本书会怎么样呢?“在一个无状态的环境中,记住所有在你的购物单上的物品是非常困难的,因为HTTP协议的这种无状态的性质使得跟踪选中物品是不可能的。

因此就要求一种能够使记住状态成为可能的方法,能够跟踪用户的连接并且保存连接特定数据的东西。因此产生了“cookie”,它可以允许Web 站点在客户系统的一个文件中保存客户特定信息,并且当任何时候请求时都可以从文件中取出信息。所以,在上面的购物车例子中,被选中的商品可以加到 cookie中,并且在消费者结帐时,可以被取出并呈现在购物单中。

基于cookie的解决方案存在一个问题,那就是它要求 cookie能够被客户所接受。所以,有另一种解决办法就是使用“session”,当一个客户访问一个Web站点时,用它来保存特定的一小块数据。这个 会话(session)数据在整个访问期间被保存下来。一个session可以被看成一个信息篮,它保存着主机的变量对。这些变量对在整个访间期间都存 在,并且可以在任何时刻被处理。这个方法对协议的无状态的特点提供了一流的解决办法,并且在今天很多大型的网站上,可以跟踪和保存信息,用于个人和商业交 易。

每一个被创建的session 都有一个唯一的标识串,这个串被发送到客户端,同时在服务端也生成了同样唯一标识串的入口,或者放在文本文件或者在一个数据库中。现在就可以注册任何的 session 变量 — 这些普通的变量可以保存文本或数值信息,可以通过session 被读出,或写入。

现在,如果你已经跟 随着开放源码运动,你已经知道了PHP ,在这个星球上最热门的脚本语言。最新的版本是PHP4,包括了对session的创建和管理的支持,在下面的几页中,我们将向你展示如何使用它。如果你 还在使用PHP3,不要失望 — 我们也将涉及PHPLIB,它包括一组强大的PHP对象,可以在基于PHP3的站点上加入无缝的session管理。

在下面几页中,我们假设你已经有一个支持PHP4或PHPLIB的站点。如果还没有,你应该下载这些包,并且将它们安装到你的开发机器上去。PHP4, 是一个质量优良的代码,可以在PHP站点 http://www.php.net找到,最新的PHPLIB版本可以在http://phplib.netuse.de/找到。

php

正则表达式使用详解(二)

Tags: , ,

在对正则表达式有了较为全面的了解之后,我们就来看一下如何在Perl,PHP,以及JavaScript/” target=”_blank”>JavaScript中使用正则表达式。

通常,Perl中正则表达式的使用格式如下:

operator / regular-expression / string-to-replace / modifiers

运算符一项可以是m或s,分别代表匹配运算和替换运算。

其中,正则表达式一项是将要进行匹配或替换操作的模式,可以由任意字符,元字符,或定位符等组成。替换字符串一项是使用s运算符时,对查找到的模式匹配对象进行替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如:

s/geed/good/

将会在目标对象中查找第一个出现的geed字串,并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找—替换操作的话,可以使用参数 “g”,即s/love/lust/g。

此外,如果我们不需要限制匹配的大小写形式的话,可以使用参数 “i ”。例如,

m/JewEL/i

上述正则表达式将会与目标对象中的jewel,Jewel,或JEWEL相匹配。

在Perl中,使用专门的运算符“=~”指定正则表达式的匹配对象。例如:

$flag =~ s/abc/ABC/

上述正则表达式将会把变量$flag中的字串abc替换为ABC。

下面,我们就在Perl程序中加入正则表达式,验证用户邮件地址格式的有效性。代码如下:

#!/usr/bin/perl
# get input
print “Whats your email address?\n”;
$email = $#@60;STDIN$#@62;;
chomp($email);
# match and display result
if($email =~ /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/)
{
print(“Your email address is correct!\n”);
}
else
{
print(“Please try again!\n”);
}

如果用户更偏爱PHP的话,可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下:
ereg(pattern, string)

其中,pattern代表正则表达式的模式,而string则是执行查找替换操作的目标对象。同样是验证邮件地址,使用PHP编写的程序代码如下:

$#@60;?php
if (ereg(“^([a-zA-Z0-9_ +@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+”,$email))
{ echo “Your email address is correct!”;}
else
{ echo “Please try again!”;}
?$#@62;
最后,我们在来看一下JavaScript/” target=”_blank”>JavaScript。JavaScript/” target=”_blank”>JavaScript 1.2中带有一个功能强大的RegExp()对象,可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式,并相 应的返回true或false。

我们可以使用JavaScript/” target=”_blank”>JavaScript编写以下脚本,验证用户输入的邮件地址的有效性。

$#@60;html$#@62;
$#@60;head$#@62;
$#@60;script language=”Javascript1.2″$#@62;
$#@60;!– start hiding
function verifyAddress(obj)
{
var email = obj.email.value;
var pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(flag)
{
alert(“Your email address is correct!”);
return true;
}
else
{
alert(“Please try again!”);
return false;
}
}
// stop hiding –$#@62;
$#@60;/script$#@62;
$#@60;/head$#@62;
$#@60;body$#@62;
$#@60;form onSubmit=”return verifyAddress(this);”$#@62;
$#@60;input name=”email” type=”text”$#@62;
$#@60;input type=”submit”$#@62;
$#@60;/form$#@62;
$#@60;/body$#@62;
$#@60;/html$#@62;