当前位置: 编程技术>php
本页文章导读:
▪php xml 入门学习资料
起因: 今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护。好了,需求有了,如何实现?! 我的想法如下: 图片存放.........
▪解决PHP在DOS命令行下却无法链接MySQL的技术笔记
正好今天朋友 xjb 也碰到了这个问题,所以写了这篇笔记,将此问题的描述以及解决记录下。 问题描述:用 web 方式, 可以链接 mysql, 但是在命令行下, 却提示: Fatal Error: undefined function mys.........
▪window+nginx+php环境配置 附配置搭配说明
1,下载PHP php下载版本比较多,其中, vc9=vs2008编译,推荐使用IIS+php搭配模式, vc6=vs6编译,推荐使用apache+php方式搭配, Thread Safe,线程安全,执行时会进行线程(Thread).........
[1]php xml 入门学习资料
来源: 互联网 发布时间: 2013-11-30
起因:
今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护。好了,需求有了,如何实现?!
我的想法如下:
图片存放位置:放在一个文件夹中;图片的类型:不能固定了,只要是图片就可以上传显示;图片名字:按原始名字有点不正规,应该重新命名一下。
显示的位置:这就需要对图片指定相应的id,这个id是固定的,要与图片一一对应。于是就有一个记录一一对应的关系文件,可以选择csv文件,选择数据库记录,最后决定选择xml,这个东西在学校一直没学懂,我一直回避使用这东西,怕麻烦。今天算是挑战一下,花了一下午时间,终于有所收获。
学习步骤:
明确目标: 1、理解xml的结构;2、如何动态建立xml文件;3、如何读取和修改xml文件
一、 xml的结构是树形结构:
这个好理解。简单写一个:
<pictures>
<picture>
<id>1</id>
<name>pic 1</name>
</picture>
<picture>
<id>2</id>
<name>pic 2</name>
</picture>
<picture>
<id>3</id>
<name>pic 3</name>
</picture>
</pictures>
二、我使用的php创建:
1. 定义一个DOM对象: $dom = new DomDocument('1.0');
2. 添加子元素:$dom->appendChild($dom->createElement("pictures"))
内存中的原型是:<pictures></pictures>
继续往里边加子元素:*->appendChild($dom->createElement("picture"));
继续加: **->appendChild($dom->createElement("id"));
不加子元素了,加节点: ***->appendChild($dom->createNode("1"))
上面的*代表上上一行的代码;这样一来就可以写成一行:
$dom->appendChild($dom->createElement("pictures"))->appendChild($dom->createElement("picture"))
->appendChild($dom->createElement("id"))->appendChild($dom->createNode("1"));
现在内存中应该是这样的:<pictures><picture><id>1</id></picture></pictures>
显然里要求还远,很容易看懵的。
因此一般这么写: $pictures = $dom->appendChild($dom->createElement("pictures"));
$picture = $pictures->appendChild($dom->createElement("picture"));
$id = $picture->appendChild($dom->createElement("id"));
$id->appendChild($dom->createNode("1"));
下面还可以接着创建name节点:
$name = $picture->appendChild($dom->createElement("name"));
$name->appendChild($dom->createNode("pic 1"));
接下来还要接着创建picture节点:
$picture = $pictures->appendChild($dom->createElement("picture"));
其实这些麻烦的事可以写个for循环来实现。
生成xml文件:
$dom->formatOutput = true;//设置格式化输出
$dom->save("erhsh.xml");//保存xml文件
三、读取xml文件。
1、还是定义一个DOM对象;$dom->new DomDocument();
2、加载xml文件:$dom->load("erhsh.xml");
3、按照节点的名字取得节点集合:$dom->getElementByTagName("pictures");
这种方法有点麻烦,参考文件:
http://www./article/25853.htm
不过有一种我喜欢的方法:simplexml_load_file("erhsh.xml");
此方法可以把xml文件的内容转换成对象的形式,使用"->"结和"[]"很容易去的xml的内容;
但是在开发中还是遇到了一点问题:
当执行:print_r($xml->pictures);时输出的是一个 SimpleXMLElement 对象,([picture] => array([0]=>array(...)[1]=>array(...)));
再执行:print_r($xml->pictures->picture);输出的是n个分开的对象。
执行:print_r($xml->pictures->picture[0]->id);输出的还是一个对象。这就很不理解,应该是一个字符串。 最后网上说是“迭代对象”,
应该使用echo输出,print_r(), var_dump()输出不准确。参考地址:http://www./article/25852.htm
当然也可以修改xml的值通过这个方法。
写的很烂,仅供本人备忘。
今天做项目时遇到一个问题:需要动态更新主页上的图片,以示本站不是做完了就算了,是有人一直在维护。好了,需求有了,如何实现?!
我的想法如下:
图片存放位置:放在一个文件夹中;图片的类型:不能固定了,只要是图片就可以上传显示;图片名字:按原始名字有点不正规,应该重新命名一下。
显示的位置:这就需要对图片指定相应的id,这个id是固定的,要与图片一一对应。于是就有一个记录一一对应的关系文件,可以选择csv文件,选择数据库记录,最后决定选择xml,这个东西在学校一直没学懂,我一直回避使用这东西,怕麻烦。今天算是挑战一下,花了一下午时间,终于有所收获。
学习步骤:
明确目标: 1、理解xml的结构;2、如何动态建立xml文件;3、如何读取和修改xml文件
一、 xml的结构是树形结构:
这个好理解。简单写一个:
代码如下:
<pictures>
<picture>
<id>1</id>
<name>pic 1</name>
</picture>
<picture>
<id>2</id>
<name>pic 2</name>
</picture>
<picture>
<id>3</id>
<name>pic 3</name>
</picture>
</pictures>
二、我使用的php创建:
1. 定义一个DOM对象: $dom = new DomDocument('1.0');
2. 添加子元素:$dom->appendChild($dom->createElement("pictures"))
内存中的原型是:<pictures></pictures>
继续往里边加子元素:*->appendChild($dom->createElement("picture"));
继续加: **->appendChild($dom->createElement("id"));
不加子元素了,加节点: ***->appendChild($dom->createNode("1"))
上面的*代表上上一行的代码;这样一来就可以写成一行:
$dom->appendChild($dom->createElement("pictures"))->appendChild($dom->createElement("picture"))
->appendChild($dom->createElement("id"))->appendChild($dom->createNode("1"));
现在内存中应该是这样的:<pictures><picture><id>1</id></picture></pictures>
显然里要求还远,很容易看懵的。
因此一般这么写: $pictures = $dom->appendChild($dom->createElement("pictures"));
$picture = $pictures->appendChild($dom->createElement("picture"));
$id = $picture->appendChild($dom->createElement("id"));
$id->appendChild($dom->createNode("1"));
下面还可以接着创建name节点:
$name = $picture->appendChild($dom->createElement("name"));
$name->appendChild($dom->createNode("pic 1"));
接下来还要接着创建picture节点:
$picture = $pictures->appendChild($dom->createElement("picture"));
其实这些麻烦的事可以写个for循环来实现。
生成xml文件:
$dom->formatOutput = true;//设置格式化输出
$dom->save("erhsh.xml");//保存xml文件
三、读取xml文件。
1、还是定义一个DOM对象;$dom->new DomDocument();
2、加载xml文件:$dom->load("erhsh.xml");
3、按照节点的名字取得节点集合:$dom->getElementByTagName("pictures");
这种方法有点麻烦,参考文件:
http://www./article/25853.htm
不过有一种我喜欢的方法:simplexml_load_file("erhsh.xml");
此方法可以把xml文件的内容转换成对象的形式,使用"->"结和"[]"很容易去的xml的内容;
但是在开发中还是遇到了一点问题:
当执行:print_r($xml->pictures);时输出的是一个 SimpleXMLElement 对象,([picture] => array([0]=>array(...)[1]=>array(...)));
再执行:print_r($xml->pictures->picture);输出的是n个分开的对象。
执行:print_r($xml->pictures->picture[0]->id);输出的还是一个对象。这就很不理解,应该是一个字符串。 最后网上说是“迭代对象”,
应该使用echo输出,print_r(), var_dump()输出不准确。参考地址:http://www./article/25852.htm
当然也可以修改xml的值通过这个方法。
写的很烂,仅供本人备忘。
[2]解决PHP在DOS命令行下却无法链接MySQL的技术笔记
来源: 互联网 发布时间: 2013-11-30
正好今天朋友 xjb 也碰到了这个问题,所以写了这篇笔记,将此问题的描述以及解决记录下。
问题描述:用 web 方式, 可以链接 mysql, 但是在命令行下, 却提示:
Fatal Error: undefined function mysql_connect()
环境: Windows 2003, PHP 5.2.0, MYSQL 5.0, Apache 2.0
在 php.ini 中, 已经将 php_mysql.dll 的模块选项给打开了;测试的脚本也很简单,就一个 mysql_conect 函数,内容如下:
php.ini:
extension=php_mysql.dll
测试脚本 test.php 内容如下:
text.php
<?
if ( !mysql_connect(DBHOST, DBUSER,DBPWD) )
{
echo "连接失败!";
exit;
}
echo "连接成功!t";
?>
用 web 方式调用 http://localhost/test.php, 执行正常, 显示"连接成功".
但用 dos command 命令行的方式调用 d:/php/php.exe test.php 却显示连接失败, 错误信息为: Fatal Error: undefined function mysql_connect()
很显然, 在 dos command 命令行的环境下,mysql 的模块没有被调用。方法弄尽, 仍无法解决. 百思不得其解. 后来, 用写了个脚本, 看看 php 的配置, 在两个环境下有什么不同:
test.php
<?
echo phpinfo();
?>
仔细查看两个环境下 phpinfo() 输入的 php 配置信息,终于发现了问题所在:
Web 方式 http://localhost/test.php 方式调用时, 其 Configuration File (php.ini) Path 显示为 C:WINDOWSphp.ini。
DOS COMMAND 命令行方式 d:/php/php.exe test.php 调用时, 其 Configuration File (php.ini) Path 为 d:phpphp.ini。
而在 c:windows 和 d:php 目录下, 都存在一个 php.ini 文件,d:php 目录下的 php.ini 没有将 extension=php_mysql.dll 模块打开.于是将 d:phpphp.ini 删除,只保留 c:windowsphp.ini,问题解决.
总结:在 windows 下安装 php 时, 为了避免配置文件混乱,将安装目录下的 php.ini 复制到 windows 目录下之后,应该将原来安装目录下的 php.ini 文件重命名或删除,以免造成在不同环境下执行时,查找配置文件不一致的情况发生。问题发生的原因一般都是非常非常简单,但查找、排除问题的过程,却是相当的烦人。
问题描述:用 web 方式, 可以链接 mysql, 但是在命令行下, 却提示:
Fatal Error: undefined function mysql_connect()
环境: Windows 2003, PHP 5.2.0, MYSQL 5.0, Apache 2.0
在 php.ini 中, 已经将 php_mysql.dll 的模块选项给打开了;测试的脚本也很简单,就一个 mysql_conect 函数,内容如下:
代码如下:
php.ini:
extension=php_mysql.dll
测试脚本 test.php 内容如下:
text.php
<?
if ( !mysql_connect(DBHOST, DBUSER,DBPWD) )
{
echo "连接失败!";
exit;
}
echo "连接成功!t";
?>
用 web 方式调用 http://localhost/test.php, 执行正常, 显示"连接成功".
但用 dos command 命令行的方式调用 d:/php/php.exe test.php 却显示连接失败, 错误信息为: Fatal Error: undefined function mysql_connect()
很显然, 在 dos command 命令行的环境下,mysql 的模块没有被调用。方法弄尽, 仍无法解决. 百思不得其解. 后来, 用写了个脚本, 看看 php 的配置, 在两个环境下有什么不同:
test.php
代码如下:
<?
echo phpinfo();
?>
仔细查看两个环境下 phpinfo() 输入的 php 配置信息,终于发现了问题所在:
Web 方式 http://localhost/test.php 方式调用时, 其 Configuration File (php.ini) Path 显示为 C:WINDOWSphp.ini。
DOS COMMAND 命令行方式 d:/php/php.exe test.php 调用时, 其 Configuration File (php.ini) Path 为 d:phpphp.ini。
而在 c:windows 和 d:php 目录下, 都存在一个 php.ini 文件,d:php 目录下的 php.ini 没有将 extension=php_mysql.dll 模块打开.于是将 d:phpphp.ini 删除,只保留 c:windowsphp.ini,问题解决.
总结:在 windows 下安装 php 时, 为了避免配置文件混乱,将安装目录下的 php.ini 复制到 windows 目录下之后,应该将原来安装目录下的 php.ini 文件重命名或删除,以免造成在不同环境下执行时,查找配置文件不一致的情况发生。问题发生的原因一般都是非常非常简单,但查找、排除问题的过程,却是相当的烦人。
[3]window+nginx+php环境配置 附配置搭配说明
来源: 互联网 发布时间: 2013-11-30
1,下载PHP
php下载版本比较多,其中,
vc9=vs2008编译,推荐使用IIS+php搭配模式,
vc6=vs6编译,推荐使用apache+php方式搭配,
Thread Safe,线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。
Non Thread Safe,
再来看PHP的两种执行方式:ISAPI和FastCGI。
ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。
2,配置php
解压到某个目录,如c:/php345
将php.ini-development重命名为php.ini
fastcgi.impersonate=1 默认为0,如果使用IIS,你需要开启:cgi.fix_pathinfo=1
cgi.force_redirect=0 默认开启,如果你使用IIS,可以将其关闭
其次指定extension_dir目录和date.timezone目录
extension_dir = "C:/php53iis/ext"
date.timezone= Asia/Shanghai
修改PHP.INI配置文件中的cgi.fix_pathinfo = 1,PHP 会修正 SCRIPT_FILENAME 为真实的文件地址,否则 PHP 将无法找到需要处理的 PHP 文件。
3,配置nginx
解压nginx,如c:/nginx
设定error.log的存放目录,将#error_log logs/error.log;的#去处,默认error.log是存放在Nginx安装目录中logs目录下。
设定WEB服务器目录,类似于PHP.INI配置文件中的document_root,Nginx配置文件中的信息如下
location / {
root D:/PHPWeb;
index index.php index.html index.htm;
}
location ~ \.php$ {
root D:/PHPWeb;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME D:/PHPWeb$fastcgi_script_name;
include fastcgi_params;
注意:fastcgi_param SCRIPT_FILENAME 中的/scripts修改为之前设定的WEB目录,否则会报HTTP 404错误。
修改PHP.INI配置文件中的cgi.fix_pathinfo = 1,PHP 会修正 SCRIPT_FILENAME 为真实的文件地址,否则 PHP 将无法找到需要处理的 PHP 文件。
4.运行
下载RunHiddenConsole
防火墙支援RunHiddenConsole C:/php52iis/php-cgi.exe -b 127.0.0.1:9000 -c C:/windows/php.ini
来自:http://www.cnblogs.com/ihwt/archive/2010/12/18/1909742.html
如果想比较省事的朋友可以用下面的这款软件快速部署基于Nginx的php运行环境了:
http://www./softs/33785.html
php下载版本比较多,其中,
vc9=vs2008编译,推荐使用IIS+php搭配模式,
vc6=vs6编译,推荐使用apache+php方式搭配,
Thread Safe,线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。
Non Thread Safe,
再来看PHP的两种执行方式:ISAPI和FastCGI。
ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
而FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
官方并不建议你将Non Thread Safe 应用于生产环境,所以我们选择Thread Safe 版本的PHP来使用。
2,配置php
解压到某个目录,如c:/php345
将php.ini-development重命名为php.ini
fastcgi.impersonate=1 默认为0,如果使用IIS,你需要开启:cgi.fix_pathinfo=1
cgi.force_redirect=0 默认开启,如果你使用IIS,可以将其关闭
其次指定extension_dir目录和date.timezone目录
extension_dir = "C:/php53iis/ext"
date.timezone= Asia/Shanghai
修改PHP.INI配置文件中的cgi.fix_pathinfo = 1,PHP 会修正 SCRIPT_FILENAME 为真实的文件地址,否则 PHP 将无法找到需要处理的 PHP 文件。
3,配置nginx
解压nginx,如c:/nginx
设定error.log的存放目录,将#error_log logs/error.log;的#去处,默认error.log是存放在Nginx安装目录中logs目录下。
设定WEB服务器目录,类似于PHP.INI配置文件中的document_root,Nginx配置文件中的信息如下
代码如下:
location / {
root D:/PHPWeb;
index index.php index.html index.htm;
}
代码如下:
location ~ \.php$ {
root D:/PHPWeb;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME D:/PHPWeb$fastcgi_script_name;
include fastcgi_params;
注意:fastcgi_param SCRIPT_FILENAME 中的/scripts修改为之前设定的WEB目录,否则会报HTTP 404错误。
修改PHP.INI配置文件中的cgi.fix_pathinfo = 1,PHP 会修正 SCRIPT_FILENAME 为真实的文件地址,否则 PHP 将无法找到需要处理的 PHP 文件。
4.运行
下载RunHiddenConsole
防火墙支援RunHiddenConsole C:/php52iis/php-cgi.exe -b 127.0.0.1:9000 -c C:/windows/php.ini
来自:http://www.cnblogs.com/ihwt/archive/2010/12/18/1909742.html
如果想比较省事的朋友可以用下面的这款软件快速部署基于Nginx的php运行环境了:
http://www./softs/33785.html
最新技术文章: