字符截取+删除html

function cutdot($Str, $Length, $dot) {//$Str为截取字符串,$Length为需要截取的长度
global $s;
$i = 0;
$l = 0;
$ll = strlen($Str);
$s = $Str;
$f = true;

while ($i <= $ll) {
if (ord($Str{$i}) < 0x80) {
$l++; $i++;
} else if (ord($Str{$i}) < 0xe0) {
$l++; $i += 2;
} else if (ord($Str{$i}) < 0xf0) {
$l += 2; $i += 3;
} else if (ord($Str{$i}) < 0xf8) {
$l += 1; $i += 4;
} else if (ord($Str{$i}) < 0xfc) {
$l += 1; $i += 5;
} else if (ord($Str{$i}) < 0xfe) {
$l += 1; $i += 6;
}

if (($l >= $Length) && $f) {
$s = substr($Str, 0, $i);
$f = false;
}

if (($l > $Length) && ($i < $ll)) {
$s = $s;
return $s.$dot; //如果当前串长度小与指定长度,则退出。
}
}
return $s;
}

//删除html样式,得到纯文本
function deleteHtmlTags($string, $br = false,$Length=””,$dot=””)
{
while(strstr($string, ‘>’))
{
$currentBeg = strpos($string, ‘<‘);
$currentEnd = strpos($string, ‘>’);
$tmpStringBeg = @substr($string, 0, $currentBeg);
$tmpStringEnd = @substr($string, $currentEnd + 1, strlen($string));
$string = $tmpStringBeg.$tmpStringEnd;
}

if(!empty($Length)){
return cutdot($string, $Length, $dot);
}else{
return $string;
}
}


