当前位置:  编程技术>php
本页文章导读:
    ▪php xml文档解析函数学习实例      学习php xml文档解析函数的应用,只要你理解了xml文件的编码与书写规范,并实际编写过几个生成xml、读取xml、以及借助xml生成比如树关图表等的函数以后,基本就可以掌握php xml文档解析与操.........
    ▪php auto_prepend_file和auto_append_file的用法      使用require()将页眉和脚注加入到每个页面中,除了传统的直接require以外,还有一种办法,就是使用配置文件php.ini中的两个选项auto_prepend_file和auto_append_file。 通过这两个选项来设置页眉和脚.........
    ▪php GD库生成验证码的实例      还是那个我们喜欢的php GD库, 刚刚为大家介绍完 php GD库上传图片并创建缩略图的代码 ,这里再为大家推出一篇 php GD库生成验证码的实例。 有兴趣的朋友,不妨继续阅读吧。 配置与测试,.........

[1]php xml文档解析函数学习实例
    来源: 互联网  发布时间: 2013-12-24

学习php xml文档解析函数的应用,只要你理解了xml文件的编码与书写规范,并实际编写过几个生成xml、读取xml、以及借助xml生成比如树关图表等的函数以后,基本就可以掌握php xml文档解析与操作了。

php的xml解析函数,处理xml文档无异于处理文件,对于读取与生成xml都是必须的。

1、摘录php手册中的一些例子
 

代码示例:

<?php
$file = "xmltest.xml";
//验证文件的合法性
function trustedFile($file) {
// only trust local files owned by ourselves
if (!eregi("^([a-z]+)://", $file)
&& fileowner($file) == getmyuid()) {
return true;
}
return false;
}
//处理起始标记的函数。用特殊颜色标记并输出显示。
//注意$attribs为数组
function startElement($parser, $name, $attribs=array() ) {
print "&lt;<font color=\"#0000cc\">$name</font>";
if (sizeof($attribs)) {
while (list($k, $v) = each($attribs)) {
print " <font color=\"#009900\">$k</font>=\"<font
color=\"#990000\">$v</font>\"";
}
}
print "&gt;";
}
//结束标记处理并显示
function endElement($parser, $name) {
print "&lt;/<font color=\"#0000cc\">$name</font>&gt;";
}
//处理数据部分
function characterData($parser, $data) {
print "<b>$data</b>";
}
//处理指令(PI)处理器 参数处理函数
function PIHandler($parser, $target, $data) {
switch (strtolower()($target)) {
case "php":
global $parser_file;
// If the parsed document is "trusted", we say it is safe
// to execute PHP code inside it. If not, display the code
// instead.
if (trustedFile($parser_file[$parser])) {
eval($data);
} else {
printf("Untrusted PHP code: <i>%s</i>",
htmlspecialchars()($data));
}
break;
}
}
//默认处理句柄
function defaultHandler($parser, $data) {
if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {//判断数据是否为外部实体,注意这种判断方法。
printf('<font color="#aa00aa">%s</font>',
htmlspecialchars($data));
} else {
printf('<font size="-1">%s</font>',
htmlspecialchars($data));
}
}
//外部实体处理句柄
function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,$publicId) {
if ($systemId) {
if (!list($parser, $fp) = new_xml_parser($systemId)) {
printf("Could not open entity %s at %s\n", $openEntityNames,
$systemId);
return false;
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
printf("XML error: %s at line %d while parsing entity %s\n",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser), $openEntityNames);
xml_parser_free($parser);
return false;
}
}
xml_parser_free($parser);
return true;
}
return false;
}
//xml分析器。
function new_xml_parser($file) {
global $parser_file;
$xml_parser = xml_parser_create(); //建立一个 XML 解析器,此函数返回解释器的操作句柄。
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); //设置是否采用大小写折叠,及目标编码
xml_set_element_handler($xml_parser, "startElement", "endElement");//建立起始和终止元素处理器,bool
xml_set_character_data_handler($xml_parser, "characterData");//建立字符数据处理器,bool
xml_set_processing_instruction_handler($xml_parser, "PIHandler");//建立处理指令(PI)处理器
xml_set_default_handler($xml_parser, "defaultHandler"); //默认处理器
xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");//外部实体指向处理器