关注公众号,了解更多it技术(it问答网

如何删除数据库里最后一条数据和如何删除数据库里第一条数据

学员问题:

徐多蔚老师给出的解决方案格式:

delete a from infos a,(select max(id) id from infos) b where a.id = b.id;   max最后一个id
delete a from infos a,(select min(id) id from infos) b where a.id = b.id; min获得第一个id


关注公众号,了解更多it技术(it问答网

GIT (分布式版本控制系统)

来源:https://baike.baidu.com/item/GIT/12647237?fr=aladdin

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。[1]  Git的读音为/gɪt/。
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。[2]  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 很多 Freedesktop 的项目迁移到了 Git 上。

特点

编辑

分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。
下图是经典的git开发过程。
Git的功能特性:
从一般开发者的角度来看,git有以下功能:
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能:
1、查看邮件或者通过其它方式查看一般开发者的提交状态。
2、打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
3、向公共服务器提交结果,然后通知所有开发人员。
优点:
适合分布式开发,强调个体。
公共服务器压力和数据量都不会太大。
速度快、灵活。
任意两个开发者之间可以很容易的解决冲突。
离线工作。
缺点:
资料少(起码中文资料很少)。
学习周期相对而言比较长。
不符合常规思维。
代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

关注公众号,了解更多it技术(it问答网

kohana框架介绍

Kohana 是一款纯 PHP5 的框架,基于 MVC 模式开发, 它的特点就是高安全性,轻量级代码,容易使用。 2009年9月发布了3.0版本,支持HMVC模式。

 

简介编辑
kohana是一个基于MVC模型构建的PHP5框架,它的目标旨在安全,重量轻,且易于使用。

特点编辑
1。严谨的PHP5面向对象编程。优势:可见性保护,自动加载,重载,接口,抽象类,单一模式等。
2。社区,没有公司。Kohana是由社区构想,讨论,及编码。Kohana的开发者们来自世界各地,有着各自的天赋。这使得开发速度得以提高,并在短时间内提供bug修复以及反馈用户提出的建议。
3。GET,POST,COOKIE,SESSION数组都能按照预期的工作。Kohana不限制你访问全局数据,但是提供了XSS过滤和检查所有的全局变量。
4。级联式资源,模块和继承。可以从你的系统,程序或者模块路径的任何地方加载控制器,模型,类库,助手和视图。配置参数可以继承或动态声明覆盖。
5。没有名字空间冲突。类前缀和后缀用来保护名字空间冲突。
6。类的自动加载。Kohana里的所有类都能自动被框架加载,不需要手动引用。
7。API一致性。类能使用驱动不同的访问不同的协议来保持API的一致性,即使底层发生变化。
8。强大的事件处理机制。Kohana的事件可被动态的添加、替换或删除。

目标编辑
更安全在任何时候,对安全的最佳做法:
*kohana内置XSS保护,也可以使用HTMLPurfier作为的XSS过滤器。
*所有数据插入到数据库是避免使用数据库特定方法,如mysql_real_escape_string,以防止SQL注入攻击。Kohana里的magicquotes是被关闭的。
*所有POST,GET,和COOKIE数据都经过处理,以防止恶意行为。
更轻量级以最有效的方式提供最大的灵活性:
*Kohana尽可能的使用公约配置(conventionoverconfiguration)。
*合理的配置和高度优化的环境检测例程允许kohana运行在几乎任何php5环境。
*松耦合(Loosecoupling)是用来总是载入的最少数量的文件,减少资源的使用。
*一个清洁的API和使用本土职能,尽可能使kohana成为最快的php5框架之一。

http://kohanaframework.org/


关注公众号,了解更多it技术(it问答网

php大小写敏感问题的总结(实用型)

我们知道,PHP语言对大小写敏感问题的处理有点乱,在编程时需要多加注意,特别是在linux平台中更要注意。本文对这一问题做个总结,供大家学习参考。

说明:
不鼓励用这些规则,仅作为学习研究之用。
在编程中,应当坚持“大小写敏感”,遵循统一的代码规范。

一、大小写敏感
1. 变量名区分大小写
所有变量均区分大小写,包括普通变量以及$_GET,$_POST,$_REQUEST,$_COOKIE,$_SESSION,$GLOBALS,$_SERVER,$_FILES,$_ENV 等;
例子:

<?php
$abc = ‘abcd’;
echo $abc; //输出 ‘abcd’
echo $aBc; //无输出
echo $ABC; //无输出
?>

 

2. 常量名默认区分大小写,通常都写为大写

<?php
define(“ABC”,”Hello World”);
echo ABC; //输出 Hello World
echo abc; //输出 abc
?>

3. php.ini配置项指令区分大小写
如 file_uploads = 1 不能写成 File_uploads = 1

 

二、大小写不敏感
1. 函数名、方法名、类名 不区分大小写,但推荐使用与定义时相同的名字
例子:

<?php
function show(){
echo “Hello World”;
}
show(); //输出 Hello World 推荐写法
SHOW(); //输出 Hello World
?>

<?php
class cls{
static function func(){
echo “hello world”;
}
}

Cls::FunC(); //输出hello world
?>

2. 魔术常量不区分大小写,推荐大写
包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、 __NAMESPACE__。
例子:

<?php
echo __line__; //输出 2
echo __LINE__; //输出 3
?>

3. NULL、TRUE、FALSE不区分大小写
例子:

<?php
$a = null;
$b = NULL;
$c = true;
$d = TRUE;
$e = false;
$f = FALSE;
var_dump($a == $b); //输出 boolean true
var_dump($c == $d); //输出 boolean true
var_dump($e == $f); //输出 boolean true
?>

4.类型强制转换,不区分大小写

包括

(int),(integer) – 转换成整型
(bool),(boolean) – 转换成布尔型
(float),(double),(real) – 转换成浮点型
(string) – 转换成字符串
(array) – 转换成数组
(object) – 转换成对象
<?php
$a=1;
var_dump($a); //输出 int 1
$b=(STRING)$a;
var_dump($b); //输出string ‘1’ (length=1)
$c=(string)$a;
var_dump($c); //输出string ‘1’ (length=1)
?>

 


关注公众号,了解更多it技术(it问答网

快速实现Magento多语言的设置和产品数据的多语言方法-线下安装

MagenTo默认支持多语言网店,不过要使用多语言功能,需要进行一些设置。

一、后台多语言支持(中文化)

Magento登录后台时默认的是显示的是英文界面,在页面左下角选择语言为中文就会跳转为中文界面,如果还是显示英文,则是因为没有下载中文语言包的原因,按以下步骤操作:

1.下载中文语言包

2.上传到指定目录

3.切换语言为简体中文,并清空缓存

 

二、前台多语言支持(多种方案)

1.下载指定语言包
2.上传到指定目录(app/local)
3.登陆管理后台 并创建一个新的store view在Manage stores页面,指定名称如“Chinese”
4.到admin panel System > Configuration > general处

然后选择 store view “Chinese” locale options > locale > Chinese
select store view “English” locale options > locales > English

保存设置。这样你就有了2种语言的界面。其实是2个store view。
最后刷新缓存,在System->Cache Management

上面介绍的方案是单网店对应多语言,如果要实现不同的域名或子目录对应不同的语言,可以添加多个Store,并指定对应的语言即可。

三、产品数据,文章页面的多语言实现

上述步骤安装完成后,仅是框架页面和导航结构实现了多语言的支持。如果是自己添加的产品分类,产品标题和内容,文章CMS页面等处要显示对应的语言内容,还需要为不同的语言/商店添加不同的语言内容,如不另外添加的话,会显示默认语言添加的内容。

如果你的网站产品内容比较多,要添加多语言的内容的工作就会比较繁琐,需要把一个产品标题或内容从原来的语言翻译成目标语言,然后再添加到指定的语言产品数据库。


关注公众号,了解更多it技术(it问答网

修改 Apache 根目录

在安装 Apache 时,会默认文件根目录为安装目录下的htdocs。可以修改 Apache 的配置文件 httpd.conf 里有关文件根目录的设置修改根目录。

修改 Apache 文件根目录的操作如下:

1. 备份 Apache 配置文件 httpd.conf,该配置文件的路径是:

%install%\conf\httpd.conf

2. 打开 http.conf 文件,找到 DocumentRoot 为开头的那一行,将DocumentRoot改成新的 DocumentRoot 路径

比如想改到 D:\website,就改成

DocumentRoot D:/website”

3. 然后找到 http.conf 文件中的如下内容

# This should be changed to whatever you set DocumentRoot to.#<Directory “C:/Program Files/Apache Software Foundation/Apache2.2/htdocs”>

将 Diectory 中的路径改成你新设的文件根目录,比如:

<Directory “D:/website”>

5. 重新启动 Apache

修改了文件根目录完成

////////////////////////////////其他虚拟目录创建

环境:appserv构架的,端口:90

测试页面:http://127.0.0.1:90

目的:将f盘下的www文件夹作为虚拟目录!

找到
C:\\AppServ\\Apache2.2\\conf 里面的httpd.conf文件,(修改前备份下)用记事本打开,找到:

Alias /icons/ “C:/AppServ/Apache2.2/icons/”

<Directory “C:/AppServ/Apache2.2/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

修改如下:

Alias /icons/ “C:/AppServ/Apache2.2/icons/”
Alias /life/ “f:/www/”

<Directory “C:/AppServ/Apache2.2/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

<Directory “f:/www”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>

重新启动Apache
测试访问:

http://127.0.0.1:90/life/页面名称

收藏于 2010-06-13


关注公众号,了解更多it技术(it问答网

PHP与MYSQL事务处理

MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。
注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
***:一般MYSQL数据库默认的引擎是MyISAM,这种引擎不支持事务!如果要让MYSQL支持事务,可以自己手动修改:
方法如下:1.修改c:\appserv\mysql\my.ini文件,找到skip-InnoDB,在前面加上#,后保存文件。
2.在运行中输入:services.msc,重启mysql服务。
3.到phpmyadmin中,mysql->show engines;(或执行mysql->show variables like ‘have_%’; ),查看InnoDB为YES,即表示数据库支持InnoDB了。
也就说明支持事务transaction了。
4.在创建表时,就可以为Storage Engine选择InnoDB引擎了。如果是以前创建的表,可以使用mysql->alter table table_name type=InnoDB;
或 mysql->alter table table_name engine=InnoDB;来改变数据表的引擎以支持事务。
*/
/*************** transaction–1 ***************/
$conn = mysql_connect(‘localhost’,’root’,’root’) or die (“数据连接错误!!!”);
mysql_select_db(‘test’,$conn);
mysql_query(“set names ‘GBK'”); //使用GBK中文编码;
//开始一个事务
mysql_query(“BEGIN”); //或者mysql_query(“START TRANSACTION”);
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$sql2 = “INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query(“COMMIT”);
echo ‘提交成功。’;
}else{
mysql_query(“ROLLBACK”);
echo ‘数据回滚。’;
}
mysql_query(“END”);
/**************** transaction–2 *******************/
/*方法二*/
mysql_query(“SET AUTOCOMMIT=0”); //设置mysql不自动提交,需自行用commit语句提交
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$sql2 = “INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query(“COMMIT”);
echo ‘提交成功。’;
}else{
mysql_query(“ROLLBACK”);
echo ‘数据回滚。’;
}
mysql_query(“END”); //事务处理完时别忘记mysql_query(“SET AUTOCOMMIT=1”);自动提交


/******************对于不支持事务的MyISAM引擎数据库可以使用表锁定的方法:********************/

//MyISAM & InnoDB 都支持,
/*
LOCK TABLES可以锁定用于当前线程的表。如果表被其它线程锁定,则造成堵塞,直到可以获取所有锁定为止。
UNLOCK TABLES可以释放被当前线程保持的任何锁定。当线程发布另一个LOCK TABLES时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁。
*/

mysql_query(“LOCK TABLES `user` WRITE”);//锁住`user`表
$sql = “INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, ‘test1’, ‘0’)”;
$res = mysql_query($sql);
if($res){
echo ‘提交成功。!’;
}else{
echo ‘失败!’;
}
mysql_query(“UNLOCK TABLES”);//解除锁定

百度文献:
http://wenku.baidu.com/view/62d2b7360b4c2e3f572763c8.html

MYSQL高级特性 — 事务处理 下面以两个银行账户之间的转账为例子进行演示。 要使用MySQL中的事务处理,首先需要创建使用事务表类型(如BDB = Berkeley DB或InnoDB)的表。 CREATE TABLE account ( account_id BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, balance DOUBLE ) TYPE = InnoDB; 要在事务表上使用事务处理,必须要首先关闭自动提交: SET AUTOCOMMIT = 0; 事务处理以BEGIN命令开始: BEGIN; 现在mysql客户处在于服务器相关的事物上下文中。任何对事务表所做的改变在提交之前不会成为永久性的改变。 UPDATE ACCOUNT SET balance = 50.25 WHERE account_id = 1; UPDATE ACCOUNT SET balance = 100.25 WHERE account_id = 2; 在做出所有的改变之后,使用COMMIT命令完成事务处理: COMMIT; 当然,事务处理的真正优点是在执行第二条语句发生错误时体现出来的,若在提交前终止整个事务,可以进行回滚操作: ROLLBACK; 下面是另一个例子,通过MYSQL直接进行数学运算: SELECT @first := balance FROM account WHERE account_id = 1; SELECT @second := balance FROM account WHERE account_id = 2; UPDATE account SET balance = @first – 25.00 WHERE account_id = 1; UPDATE account SET balance = @second + 25.00 WHERE account_id = 2; 除了COMMIT命令外,下列命令也会自动结束当前事务: ALTER TABLE BEGIN CREATE INDEX DROP DATABASE DROP TABLE LOCK TABLES RENAME TABLE TRUNCATE UNLOCK TABLES 内容来自于《MySQL 权威指南(Managing & Using MySQL)》, O’Reilly & Associates, Inc. 作者George Reese等。

PHP+mysql,由于程序中需要同时像两个表中插入数据,而且不能插错,因此应该定义一个事物操作。要么两条都做,要么两条都不做。
注意:每次使用事物后,需将事物设置回自动提交!
例一:
<?php
$handler=mysql_connect(“localhost”,””,””);
mysql_select_db(“task”);
mysql_query(“SET   AUTOCOMMIT=0”);//设置为不自动提交,因为MYSQL默认立即执行
mysql_query(“BEGIN”);//开始事务定义
if(!mysql_query(“insert   into   trans   (id)   values(‘2’)”))
{
mysql_query(“ROOLBACK”);//判断当执行失败时回滚
}
if(!mysql_query(“insert   into   trans   (id)   values(‘4’)”))
{
mysql_query(“ROOLBACK”);//判断执行失败回滚
}
mysql_query(“COMMIT”);//执行事务
mysql_close($handler);

例二:
<?php
$id=$_GET[id];
include_once(“conn.php”);
$conn->autocommit(false);
if(!$conn->query(“delete from tb_sco where id='”.$id.”‘”))
{
$conn->rollback();
}
if(!$conn->query(“delete from tb_stu where id='”.$id.”‘”))
{
$conn->rollback();
}
$conn->commit();
$conn->autocommit(true);
?>

<?php
//echo “=======”;exit;
$conn=mysql_connect(“localhost”,”root”,”root”);
if(!$conn){echo “数据库连接出错!”;
die();
}

mysql_select_db(“try”,$conn);
mysql_query(“SET NAMES GBK”);

$sql=”update aa set moeny=moeny-200 where uid=1″;
$sql2=”update bb set moeny=moeny+200 where uid=1″; //测试的时候,可以把这个写错,看效果
//$rst=mysql_query($sql2);
//echo $rst;exit;

mysql_query(“set autocommit=0”);//设置为不自动提交,因为MYSQL默认立即执行
//$t1=mysql_query($sql);
//$t2=mysql_query($sql2);

if(!mysql_query($sql)){
mysql_query(“ROOLBACK”);//判断执行失败回滚
echo “更新失败”;exit;
}

elseif(!mysql_query($sql2)){
mysql_query(“ROOLBACK”);//判断执行失败回滚
echo “更新失败”;exit;
}
else{
mysql_query(“commit”);//执行事务
echo “更新成功!”;exit;
}

收藏于 2010-07-20


关注公众号,了解更多it技术(it问答网

php对csv文件的读取,写入,输出下载操作

<?php
$file = fopen(‘text.csv’,’r’);

while ($data = fgetcsv($file)) {    //每次读取CSV里面的一行内容
//print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
$goods_list[] = $data;
}
//print_r($goods_list);
echo $goods_list[0][1];
fclose($file);
?>

在实际工作中,很多时候需要把网站上的一些数据下载到CSV文件里,方便以后查看。

亦或者是用CSV进行一些批量的上传工作。

这个时候我们就需要对CSV进行读写操作。

1.CSV的读取操作

view plaincopy to clipboardprint?

  1. <?php
  2.     $file = fopen(‘D:/file/file.csv’,’r’);
  3.     while ($data = fgetcsv($file)) {    //每次读取CSV里面的一行内容
  4.          print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可
  5.      }
  6.      fclose($file);
  7. ?>

<?php$file = fopen(‘D:/file/file.csv’,’r’);while ($data = fgetcsv($file)) { //每次读取CSV里面的一行内容print_r($data); //此为一个数组,要获得每一个数据,访问数组下标即可}fclose($file);?>

2.CSV的写入操作

view plaincopy to clipboardprint?

  1. <?php
  2.   $fp = fopen(‘d:/file/file.csv’, ‘w’);
  3.   fputcsv($fp,array(‘aaa’,’bbb’,’cccc’));
  4.   fputcsv($fp,array(‘mmm’,’yyy’,’haha’));   //fputcsv可以用数组循环的方式进行实现
  5.    fclose($fp);
  6. ?>

<?php$fp = fopen(‘d:/file/file.csv’, ‘w’);fputcsv($fp,array(‘aaa’,’bbb’,’cccc’));fputcsv($fp,array(‘mmm’,’yyy’,’haha’)); //fputcsv可以用数组循环的方式进行实现fclose($fp);?>

3.输出CSV(下载功能)

view plaincopy to clipboardprint?

  1. <?php
  2.      header(“Content-Type: text/csv”);
  3.      header(“Content-Disposition: attachment; filename=test.csv”);
  4.      header(‘Cache-Control:must-revalidate,post-check=0,pre-check=0’);
  5.      header(‘Expires:0’);
  6.      header(‘Pragma:public’);
  7.     echo “id,areaCode,areaName\n”;
  8.     echo “1,cn,china\n”;
  9.     echo “2,us,America\n”;
  10. ?>

<?phpheader(“Content-Type: text/csv”);header(“Content-Disposition: attachment; filename=test.csv”);header(‘Cache-Control:must-revalidate,post-check=0,pre-check=0’);header(‘Expires:0’);header(‘Pragma:public’);echo “id,areaCode,areaName\n”;echo “1,cn,china\n”;echo “2,us,America\n”;?>


关注公众号,了解更多it技术(it问答网

用PHP5的SimpleXML解析XML文档

$xmlstring=<<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<note>
 
<to>xuduowei</to>
 
<from>John</from>
 
<heading>Reminder</heading>
 
<body>Don’t forget the meeting!</body>
 
</note>
 
XML;
 
 
$xml = simplexml_load_string($xmlstring);
 
 
var_dump($xml);

 

输出:

object(SimpleXMLElement)#1 (4) { [“to”]=> string(4) “George” [“from”]=> string(4) “John” [“heading”]=> string(8) “Reminder” [“body”]=> string(29) “Don’t forget the meeting!” }

 

$xmlstring = <<<XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>xuduowei</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don’t forget the meeting!</body>
</note>
XML;

$xml = simplexml_load_string($xmlstring);
//$xml = simplexml_load_string($xmlstring,'SimpleXMLElement',LIBXML_NOCDATA);

echo $xml->to;


php 的simplexml_load_string后两个参数有什么用处?

第二个参数表示解析所使用的类,类必须继承于SimpleXMLElement,而默认值就是SimpleXMLElement。
第三个参数表示解析的选项,LIBXML_NOCDATA表示不对CDATA进行转意,而是把他当成普通的文本进行解析。


假设XML节点里面如果有<goods_name><![CDATA[小牛N1]]></goods_name>,那么最终转换成对象里面是没有goods_name这个值

的,如果加了LIBXML_NOCDATA,值为小牛N1,相当于把<![CDATA[小牛N1]]>转换成了文本返回

 

 

xml 是一种创建元数据的语言,元数据是描述其它数据的数据,PHP中的XML处理是基于LIBXML2的,安装时默认开启。

可以通过phpinfo()函数查看是否开启了XML处理模块,DOM,LIBXML,SAMPLEXML。

首先,通过samplexml_load_file函数把xml文件加载到一个对象中,samplexml_load_file可以用户远程文件.
例如:

$xml = samplexml_load_file(“messages.xml”); // 本地文件系统,当前目录

$xml=simplexml_load_file(“http://www.xuduowei.com/tc/cs.xml”);//远程服务器上的

用 var_dump($xml) 和 print_r($xml) 分别输出其结构.var_dump给出了变量的类型和长度,而print_r可读性更强
输出对象中的所有元素名称和它的值.

echo $xml->MessageTitle; //输出消息的标题
echo $xml->MessageBody; // 输出消息体
echo $xml->MessageAuthor; //消息的作者

echo $xml->MessageDate;  // 消息产生的日期

echo $xml->MessageNumber;  // 消息代码

$xml=”<GetLatestContestAppResp>
<ret>0</ret>
<LatestContestApp>
<ContestApp>
<UserId>111</UserId>
<RealName>张三</RealName>
<AppName>battlefield1942</AppName>
</ContestApp>
<ContestApp>
<UserId>222</UserId>
<RealName>李四</RealName>
<AppName>battlefield II</AppName>
</ContestApp>
<ContestApp>
<UserId>333</UserId>
<RealName>王五</RealName>
<AppName>battlefield 1943</AppName>
</ContestApp>
… …
</LatestContestApp>
</GetLatestContestAppResp>”;

$xml_arr = simplexml_load_string($xml);
//print_r($xml_arr);
//echo count($xml_arr->LatestContestApp->ContestApp).”==”; //总数计算
//echo $xml_arr->LatestContestApp->ContestApp[1]->UserId;//取得相应的节点值


关注公众号,了解更多it技术(it问答网