if (!($fp = @fopen($file, "r"))) {
return false;
}
if (!is_array($parser_file)) {
settype($parser_file, "array");//将文件处理变量设为array类型
}
$parser_file[$xml_parser] = $file; //?将文件名赋值给以解释器操作句柄为索引的数组?(解释器的句柄以资源记录的形式返回)
// echo "<font color=red >parser = ";
// print_r($parser_file);
// echo "<br>$xml_parser";
// echo "</font>";
return array($xml_parser, $fp); //解释器的操作句柄 和待分析文件的句柄
}
if (!(list($xml_parser, $fp) = new_xml_parser($file))) {
die("could not open XML input");
}
print "<pre>";
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {//此处采用条件赋值。当条件表达式失效时执行if处理,否则跳过。
die(sprintf()("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
print "</pre>";
print "parse complete\n";
xml_parser_free($xml_parser);
?>

2、xmltest.xml文件
 

代码示例:
<?xml version="1.0" encoding="UTF-8" ?>
<!--因为对xml了解不是很深,故将实体引用部分略去了 -->
<chapter>
<TITLE>xml文件</TITLE>
<para>
<informaltable>
<tgroup cols="3">
<tbody>
<row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
<row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
</tbody>
</tgroup>
</informaltable>
</para>
<section id="about">
<title>About this Document</title>
<para>
<!-- this is a comment -->
<?php print 'Hi! This is PHP version '.phpversion(); ?>
</para>
</section>
</chapter>

#-----------------
这里为大家提供一个将xml文件处理成php数组的例子。
 

代码示例:

<?php
/**
  @xml文件转php数组
  @http://www.
*/
class AminoAcid {
var $name; // aa name
var $symbol; // three letter symbol
var $code; // one letter code
var $type; // hydrophobic, charged or neutral

function AminoAcid ($aa) {
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename) {
// read the xml database of aminoacids
$data = implode("",file($filename));//首先将整篇文章读入数组,之后再将数组连接成字符串,赋值给$data.
$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);//不使用大小写折叠
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$data,$values,$tags);//将 XML 数据解析到数组中,该函数将 XML 文件解析到两个对应的数组中,
//$tags 参数含有指向 $values 数组中对应值的指针。最后两个数组参数可由指针传递给函数。
xml_parser_free($parser);
// loop through the structures
//针对具体的应用(不同的xml文件,修改此处循环结构得到具体的数组即可。
foreach ($tags as $key=>$val) {
if ($key == "molecule") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$tdb[] = parseMol(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
// echo "<font color=red>values is:";
// print_r($values);
// echo "</font>";
return array($tdb,$values);
}
function parseMol($mvalues) {
for ($i=0; $i < count($mvalues); $i++)
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];

// echo "<font color=blue> after parsemol :";
// print_r($mol);
// echo "</font>";
return new AminoAcid($mol);
}
$db = readDatabase("moldb.xml");
echo "** Database of AminoAcid objects:\n";
// echo "<font color=purple> readdatabase :";
print_r($db[0]);
// echo "</font>";

$s = parseMol($db[1]);
?>

附:moldb.xml文件
 

代码示例:
<?xml version="1.0" encoding="UTF-8" ?>
<moldb>
<molecule>
<name>Alanine</name>
<symbol>ala</symbol>
<code>A</code>
<type>hydrophobic</type>
</molecule>
<molecule>
<name>Lysine</name>
<symbol>lys</symbol>
<code>K</code>
<type>charged</type>
</molecule>
</moldb>

    
[2]php auto_prepend_file和auto_append_file的用法
    来源: 互联网  发布时间: 2013-12-24

使用require()将页眉和脚注加入到每个页面中,除了传统的直接require以外,还有一种办法,就是使用配置文件php.ini中的两个选项auto_prepend_file和auto_append_file。
通过这两个选项来设置页眉和脚注,可以保证它们在每个页面的前后被载入。

使用这些指令包含的文件可以像使用include()语句包含的文件一样;也就是,如果该文件不存在,将产生一个警告。

Windows中这样设置:
 

代码示例:
auto_prepend_file = "c:/Program Files/include/header.php" 
auto_append_file = "c:/Program Files/include/footer.php"

unix中这样设置:
 

代码示例:
auto_prepend_file = "/home/username/include/header.php"
auto_append_file = "/home/username/include/footer.php"

如果使用了这些指令,就不需要再输入include()语句,但页眉和脚注在页面中不再是页面的可选内容。
 
如果使用的是Apache Web服务器,可以对单个目录进行不同配置选项的修改。这样做的前提是服务器允许重设其主配置文件。要给目录设定自动前加入和自动追加,需要在该目录中创建一个名为.htaccess的文件。这个文件需要包含如下两行代码:
 

代码示例:
php_value auto_prepend_file "/home/username/include/header.php"
php_value auto_append_file "/home/username/include/footer.php"

注意:
其语法与配置文件php.ini中的相应选项有所不同,和行开始处的php_value一样:没有等号。
许多php.ini中的配置设定也可以按这种方法进行修改。

在.htaccess中设置选项,而不是php.ini中 或是在Web服务器的配置文件中进行设置,将带来极大的灵活性。
可以在一台只影响你的目录的共享机器上进行。
不需要重新启动服务器而且不需要管理员权限。
使用.htaccess方法的一个缺点就是目录中每个被读取和被解析的文件每次都要进行处理,而不是只在启动时处理一次,所以性能会有所降低。


    
[3]php GD库生成验证码的实例
    来源: 互联网  发布时间: 2013-12-24

还是那个我们喜欢的php GD库, 刚刚为大家介绍完 php GD库上传图片并创建缩略图的代码 ,这里再为大家推出一篇 php GD库生成验证码的实例。
有兴趣的朋友,不妨继续阅读吧。

配置与测试,参照上篇:php GD库上传图片并创建缩略图的代码 。

1、表单auth.html
 

代码示例:
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>验证码</title>
</head>
<body>
<h1>请输入验证码</h1>
<form action="/blog_article/check_auth.html" method="post">
   <input name="auth" type="text">
   <img src="/blog_article/auth.html" border="0" />
   <input type="submit" value="提交">
</form>
</body>
</html>

2、生成验证码 auth.php
 

代码示例:

<?php
   session_start();
   header("Content-type:image/png");

   $img_width=100;
   $img_height=20;

   srand(microtime()*100000);
   for($i=0;$i<4;$i++)
   {
        $new_number.=dechex(rand(0,15));
   }

   $_SESSION[check_auth]=$new_number;
   $new_number=imageCreate($img_width,$img_height);//创建图象
   ImageColorAllocate($new_number,255,255,255);  //设置背景色为白色

   for($i=0;$i<strlen($_SESSION[check_auth]);$i++)
   {
       $font=mt_rand(3,5);
       $x=mt_rand(1,8) + $img_width*$i/4;
       $y=mt_rand(1,$img_height/4);
       $color=imageColorAllocate($new_number,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));//设置字符颜色
       imageString($new_number,$font,$x,$y,$_SESSION[check_auth][$i],$color);//输出字符
   }

   ImagePng($new_number);
   ImageDestroy($new_number);
?>

3、提交页面 check_auth.php
 

代码示例:

<?php
   session_start();
   $auth=$_POST['auth'];

   if(empty($auth))
   {
       echo '错误:验证码不能为空';
       die;
   }

   if($auth==$_SESSION['check_auth'])
   {
       echo '正确';
   }
   else
   {
       echo '错误:验证码输入错误';
   }
?>


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3