Archive

Posts Tagged ‘Php’

phpgrid快速数据库显示表格

January 20th, 2010 No comments

http://www.phpgrid.com/grid/

Grid-based editing including Create, Read, Update and Delete (CRUD) records are the most common behaviors for web developers. Similar to ASP.NET Datagrid the phpGrid is a simple, innovative, powerful, and Ajax-enabled PHP component for generating data-bound grid control, specially designed for PHP

http://phpgrid.sourceforge.net/index.php

PHPGRID是一个用于快速开发MIS系统,网站后台,演示程序的PHP类库,不仅具有数据添加编辑删除的基本功能,还具有表单自动生成,排序,分页,查询,权限设定,缓存的功能,而且这些功能是可定制的。对于特殊的需求,您只需编写少量的代码来继承于PHPGRID。 PHPGRID适合那些懒惰而又聪明的PHP程序员,PHPGRID将使你从厌烦重复的工作中解放出来。

  • Share/Bookmark
Categories: Php Tags: , ,

PHP的JavaScript框架 PHP.JS

January 20th, 2010 No comments

PHP.JS是一个开源项目,它将PHP中的部分函数功能移植到javascript中。只要在你的项目里包括这个php.js库文件,你就可以在 客户端浏览器上运行你所熟悉的PHP函数了。比如md5(),date(),mktime(),base64_decode()。

该项目还提供了javascript原生并不支持的一些功能,比如file_get_contents(), mktime(), serialize()等

  • Share/Bookmark
Categories: 未分类 Tags: , , ,

php webservice soap简单实例

January 13th, 2010 No comments

这边一直在用webservice soap,平时只简单的使用一下接口,对其中的原理未曾理解

今天特意做一个简单的测试。

server.php

***********************

<?php
class Basic {

    /**
     * 返回一个字符串:Hello World!
     * @return string
     */

    public function returnString($test) {

        return “Hello World!” . $test;

    }

}
$arrOptions = array (
    “uri” => “checkAPI”
); //设置命名空间

$objSoapServer = new SoapServer(null, $arrOptions);

/**
* 注册Basic类的所有方法
*/

$objSoapServer->setClass(“Basic”);

/**
* 处理请求
*/

$objSoapServer->handle();
?>

client.php

***********************

<?php

/**
* Client端,首先创建Client对象
*/

$arrOptions = array (
    “uri” => “checkAPI”, //设置命名空间
    “location” => “http://shili.cn/soap/server.php“, //设置Server地址
    “trace” => true
);

$objSoapClient = new SoapClient(null, $arrOptions);

/**
* 远程调用
*/

$test = “ok123″;

try {
    $strReturn = $objSoapClient->returnString($test);
} catch (Exception $e) {
}

/**
* 打印结果
*/
echo $strReturn;
?>

测试

***********************

http://shili.cn/soap/client.php

输出:

***********************

Hello World!ok123

简单测试只在测试处理流程。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xj2sm/archive/2009/11/28/4896083.aspx

  • Share/Bookmark

nginx+php 502 bad gateway解决方法

March 21st, 2009 No comments

打开 /usr/local/php/etc/php-fpm.conf

      调大以下两个参数(根据服务器实际情况,过大也不行)

    <value name=”max_children”>1280</value>

      <value name=”max_requests”>1000</value>

可同时参看 nginx 502 bad故障原因及解决方法收集 

  • Share/Bookmark
Categories: nginx Tags: , , , ,

Nginx php调用kill命令平滑重启nginx

February 14th, 2009 No comments

1.新建php文件,输入以下代码 :

  <?php

    passthru(escapeshellcmd(“sudo kill -HUP `cat /usr/local/nginx/nginx.pid`”))

?>

2.root权限登陆centos,执行 visudo ,最好用visudo编辑,不容易出现莫名其妙的预防错误。在打开的sudo文件末尾加入以下一行:

www ALL=(root) NOPASSWD: /bin/kill, /usr/bin/kill

nginx以www用户运行)

3.如果www用户执行sudo会提示“sorry,sudo must be setuid root.”,登陆root,输入一下命令:

   ls -l  /usr/bin/sudo

chown root:root /usr/bin/sudo

chmod 4755 /usr/bin/sudo

reboot(好像可以不重启,如果不行再reboot)

(有网友提到 直接chmod 4111 /usr/bin/sudo即可)

  • Share/Bookmark

Header函数前有输出的重定向问题

December 28th, 2008 No comments

一般做PHP页面重定向时,会用到header函数的location属性,然而在header函数前面有输出时就会报错

比如

<?PHP   
echo   hello;   
header(Location:http://www.********.com);   
?>

解决的方法就是在这段代码前加上一个函数 ob_start();
代码如下:

<?PHP
ob_start();
echo   hello;   
header(Location:http://www.********.com);   
?>

引用一下资料:

自PHP4起,可以通过一些输出缓冲函数来解决这个问题。代价是把所有向浏览器的输出都缓存在服务器,直到下命令发送它们。可以在代码中使用 ob_start() 及 ob_end_flush() 来实现这样的功能,或者通过修改php.ini中的output_buffering配置选项来实现,也可以通过修改服务器配置文件来实现。

转载来源  http://www.zdyi.com/category/php-mysql/page/5

  • Share/Bookmark
Categories: Php Tags: ,

让你的ECSHOP支持GMAIL SMTP的SSL,php支持smtp ssl

December 22nd, 2008 No comments

看到ecshop官方论坛里有很多关于此问题的提问,刚好有空,测试了一下邮箱服务器设置,163邮箱可以正常发送,gmail不能正常发送,自己修改了一下代码,就可顺利发送邮件,解决如下:
1. 检查php是否支持openssh
首先查看phpinfo,查看看PHP是否支持OpenSSL,看到下面的字样,就标示支持OpenSSL。一般现在的PHP都会默认支持的。
OpenSSL support enabled
OpenSSL Version OpenSSL 0.9.8b 04 May 2006

2. 修改Discuz!代码
vi includes/cls_smtp.php大概在93行处,

$this->connection = @fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
修改
$this->connection = @fsockopen(‘ssl://’.$this->host, $this->port, $errno, $errstr, $this->timeout);

3. 修改Gmail设置
1.登录到您的 Gmail 帐户。
2.点击任一 Gmail 页顶部的设置。
3.点击橙色框邮件设置中的转发和 POP。
4.选择针对所有邮件启用 POP 或者针对从现在起开始接收的邮件启用 POP。
5.使用 POP 访问 Gmail 邮件后,选择您要对邮件采用的处理方式。

4. 配置ecshop邮件设置
登录ecshop后台,在左边导航栏,单击【系统设置】-》邮件服务器设置,在邮件服务选择采用其他的SMTP服务,其他的参考下图设置

ecshop邮箱服务器设置
然后按发送测试邮件,看到如下图代表发送成功

现在就可以到邮箱就收看测试邮件了,

5. 最后验证发送到yahoo,hotmail,163,qq邮箱都能快速收到

转载来源 http://www.lihaixin.com/2008/10/ecshop-support-gmail-409.html

  • Share/Bookmark
Categories: Php Tags: , , , ,

PHP中$_SERVER的详细用法

October 21st, 2008 No comments

$_SERVER[’PHP_SELF’] #当前正在执行脚本的文件名,与 document root相关。
$_SERVER[’argv’] #传递给该脚本的参数。
$_SERVER[’argc’] #包含传递给程序的命令行参数的个数(如果运行在命令行模式)。
$_SERVER[’GATEWAY_INTERFACE’] #服务器使用的 CGI 规范的版本。例如,“CGI/1.1”。
$_SERVER[’SERVER_NAME’] #当前运行脚本所在服务器主机的名称。
$_SERVER[’SERVER_SOFTWARE’] #服务器标识的字串,在响应请求时的头部中给出。
$_SERVER[’SERVER_PROTOCOL’] #请求页面时通信协议的名称和版本。例如,“HTTP/1.0”。
$_SERVER[’REQUEST_METHOD’] #访问页面时的请求方法。例如:“GET”、“HEAD”,“POST”,“PUT”。
$_SERVER[’QUERY_STRING’] #查询(query)的字符串。
$_SERVER[’DOCUMENT_ROOT’] #当前运行脚本所在的文档根目录。在服务器配置文件中定义。
$_SERVER[’HTTP_ACCEPT’] #当前请求的 Accept: 头部的内容。
$_SERVER[’HTTP_ACCEPT_CHARSET’] #当前请求的 Accept-Charset: 头部的内容。例如:“iso-8859-1,*,utf-8”。
$_SERVER[’HTTP_ACCEPT_ENCODING’] #当前请求的 Accept-Encoding: 头部的内容。例如:“gzip”。
$_SERVER[’HTTP_ACCEPT_LANGUAGE’]#当前请求的 Accept-Language: 头部的内容。例如:“en”。
$_SERVER[’HTTP_CONNECTION’] #当前请求的 Connection: 头部的内容。例如:“Keep-Alive”。
$_SERVER[’HTTP_HOST’] #当前请求的 Host: 头部的内容。
$_SERVER[’HTTP_REFERER’] #链接到当前页面的前一页面的 URL 地址。
$_SERVER[’HTTP_USER_AGENT’] #当前请求的 User_Agent: 头部的内容。
$_SERVER[’HTTPS’] — 如果通过https访问,则被设为一个非空的值(on),否则返回off
$_SERVER[’REMOTE_ADDR’] #正在浏览当前页面用户的 IP 地址。
$_SERVER[’REMOTE_HOST’] #正在浏览当前页面用户的主机名。
$_SERVER[’REMOTE_PORT’] #用户连接到服务器时所使用的端口。
$_SERVER[’SCRIPT_FILENAME’] #当前执行脚本的绝对路径名。
$_SERVER[’SERVER_ADMIN’] #管理员信息
$_SERVER[’SERVER_PORT’] #服务器所使用的端口
$_SERVER[’SERVER_SIGNATURE’] #包含服务器版本和虚拟主机名的字符串。
$_SERVER[’PATH_TRANSLATED’] #当前脚本所在文件系统(不是文档根目录)的基本路径。
$_SERVER[’SCRIPT_NAME’] #包含当前脚本的路径。这在页面需要指向自己时非常有用。
$_SERVER[’REQUEST_URI’] #访问此页面所需的 URI。例如,“/index.html”。
$_SERVER[’PHP_AUTH_USER’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的用户名。
$_SERVER[’PHP_AUTH_PW’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是用户输入的密码。
$_SERVER[’AUTH_TYPE’] #当 PHP 运行在 Apache 模块方式下,并且正在使用 HTTP 认证功能,这个变量便是认证的类型。

$_SERVER[”HTTP_X_FORWARDED_FOR”] #透过代理服务器取得客户端的真实 IP 地址

转载来源:http://www.juuyou.com/?p=63

  • Share/Bookmark
Categories: 未分类 Tags: ,

PHP开源程序 大全

October 8th, 2008 No comments

由于太多所以下载地址没有补上,不过这样也好查一点, 只要把名字一复制 到Google搜索就可以到其所提供技术支持的相关官方网站下载

目录
博客 [35]
CMS [97]
RSS聚合 [6 ]
综合应用 [43]
电子商务 [10]
威客wiki [16]
论坛 [30]
图片相册 [16]
网络办公 [8 ]
项目管理 [10]
开发框架 [33]

[博客] Chyrp 国外开源php+mysql 超轻量级开源博客引擎
[博客] EasyTalk 国内开源 php+mysql 迷你博客系统
[博客] AtomPhotoBlog 德国开源相册blog
[博客] zomplog 荷兰开源blog
[博客] LoudBlog 德国开源 php+mysql 博客
[博客] Sablog 国内 php+mysql 开源博客
[博客] kanglog 国内开源PHP+MYSQL博客
[博客] Pivot 国外开源 log 程序
[博客] ExpLog 国内开源PHP+MYSQL博客程序
[博客] nbs博客( n-blog system)支持无限级分类
[博客] BirdBlog
[博客] Bluetrait 国外开源php+mysql
[博客] Brim 国外开源博客
[博客] bevolution
[博客] SimplePHPBlog 国外PHP开源blog
[博客] bBlog
[博客] LifeType – 开源Blog平台
[博客] wordpress
[博客] microBlog 国外BLOG程序
[博客] eggblog 国外BLOG程序
[博客] LoveBlog 国外BLOG程序
[博客] bo-blog 国内开源PHP BLOG
[博客] saysay blog
[博客] PWBlog 多用户BLOG系统
[博客] GuppY CMS
[博客] Fblog
[博客] emlog 单用户博客系统
[博客] sBlog 国外PHP开源blog
[博客] Serendipity blog 国外PHP开源blog
[博客] Simplog 国外PHP开源blog
[博客] Webmobo blog 国外PHP开源blog
[博客] wikyblog 非常不错的BLOG系统
[博客] pligg 国外开源BLOG
[博客] Nucleus – 流行的开源Blog系统
[博客] Magike Blog 单用户博客系统

[CMS] weenCompany闻名企业网站系统
[CMS] 行业之星网站服务系统 国内开源 php+mysql
[CMS] Pheap! Making content management simple 国外开源 php+mysql cms
[CMS] bcoos 国外开源 php+mysql cms
[CMS] phpWebSite教育机构开发 国外开源 php+mysql cms
[CMS] cms 国外开源 php+mysql cms
[CMS] FuzzyLime(cms) 国外开源 php+mysql cms
[CMS] RunCMS 国外开源 php+mysql cms
[CMS] Contrexx 国外开源 php+mysql cms
[CMS] gelatocms 国外开源 php+mysql cms
[CMS] Deepthroat 深喉咙企业网站生成系统 国内开源cms
[CMS] Hutula 网站内容管理及社区化系统
[CMS] LazyCMS 国内开源 php+mysql
[CMS] CMSimple php+文本 国外开源CMS
[CMS] elgg 国外开源 php+mysql cms
[CMS] zeroboard 韩国开源PHP+MYSQL CMS支持中文
[CMS] DreamArticle 国内开源PHP+MYSQL CMS
[CMS] JAF CMS 国外PHP+MYSQL 开源CMS系统
[CMS] LokiCMS 国外PHP+MYSQL 开源CMS系统
[CMS] siteman cms 国外PHP+MYSQL 开源CMS系统
[CMS] sNews Cms 国外PHP+MYSQL 小型开源CMS系统
[CMS] transLucid 国外PHP+MYSQL 小型开源CMS系统
[CMS] PHPWMS(PHP Web Manage System) 国内开源PHP+MYSQL
[CMS] ULCms 国内开源PHP+MYSQL CMS
[CMS] gelato cms
[CMS] Caravel cms
[CMS] MuCMS
[CMS] Sitellite
[CMS] BIGACE 多语言和多用户内容管理系统
[CMS] AIOCP cms
[CMS] SAPID
[CMS] wos
[CMS] phundament
[CMS] TYPOlight webCMS
[CMS] V CMS
[CMS] silverstripe cms
[CMS] PHPX cms
[CMS] ZeusCMS cms
[CMS] Campsite cms
[CMS] DBHcms
[CMS] MODx 国外 开源PHP+MYSQL CMS
[CMS] Netious 国外开源CMS
[CMS] Oscailt 国外开源CMS
[CMS] Jupiter CMS 国外PHP开源CMS
[CMS] maxdev CMS 国外PHP开源CMS
[CMS] Ovidentia CMS 国外PHP开源CMS
[CMS] PHP-Fusion CMS 国外PHP开源CMS
[CMS] phpComasy CMS 国外PHP开源CMS
[CMS] phpSlash CMS 国外PHP开源CMS
[CMS] Plume CMS. 国外PHP开源CMS
[CMS] toendaCMS 国外PHP开源CMS
[CMS] eXV Core CMS 国外PHP开源CMS
[CMS] Exponent CMS 国外PHP开源CMS
[CMS] Dragonfly CMS 国外 php+mysql开源 cms
[CMS] Dragonfly CMS 国外 php+mysql开源 cms
[CMS] e CMS 国外 php+mysql开源 cms 支持中文
[CMS] eZ Publish CMS
[CMS] CuteNews 国外开源新闻系统 php+文本
[CMS] Etomite cms 国外开源cms php+mysql
[CMS] JTBC 国内开源 cms
[CMS] JTBC网站内容管理系统
[CMS] tattertools 简称:tt 支持中文
[CMS] Papoo 德国开源的Cms内容管理系统
[CMS] xlite PHP+mysql 内容管理系统
[CMS] MePHP CMS
[CMS] Website Baker 国外CMS开源系统
[CMS] Tikiwiki 多国语言版 CMS
[CMS] PHPX cms 国外PHPCMS
[CMS] textpattern 国外开源多语言CMS系统
[CMS] SPIP cms 国外PHPCMS 支持中文
[CMS] Quick.Cms 国外免费开源CMS
[CMS] DedeCms 国内开源PHP+MYSQL CMS
[CMS] EvoArticles 国外CMS
[CMS] pubsite
[CMS] phpwcms
[CMS] Phpcms
[CMS] Dm网站管理系统
[CMS] Jetbox 国外开源CMS
[CMS] Jaws cms 国外多功能开源CMS
[CMS] Joomla 国外开源CMS
[CMS] bitweaver 高度模块化的内容管理系统
[CMS] xaraya 国外开源CMS
[CMS] CMS Made Simple 国外CMS
[CMS] contentNow 国外CMS
[CMS] drupal 国外CMS
[CMS] EcwCMS 国外CMS
[CMS] Fundanemt 国外CMS
[CMS] Geeklog 国外CMS
[CMS] Mambo 曼波
[CMS] XOOPS
[CMS] Breeze 文章管理系统
[CMS] Line CMS 国外开源CMS
[CMS] E路文章系统PHP(Elook Article System.PHP)
[CMS] typo 国外开源CMS系统
[CMS] 情感家园企业站程序CMS
[CMS] phparticle 文章管理系统
[CMS] php整站系统 CMS

[RSS聚合] MagpieRSS
[RSS聚合] Lilina
[RSS聚合] SimplePie
[RSS聚合] 开源 iXNA 聚合程序
[RSS聚合] Gregarius–开源RSS聚合程序
[RSS聚合] Tiny Tiny RSS (国外开源RSS聚合程序)

[综合应用] ThinkSNS 社会化网络(sns) 月日正式免费开源下载
[综合应用] Piwik php开源统计程序 php+mysql 国外开源
[综合应用] PHP点评系统 Modoer(Mudder) 国内开源 php+mysql
[综合应用] phpSysInfo 系统探针
[综合应用] 斗兽棋php开发在线游戏online
[综合应用] 中国象棋php开发在线游戏online
[综合应用] Friends! php+mysql婚恋交友系统 国内开源
[综合应用] phpMyBackupPro 国外开源 多功能数据库备份工具 php+文本
[综合应用] MySQL Sidu 数据库在线管理工具
[综合应用] 本生理财 php+mysql国内开源免费的个人财富管理系统
[综合应用] Scuttle 国外开源 php+mysql bookmarking system 在线书签管理器

[综合应用] Aardvark Topsites PHP 国外多语言多风格的排行榜系统
[综合应用] PBDigg 开源Dig社区系统 php + mysql Smarty模板技术
[综合应用] Diggclone digg php+mysql 国外开源DIGG程序
[综合应用] Pligg digg php+mysql 国外开源DIGG程序
[综合应用] PHPDug digg php+mysql 国外多国语言开源DIGG程序 支持中文
[综合应用] Owl Intranet Engine
[综合应用] SimpleDoc
[综合应用] DocMgr
[综合应用] PHP Navigator
[综合应用] CuteFlow
[综合应用] phpMyBackupPro
[综合应用] DaDaBIK
[综合应用] TurboDbAdmin
[综合应用] paFileDB 国外PHP+MYSQL下载系统
[综合应用] PHPizabi 国外开源php+mysql 交友系统
[综合应用] phpMyChat – 优秀的开源聊天室程
[综合应用] PHP Classifieds php+mysql 分类信息 国外开源
[综合应用] adlogger 优秀的开源google adsense广告点击统计
[综合应用] phpnuke是一套开放源码建站程序
辑器
[工具资源] TinyMCE
[工具资源] 在线网页编辑插件(用浏览器编辑后所见即所得)FCKeditor
[工具资源] PHP+MYSQL开发工具及资源收藏
[工具资源] MPSPHPDESIGNER PHP开发工具

[综合应用] boastMachine
[综合应用] phpadsnew 国外开源广告管理系统php+mysql
[综合应用] Ep-Dev Whois 一款国外的域名whois查询工具 PHP+TXT
[综合应用] phpMyVisites 国外多语言开源PHP+MYSQL统计系统
[综合应用] phpFormGenerator 在线表单生成
[综合应用] PHPlot 在线绘制曲线图
[综合应用] PHPLand Movie
[综合应用] ppwind影视系统
[综合应用] phpMSAdmin 基于WEB 管理MS SQL 数据库的工具 图形化操作
[综合应用] phpPgAdmin PostgreSQL数据库管理工具
[综合应用] NetFTP 基于web的FTP服务
[综合应用] evoTopsites 国外网站排名系统
[综合应用] PHPCMS文件管理器

[电子商务] 友邻(ualink) 国内开源免费bb行业门户网站
[电子商务] MvM mall国内开源电子商务 php+mysql网店系统
[电子商务] Opencart v.. 多语言版 php+mysql 商城
[电子商务] osCommerce 网店系统
[电子商务] ECSHOP 免费网店系统
[电子商务] Zen Cart 开源网店程序
[电子商务] Soobic! 开源网店系统
[电子商务] phpShop 国外开源网店系统
[电子商务] CubeCart 国外免费开源的购物车程序
[电子商务] Soolan ShoopD webshop 国内php+mysql开源免费网店系统

[威客wiki] phpsay (家族+贴吧+维客)
[威客wiki] Flux CMS Wiki
[威客wiki] DokuWiki 国外PHP+文本 开源wiki
[威客wiki] PmWiki
[威客wiki] PhpWiki
[威客wiki] CooCooWakk
[威客wiki] Tikiwiki 优秀网站内容管理系统 PHP+ADOdb+Smarty
[威客wiki] MediaWiki PHP+MySQL
[威客wiki] 互动在线开源维客系统
[威客wiki] RAICO 威客平台
[威客wiki] Wikka Wiki 国外PHP+mysql 开源wiki
[威客wiki] wikepage 国外PHP+文本 开源wiki
[威客wiki] WackoWiki 国外PHP+mysql 开源wiki
[威客wiki] UniWakka 国外PHP+mysql 开源wiki
[威客wiki] QwikiWiki 国外PHP+文本 开源wiki
[威客wiki] ErfanWiki 国外PHP+文本 开源wiki

[论坛] fuzzylime (forum) 国外开源 php+mysql 论坛
[论坛] VcanFly Board 国内开源 论坛 php+文本
[论坛] phpbb国外开源 php+mysql 论坛bbs
[论坛] BMForum 国内完全开放源代码 PHP+MYSQL
[论坛] FTBBS 飞天论坛 国内开源(PHP版)
[论坛] Ofstar PHP+文本论坛
[论坛] CTB 非常不错的PHP+文本 论坛
[论坛] MolyX Board
[论坛] Phorum forum system Stable!
[论坛] Vanilla 国外开源的论坛程序
[论坛] DISCUZ
[论坛] phpwind
[论坛] bbPress 国外开源的小型论坛程序
[论坛] PunBB 国外开源BBS系统
[论坛] Simple Machines Forum论坛
[论坛] 落叶松文本论坛 PHP+文本
[论坛] PBLang 文本论坛
[论坛] IceBB
[论坛] UseBB 国外开源论坛
[论坛] MercuryBoard 国外小型论坛程序(小巧、功能强大)
[论坛] Beehive 国外php+mysql开源论坛
[论坛] miniBB 国外php+mysql开源论坛 简洁高效
[论坛] MyBB 国外php+mysql开源论坛
[论坛] OvBB 国外php+mysql开源论坛
[论坛] UNB 国外php+mysql开源论坛
[论坛] w-Agora 国外php+mysql开源论坛
[论坛] XMB 国外php+mysql开源论坛
[论坛] DeluxeBB 国外php+mysql开源论坛
[论坛] QuickSilver 国外php+mysql开源论坛
[论坛] 动网论坛PHP [图片相册] PHPYou国内开源图库相册系统

[图片相册] iFoto 国外 php开源 相册图片
[图片相册] zenphoto 国外相册PHP+MYSQL
[图片相册] MG 国外php+文本 相册
[图片相册] singapore 国外相册
[图片相册] PAILA 在线大头贴
[图片相册] images 德国 php开源 相册图片
[图片相册] WEBalbum 国外 php开源 相册图片
[图片相册] TinyWebGallery 国外 php开源 相册图片
[图片相册] Plogger 国外 php开源 相册图片
[图片相册] Pixelpost 国外 php开源 相册图片
[图片相册] PhpWebGallery 国外 php开源 相册图片
[图片相册] nzFotolog 国外 php开源 相册图片
[图片相册] DAlbum 国外 php开源 相册图片
[图片相册] Coppermine国外 php开源 相册图片 支持中文
[图片相册] Gallery 国外 php开源 相册图片

[网络办公] DocumentManager
[网络办公] EyeOS
[网络办公] NetOffice – 开源协同办公解决方案
[网络办公] SugarCRM — 国外开源客户关系管理系统(支持中文)
[网络办公] ACollab 群组管理-multi-group
[网络办公] more.groupware 基于Web采用PHP开发的办公套件 [网络办公] phpGroupWare PHP编写多用户的网络组件
[网络办公] eGroupWare 群组管理-多国语言,支持中文

[项目管理] 龙升客户关系管理系统 国内开源 php+mysql
[项目管理] PHPGEN代码生成系统
[项目管理] BugFree 研发流程和Bug管理
[项目管理] Epiware
[项目管理] Bug Tracker 软件缺陷追踪系统
[项目管理] Achievo 基于WEB的用于商业环境的项目管理工具
[项目管理] dotProject基于LAMP的开源项目管理软件
[项目管理] Streber 基于wiki的项目管理工具
[项目管理] WebCollab 基于Web的协作系统,用于项目管理
[项目管理] phpCoin

[开发框架] PHPRPC
[开发框架] PA
[开发框架] Picora
[开发框架] Tigermouse
[开发框架] symfony
[开发框架] Zephyr Framework
[开发框架] Zoop Framework
[开发框架] PHPGo
[开发框架] Studs
[开发框架] Luta framework
[开发框架] SolarPHP
[开发框架] Stratos
[开发框架] PHPLIB
[开发框架] FleaPHP
[开发框架] LIMBAS
[开发框架] VertrigoServ
[开发框架] CodeIgniter MVC PHP 框架
[开发框架] WACT 模板引擎
[开发框架] web.framework
[开发框架] Achievo ATK
[开发框架] ZNF
[开发框架] php.MVC
[开发框架] Akelos Framework PHP开发框架
[开发框架] strutsphp
[开发框架] CakePHP
[开发框架] Qcodo
[开发框架] FastFrame
[开发框架] InterJinn
[开发框架] Prado
[开发框架] PHP on Trax
[开发框架] Seagull
[开发框架] Binarycloud PHP Web开发框架
[开发框架] ThinkPHP
[开源相关] [置顶] 关于php是什么文件?用哪些软件可以打开

[工具资源] KindEditor 所见即所得(WYSWYG)HTML在线编辑器
[工具资源] PHP加速器 eAccelerator
[工具资源] SPAW web based WYSIWYG editor control
[工具资源] Free TextBox在线编辑器
[工具资源] TinyMCE
[工具资源] 在线网页编辑插件(用浏览器编辑后所见即所得)FCKeditor
[工具资源] PHP+MYSQL开发工具及资源收藏
[工具资源] MPSPHPDESIGNER PHP开发工具
[工具资源] 常用编辑器推荐

[技巧教程] 让你的WINDOWS同时支持MYSQL,MYSQL.,MYSQLX
[技巧教程] 分享PHP入门的学习方法
[技巧教程] IIS.+PHP.x+MySQL.x+Zend.x+GD+phpMyAdmin.x通用安装实例
[技巧教程] 关于什么是php脚本和格式

[工具资源] KindEditor 所见即所得(WYSWYG)HTML在线编辑器 [工具资源] PHP加速器 eAccelerator
[工具资源] SPAW web based WYSIWYG editor control
[工具资源] Free TextBox在线编
转载来源:http://hi.baidu.com/gfan/blog/item/f6a8d92a2928f128d42af1ac.html

  • Share/Bookmark
Categories: Php Tags: , ,

PHP调用Webservice实例

September 26th, 2008 No comments

NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://dietrich.ganx4.com/nusoap/ )开发。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响。  

方法一:直接调用

<?
/******************************************************************************/
/*  文件名 : soapclient.php
/*  说  明 : WebService接口客户端例程
/******************************************************************************/
include(‘NuSoap.php’);

// 创建一个soapclient对象,参数是server的WSDL
$client = new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’);

// 参数转为数组形式传递
$aryPara = array(‘strUsername’=>’username’, ‘strPassword’=>MD5(‘password’));

// 调用远程函数
$aryResult = $client->call(‘login’,$aryPara);

//echo $client->debug_str;
/*
if (!$err=$client->getError()) {
  print_r($aryResult);
} else {
  print “ERROR: $err”;
}
*/

$document=$client->document;
echo <<<SoapDocument
<?xml version=”1.0″ encoding=”GB2312″?>
 <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“>
   <SOAP-ENV:Body>
   $document
   </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>
SoapDocument;

?>


方法二:代理方式调用

<?
/******************************************************************************/
/*  文件名 : soapclient.php
/*  说  明 : WebService接口客户端例程
/******************************************************************************/
require(‘NuSoap.php’);

//创建一个soapclient对象,参数是server的WSDL
$client=new soapclient(‘http://localhost/Webservices/Service.asmx?WSDL’, ‘wsdl’);

//生成proxy类
$proxy=$client->getProxy();

//调用远程函数
$aryResult=$proxy->login(‘username’,MD5(‘password’));

//echo $client->debug_str;
/*
if (!$err=$proxy->getError()) {
  print_r($aryResult);
} else {
  print “ERROR: $err”;
}
*/

$document=$proxy->document;
echo <<<SoapDocument
<?xml version=”1.0″ encoding=”GB2312″?>
 <SOAP-ENV:Envelope SOAP-ENV:encodingStyle=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/” xmlns:xsd=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:SOAP-ENC=”http://schemas.xmlsoap.org/soap/encoding/” xmlns:si=”http://soapinterop.org/xsd“>
   <SOAP-ENV:Body>
   $document
   </SOAP-ENV:Body>
 </SOAP-ENV:Envelope>
SoapDocument;

?>

  许多使用NuSoap 调用.NET WebService或J2EE  WebService的朋友可能都遇到过中文乱码问题,下面介绍这一问题的出现的原因和相应的解决方法。

  NuSoap调用WebService出现乱码的原因:

  通常我们进行WebService开发时都是用的UTF-8编码,这时我们需要设置:

$client->soap_defencoding = ‘utf-8′;

  同时,需要让xml以同样的编码方式传递:

$client->xml_encoding = ‘utf-8′;

   至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码。

  NuSoap调用WebService出现乱码的解决方法:

  实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢?

  研究过NuSoap代码后我们会发现,当xml_encoding设置为UTF-8时,NuSoap会检测decode_utf8的设置,如果为true,会执行 PHP 里面的utf8_decode函数,而NuSoap默认为true,因此,我们需要设置:

$client->soap_defencoding = ‘utf-8′;
$client->decode_utf8 = false;
$client->xml_encoding = ‘utf-8′;

补充介绍

NuSOAP 是 PHP 环境下的 WEB 服务编程工具,用于创建或调用 WEB 服务。它是一个开源软件,当前版本是 0.7.2 ,支持 SOAP1.1 、 WSDL1.1 ,可以与其他支持 SOAP1.1 和 WSDL1.1 的系统互操作。 NuSOAP 完全由PHP语言编写,由一系列 PHP 类组成,不需要扩展库的支持,这种特性使得 NuSOAP 可以用于所有的 PHP 环境,不受服务器安全设置的影响。
 
1. NuSOAP 的获取和安装
NuSOAP 项目建立在 SourceForge 上,网络地址是:
http://sourceforge.net/projects/nusoap/ ,这里,可以下载到 NuSOAP 的最新的版本。

NuSOAP 的安装比较简单,把下载的 NuSOAP 的文件拷贝到服务器上,可以放在独立的目录里,也可以与程序代码放在相同的目录里,只要你的 PHP 代码能够访问到这些文件就可以了。

本文的测试环境基于 PHP4.3.2 和 NuSOAP 0.7.2 版本, NuSOAP 安装在 WEB 目录“ /nusoap ”里,有两个子目录, lib 和 samples 。其中, lib 目录下存放 NuSOAP 的所有源代码文件, samples 目录下是NuSOAP开发小组提供一些的例子。测试文件存放在 WEB 目录“ /nusoap ”里。

 
2. NuSOAP 的使用
NuSOAP 由一 PHP 的类组成,其中最常用到的是类soap_server和类soalclient。类soap_server 用于创建 WEB 服务,类soapclient在访问WEB服务时会用到。

2.1 一个简单的例子: Hello World
这个例子将利用 NuSOAP 创建一个简单的 WEB 服务,并利用 NuSOAP 创建一个客户端程序,调用这个服务。这个服务唯一的功能就是向客户端返回一个字符串“ Hello World ”。首先,创建 WEB 服务程序代码文件“ /nusoap/nusoap_server1.php ”:

//把 NuSOAP 的源文件包含到当前的代码文件里
<?php
require_once(“lib/nusoap.php”);

//定义服务程序
function hello() {
  return ‘Hello World!’;
}

//初始化服务对象 , 这个对象是类 soap_server 的一个实例
$soap = new soap_server; //调用服务对象的 register 方法注册需要被客户端访问的程序。
//只有注册过的程序,才能被远程客户端访问到。
$soap->register(‘hello’); //最后一步,把客户端通过 post 方式提交的数据,传递给服务对象的 service 方法。
//service 方法处理输入的数据,调用相应的函数或方法,并且生成正确的反馈,传回给客户端。
$soap->service($HTTP_RAW_POST_DATA);
?> 至此, WEB 服务程序代码文件已经建好,接下来,创建一个客户端程序代码文件“ /nusoap/nusoap_client1.php ”,调用 WEB 服务:

//把 NuSOAP 的源文件包含到当前的代码文件里
<?php
require_once(“lib/nusoap.php”);

//初始化客户端对象,这个对象是类 soapclient 的一个实例,
//把服务程序的 URL 地址传递给soapclient类的构造函数。
$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server1.php’); //利用客户端对象的 call 方法调用 WEB 服务的程序
$str=$client->call(‘hello’); //客户端对象的 getError() 方法可以用来检查调用过程是否出现错误。
//如果没有错误, getError() 方法返回 false ;如果有错误, getError()方法返回错误信息。
if (!$err=$client->getError()) {
    echo ” 程序返回 :”,htmlentities($str,ENT_QUOTES);
} else {
    echo ” 错误 :”,htmlentities($err,ENT_QUOTES);
}
?> 至此,客户端程序也建立好了,打开浏览器,访问客户端程序,看一下结果。这个例子,浏览器会显示字符串:“程序返回 :Hello World! ”

2.2 传递参数和返回错误信息的方法
再通过例子说明传递参数和返回错误信息的方法。这个例子实现两个字符串的连接,参数是两个字符串,返回值是由两个参数连接而成的字符串。首先,创建服务程序代码文件“ /nusoap/nusoap_server2.php ”,完整的代码如下:

<?php
require_once(“lib/nusoap.php”);

function concatenate($str1,$str2) {
    if (is_string($str1) && is_string($str2))
        return $str1 . $str2;
    else
        return new soap_fault(‘ 客户端 ‘,”,’concatenate 函数的参数应该是两个字符串 ‘);
}
$soap = new soap_server;
$soap->register(‘concatenate’);
$soap->service($HTTP_RAW_POST_DATA);
?> 与 2.1 节 WEB 服务程序的代码比较,这里的代码结构大体是相同的。注意以下两点:

服务程序的定义不同,带有两个参数。 NuSOAP 注册服务程序的过程还是一样的,都是调用服务对象的 register 方法。
这里使用了 NuSOAP 的一个新类 soap_fault 。当传入的两个参数有一个不是字符串时,程序通过这个类把错误信息返回给客户端。这个类的构造函数有 4 个参数:
fault

code
 必填参数 , 建议值为“ Client ”或“ Server ”,指明错误是客户端的错误还是服务端的错误。
 
faultactor
 预留项,现在还没有使用
 
faultstring
 错误的描述信息
 
faultdetail
 可选项, XML 格式的数据 , 说明详细的错误信息 
 

客户端程序代码文件“ /nusoap/nusoap_client2.php ”的完整内容如下 :

<?php
require_once(“lib/nusoap.php”);

$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php’);
$parameters=array(‘ 字符串 1′,’ 字符串 2′);
$str=$client->call(‘concatenate’,$parameters);

if (!$err=$client->getError()) {
    echo ” 程序返回 :”,$str;
} else {
    echo ” 错误 :”,$err;
}
?> NuSOAP 的客户端调用带参数的 WEB 服务时,使用数组传递参数。 $parameters 是一个数组,其中依次是每个参数的值。客户端在调用远程的服务程序时,使用带有两个参数的 call 方法,第一个参数是服务程序的名称,第二个参数是服务程序的参数数组,这里是 $parameters 。通过浏览器访问上面的客户端程序,浏览器上会显示字符串:“ 程序返回 : 字符串 1 字符串 2 ”

接下来,试着给 WEB 服务程序传入错误参数,修改上面的客户端程序,把生成参数数组的语句改成: $parameters=array(“ 字符串 ”,12) ,再通过浏览器访问客户端程序,浏览器上会显示字符串:“错误 : 客户端 : concatenate 函数的参数应该是两个字符串”。 WEB 服务程序判断传入的参数有一个不是字符串,通过 soap_fault 给客户端返回错误信息。

2.3 调试的方法
NuSOAP中常用的调试方法有三种:

2.3.1 soapclient 类的 request 和 response 成员变量
最直接的调试方法就是检查访问 WEB 服务的过程中,客户端发出的 request 信息和服务端返回的 response 信息。 soapclient 类的 request 和 response 成员变量包含这些信息,在程序中显示出这两个变量的内容,可以帮助分析程序运行的情况。看下面的代码:

<?php
require_once(“lib/nusoap.php”);

$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server2.php’);
$parameters=array(‘ 字符串 1′,’ 字符串 2′);
$str=$client->call(‘concatenate’,$parameters);

if (!$err=$client->getError()) {
    echo ” 程序返回 :”,$str;
} else {
    echo ” 错误 :”,$err;
}

//下面显示request和response 变量的内容
echo ‘<p/>’;
echo ‘Request:’;
echo ‘<pre>’,htmlspecialchars($client->request,ENT_QUOTES),’</pre>’;
echo ‘Response:’;
echo ‘<pre>’,htmlspecialchars($client->response,ENT_QUOTES ),’</pre>’;
?>
2.3.2 soapclient 类的 debug_str 成员变量
soapclient 类的 debug_str 成员变量提供了更为详细的调试信息,查看这个变量的内容,可以更好地帮助程序调试。

2.3.3 WEB 服务程序提供的调试方法
WEB 服务程序代码中,在创建 soap_server 类的实例前,定义变量 $debug=1 。调试信息作为备注,放在 SOAP 消息的尾部返回客户端,客户端通过查看 WEB 服务的 response 信息来查看调试信息。

<?php
require_once(“lib/nusoap.php”);

function concatenate($str1,$str2) {
    if (is_string($str1) && is_string($str2))
        return $str1 . $str2;
    else
        return new soap_fault(‘ 客户端 ‘,”,’concatenate 函数的参数应该是两个字符串 ‘);
}

$debug=1; //定义调试
$soap = new soap_server;
$soap->register(‘concatenate’);
$soap->service($HTTP_RAW_POST_DATA);
?> 2.4 对 WSDL 的支持
NuSOAP 内部通过类 “WSDL” 实现对 WSDL 的支持。对于 NuSOAP 的用户来说,不需要关心内部的WSDL类是如何工作的,正确地使用 soap_server 类和 soapclient 类就可以实现对 WSDL 的支持。

2.4.1 创建支持 WSDL 的 WEB 服务
为了实现 WEB 服务程序对 WSDL 的支持,需要使用 soap_server 的 configureWSDL 方法,并且在调用 soap_server 的 register 方法注册 WEB 服务程序时,需要提供更详细的参数。看下面的代码,代码的文件名是 “/nusoap/nusoap_server3.php”。

<?php
require_once(“lib/nusoap.php”);

function concatenate($str1,$str2) {
    if (is_string($str1) && is_string($str2))
        return $str1 . $str2;
    else
        return new soap_fault(‘ 客户端 ‘,”,’concatenate 函数的参数应该是两个字符串 ‘);
}

$soap = new soap_server;
$soap->configureWSDL(‘concatenate’); // 初始化对 WSDL 的支持

// 注册服务
$soap->register(‘concatenate’,
array(“str1″=>”xsd:string”,”str2″=>”xsd:string”), // 输入参数的定义
array(“return”=>”xsd:string”) // 返回参数的定义
);

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ”;
$soap->service($HTTP_RAW_POST_DATA);
?> 现在打开浏览器,访问刚才建立的文件,
http://127.0.0.1/nusoap/nusoap_server3.php,结果如下:

concatenate
View the WSDL for the service. Click on an operation name to view it’s details.

concatenate
点击函数名称concatenate,可以看到对函数的描述。点击”WSDL”,或者访问WEB服务文件,并在后面加上查询字符串”?wsdl”(
http://127.0.0.1/nusoap/nusoap_server3.php?wsdl),可以得到WEB服务的WSDL内容。

2.4.2 通过 WSDL 调用 WEB 服务
通过 WSDL 调用 WEB 服务,与不通过 WSDL 调用 WEB 服务,程序的结构大体相同。区别在于,通过 WSDL 调用 WEB 服务,初始化 soapclient 类时,传入两个参数到 soapclient 的构造函数,第一个参数是 WSDL 文件的地址,第二个参数指定是否使用 WSDL ,指定为 true 即可。看下面的代码,代码的文件名是 “ /nusoap/nusoap_client3.php ”

<?php
require_once(“lib/nusoap.php”);

$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true);
$parameters=array(‘ 字符串 1′,’ 字符串 2′);

$str=$client->call(‘concatenate’,$parameters);
if (!$err=$client->getError()) {
    echo ” 程序返回 :”,$str;
} else {
    echo ” 错误 :”,$err;
}
?> 2.4.3 代理的使用
NuSOAP 提供代理的方法调用远程 WEB 服务。这种方法,在客户端程序里面创建一个远程服务的代理对象,通过代理直接调用远程的 WEB 服务,而不需要通过 soalclient 类的 call 方法。看下面的代码。

<?php
require_once(“lib/nusoap.php”);

$client = new soapclient(‘http://127.0.0.1/nusoap/nusoap_server3.php?wsdl’,true);
$proxy=$client -> getProxy(); // 创建代理对象 (soap_proxy 类 )

$str=$proxy->concatenate(” 参数 1″,” 参数 2″); // 直接调用 WEB 服务
if (!$err=$proxy->getError()) {
    echo ” 程序返回 :”,$str;
} else {
    echo ” 错误 :”,$err;
}
?>

3. 更多的学习资源

  • Share/Bookmark

xdebug调试PHP程序

September 25th, 2008 No comments
为什么需要Debugger?
很多PHP程序员调试使用echo、print_r()、var_dump()、printf()等,其实对于有较丰富开发经验的程序员来说这些也已经足够了,他们往往可以在程序执行的过程中,通过输出特定变量的值可以判断程序执行是否正确,甚至效率高低也可以看出来(当然可能还需要使用一些时间函数)。那么我们为什么还需要一个专门的调试程序来监控我们的程序运行呢? 这个问题的答案不妨留到后面来揭晓。
什么是Xdebug?
Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪,调试和分析PHP程序的运行状况。Xdebug现在的最新版本是xdebug 2.0.0beta6,支持PHP4/PHP5
官方站点:www.Xdebug.org
如何安装Xdebug
以PHP5.1.4,Windows平台为例(其它PHP版本,其它平台请参看官网文档):
1. 登录www.xdebug.org,在首页右侧有一个Windows modules,选择其中的PHP5.1.2+,下载php_xdebug-5.1.2-2.0.0beta6.dll文件;
2. 将下载的php_xdebug-5.1.2-2.0.0beta6.dll放到C:\php5\ext目录,重命名为php_xdebug.dll
3. 编辑php.ini,加入下面几行:
extension=php_xdebug.dll
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
后面的目录“I:\Projects\xdebug”为你想要放置Xdebug输出的数据文件的目录,可自由设置。
4. 重启Apache
5. 写一个test.php,内容为<?php phpinfo(); ?>,如果输出的内容中有看到xdebug,说明安装配置成功。

现在我们就可以开始使用Xdebug强大的功能了!

作者:Haohappy

MSN: haohappy at msn.com

Blog: http://blog.csdn.net/haohappy2004

2006-07-04

Go on..现在我们来从最简单的程序调试开始一步步介绍Xdebug。

调试:

我们先写一个可以导致执行出错的程序,例如尝试包含一个不存在的文件。

testXdebug.php

<?php

require_once(‘abc.php’);

?>

然后通过浏览器访问,我们惊奇地发现,出错信息变成了彩色的了:

不过除了样式改变,和我们平时打印的出错信息内容没什么不同,意义不大。好,我们继续改写程序:

testXdebug2.php

<?php

testXdebug();

function testXdebug() {

require_once(‘abc.php’);

}

?>

输出信息:

发现了什么? Xdebug跟踪代码的执行,找到了出错的函数testXdebug()

我们把代码再写得复杂一些: 

testXdebug3.php

<?php

testXdebug();

function testXdebug() {

requireFile();

}

function requireFile() {

require_once(‘abc.php’);

}

?>

输出信息:

呵呵,也就是说Xdebug具有类似于JavaException的“跟踪回溯”的功能,可以根据程序的执行一步步跟踪到出错的具体位置,哪怕程序中的调用很复杂,我们也可以通过这个功能来理清代码关系,迅速定位,快速排错。

其实PHP函数debug_backtrace()也有类似的功能,但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及
PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数,然后又反向移植到PHP4.3中。
如何利用Xdebug使调试信息更加美观?
Xdebug扩展加载后,Xdebug会对原有的某些PHP函数进行覆写,以便好更好地进行Debug。比如var_dump()函数,我们知道通常我们需要在函数前后加上”<pre>…</pre>”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后,我们不再需要这样做了,Xdebug不但自动给我们加上了<pre>标签,还给变量加上颜色。
例:
<?php
$arrTest=array(
“test”=>”abc”,
“test2″=>”abc2″
);
var_dump($arrTest);
?>
输出:
看到了吗? 数组元素的值自动显示颜色。
如何利用Xdebug测试脚本执行时间
测试某段脚本的执行时间,通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子:
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list(
$usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}$time_start = microtime_float();
// Sleep for a while
usleep(100);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo
"Did nothing in $time seconds\n";
?>
但是microtime()返回的值是微秒数及绝对时间戳(例如“0.03520000 1153122275),没有可读性。所以如上程序,我们需要另外写一个函数microtime_float(),来将两者相加。
Xdebug自带了一个函数xdebug_time_index()来显示时间。
如何测定脚本占用的内存?
有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了–enable-memory-limit参数时才有效。 
Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值。
如何检测代码中的不足?
有时候代码没有明显的编写错误,没有显示任何错误信息(如errorwarningnotice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在。
回忆一下,之前我们编辑php.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
这几行,目的就在于把执行情况的分析文件写入到I:\Projects\xdebug”目录中去(你可以替换成任何你想设定的目录)。如果你执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.1169585776这种格式命名的文件。这些就是Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,我们需要用图形化的软件来查看。
Windows平台下,可以用WinCacheGrind(*我修改的*下载地址http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件。可以直观漂亮地显示其中内容:
哇,非常漂亮,我们很直观地看到index.php中我们调用了一个函数testXdebug()testXdebug()中又调用了requireFile()函数。这样我们就可以非常方便地查看整个脚本的程序结构。
另外,我们还可以看到每个函数被调用的次数及执行所花费的时间!这对于测试程序性能非常有用。
好了,这么一个简单的程序不太能显示出Xdebug+WinCacheGrind的强大,我给出一个稍大点的例子(一个基于Zend FrameworkCMSindex.php):
从上图可以看到:整个程序的结构,每个函数被调用的次数,执行时间都一目了然。
小结:
Xdebug提供了各种自带的函数,并对已有的某些PHP函数进行覆写,可以方便地用于调试排错;Xdebug还可以跟踪程序的运行,通过对日志文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能。

作者:Haohappy

MSN: haohappy at msn.com

Blog: http://blog.csdn.net/haohappy2004

2006-07-04

其实PHP函数debug_backtrace()也有类似的功能,但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及
PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数,然后又反向移植到PHP4.3中。
如何利用Xdebug使调试信息更加美观?
Xdebug扩展加载后,Xdebug会对原有的某些PHP函数进行覆写,以便好更好地进行Debug。比如var_dump()函数,我们知道通常我们需要在函数前后加上”<pre>…</pre>”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后,我们不再需要这样做了,Xdebug不但自动给我们加上了<pre>标签,还给变量加上颜色。
例:
<?php
$arrTest=array(
“test”=>”abc”,
“test2″=>”abc2″
);
var_dump($arrTest);
?>
输出:
看到了吗? 数组元素的值自动显示颜色。
如何利用Xdebug测试脚本执行时间
测试某段脚本的执行时间,通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子:
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list(
$usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}$time_start = microtime_float();
// Sleep for a while
usleep(100);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo
"Did nothing in $time seconds\n";
?>
但是microtime()返回的值是微秒数及绝对时间戳(例如“0.03520000 1153122275),没有可读性。所以如上程序,我们需要另外写一个函数microtime_float(),来将两者相加。
Xdebug自带了一个函数xdebug_time_index()来显示时间。
如何测定脚本占用的内存?
有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了–enable-memory-limit参数时才有效。 
Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值。
如何检测代码中的不足?
有时候代码没有明显的编写错误,没有显示任何错误信息(如errorwarningnotice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在。
回忆一下,之前我们编辑php.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
这几行,目的就在于把执行情况的分析文件写入到I:\Projects\xdebug”目录中去(你可以替换成任何你想设定的目录)。如果你执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.1169585776这种格式命名的文件。这些就是Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,我们需要用图形化的软件来查看。
Windows平台下,可以用WinCacheGrind(*我修改的*下载地址http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件。可以直观漂亮地显示其中内容:
哇,非常漂亮,我们很直观地看到index.php中我们调用了一个函数testXdebug()testXdebug()中又调用了requireFile()函数。这样我们就可以非常方便地查看整个脚本的程序结构。
另外,我们还可以看到每个函数被调用的次数及执行所花费的时间!这对于测试程序性能非常有用。
好了,这么一个简单的程序不太能显示出Xdebug+WinCacheGrind的强大,我给出一个稍大点的例子(一个基于Zend FrameworkCMSindex.php):

其实PHP函数debug_backtrace()也有类似的功能,但是要注意debug_backtrace()函数只在PHP4.3.0之后版本及
PHP5中才生效。这个函数是PHP开发团队在PHP5中新增的函数,然后又反向移植到PHP4.3中。
如何利用Xdebug使调试信息更加美观?
Xdebug扩展加载后,Xdebug会对原有的某些PHP函数进行覆写,以便好更好地进行Debug。比如var_dump()函数,我们知道通常我们需要在函数前后加上”<pre>…</pre>”才能够让输出的变量信息比较美观、可读性好。但是加载了Xdebug后,我们不再需要这样做了,Xdebug不但自动给我们加上了<pre>标签,还给变量加上颜色。
例:
<?php
$arrTest=array(
“test”=>”abc”,
“test2″=>”abc2″
);
var_dump($arrTest);
?>
输出:
看到了吗? 数组元素的值自动显示颜色。
如何利用Xdebug测试脚本执行时间
测试某段脚本的执行时间,通常我们都需要用到microtime()函数来确定当前时间。例如PHP手册上的例子:
<?php
/**
* Simple function to replicate PHP 5 behaviour
*/
function microtime_float()
{
list(
$usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}$time_start = microtime_float();
// Sleep for a while
usleep(100);
$time_end = microtime_float();
$time = $time_end - $time_start;
echo
"Did nothing in $time seconds\n";
?>
但是microtime()返回的值是微秒数及绝对时间戳(例如“0.03520000 1153122275),没有可读性。所以如上程序,我们需要另外写一个函数microtime_float(),来将两者相加。
Xdebug自带了一个函数xdebug_time_index()来显示时间。
如何测定脚本占用的内存?
有时候我们想知道程序执行到某个特定阶段时到底占用了多大内存,为此PHP提供了函数memory_get_usage()。这个函数只有当PHP编译时使用了–enable-memory-limit参数时才有效。 
Xdebug同样提供了一个函数xdebug_memory_usage()来实现这样的功能,另外xdebug还提供了一个xdebug_peak_memory_usage()函数来查看内存占用的峰值。
如何检测代码中的不足?
有时候代码没有明显的编写错误,没有显示任何错误信息(如errorwarningnotice等),但是这不表明代码就是正确无误的。有时候可能某段代码执行时间过长,占用内存过多以致于影响整个系统的效率,我们没有办法直接看出来是哪部份代码出了问题。这时候我们希望把代码的每个阶段的运行情况都监控起来,写到日志文件中去,运行一段时间后再进行分析,找到问题所在。
回忆一下,之前我们编辑php.ini文件
加入
[Xdebug]
xdebug.profiler_enable=on
xdebug.trace_output_dir=”I:\Projects\xdebug”
xdebug.profiler_output_dir=”I:\Projects\xdebug”
这几行,目的就在于把执行情况的分析文件写入到I:\Projects\xdebug”目录中去(你可以替换成任何你想设定的目录)。如果你执行某段程序后,再打开相应的目录,可以发现生成了一堆文件,例如cachegrind.out.1169585776这种格式命名的文件。这些就是Xdebug生成的分析文件。用编辑器打开你可以看到很多程序运行的相关细节信息,不过很显然这样看太累了,我们需要用图形化的软件来查看。
Windows平台下,可以用WinCacheGrind(*我修改的*下载地址http://sourceforge.net/projects/wincachegrind/)这个软件来打开这些文件。可以直观漂亮地显示其中内容:
哇,非常漂亮,我们很直观地看到index.php中我们调用了一个函数testXdebug()testXdebug()中又调用了requireFile()函数。这样我们就可以非常方便地查看整个脚本的程序结构。
另外,我们还可以看到每个函数被调用的次数及执行所花费的时间!这对于测试程序性能非常有用。
好了,这么一个简单的程序不太能显示出Xdebug+WinCacheGrind的强大,我给出一个稍大点的例子(一个基于Zend FrameworkCMSindex.php):

作者:Haohappy

MSN: haohappy at msn.com

Blog: http://blog.csdn.net/haohappy2004

2006-07-04

从上图可以看到:整个程序的结构,每个函数被调用的次数,执行时间都一目了然。
小结:
Xdebug提供了各种自带的函数,并对已有的某些PHP函数进行覆写,可以方便地用于调试排错;Xdebug还可以跟踪程序的运行,通过对日志文件的分析,我们可以迅速找到程序运行的瓶颈所在,提高程序效率,从而提高整个系统的性能。
  • Share/Bookmark
Categories: Php Tags: , , , ,

php二分法在IP地址查询中的应用

September 13th, 2008 No comments

前段时间做数据分析,需要大量的IP地址查询(每秒钟近万次检索),首先考虑到使用数据库。
数据库大概存储几十万条IP记录,记录集如下:

+———-+———-+————+———+———+——–+——–+
| ip_begin | ip_end | country_id | prov_id | city_id | isp_id | netbar |
+———-+———-+————+———+———+——–+——–+
| 0 | 16777215 | 2 | 0 | 0 | 0 | 0 |
| 16777216 | 33554431 | 2 | 0 | 0 | 0 | 0 |
| 33554432 | 50331647 | 2 | 0 | 0 | 0 | 0 |
| 50331648 | 67108863 | 3 | 0 | 0 | 0 | 0 |
| 67108864 | 67829759 | 3 | 0 | 0 | 0 | 0 |
+———-+———-+————+———+———+——–+——–+
  这样做查询需要用到如下SQL:
<?php
$sql = ‘SELECT * FROM i_m_ip WHERE ip_begin <= $client_ip AND ip_end >= $client_ip’;
?>
  这样的检索显然用不到索引,即使用到,MySQL查询效率也不大可能达到每秒500次以上,我做了很多并发优化,最终平均查询效率也只有每秒200次左右,实在是头痛。一开始我也有想到借鉴纯真IP库的检索方法,但是我一直对算法有抵触,也以为二分法很难,所以就没有尝试使用,直到最后没有办法了,才最终实现了二分法的IP地址检索。
  从上表可以看到IP库是从0到4294967295的一个连续数值,这个数值要是拆开存储,会有几百G的数据,所以没办法使用索引也没办法哈希。最终我使用PHP将这些东东转为二进制存储,抛弃了数据库的检索。可以看到IP起止长度为一个4字节的长整型,后面的国家ID、省份ID等,可以使用2个字节的短整型来存储,总共一行数据就有18个字节,总共31万条数据,算起来也就5M的样子。具体IP库生成代码如下:
<?php
/*
IP文件格式:
3741319168 3758096383 182 0 0 0 0
3758096384 3774873599 3 0 0 0 0
3774873600 4026531839 182 0 0 0 0
4026531840 4278190079 182 0 0 0 0
4294967040 4294967295 312 0 0 0 0
*/
set_time_limit(0);
$handle = fopen(‘./ip.txt’, ‘rb’);
$fp = fopen(“./ip.dat”, ‘ab’);
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer = trim($buffer);
$buffer = explode(“\t”, $buffer);
foreach ($buffer as $key => $value) {
$buffer[$key] = (float) trim($value);
}
$str = pack(‘L’, $buffer[0]);
$str .= pack(‘L’, $buffer[1]);
$str .= pack(‘S’, $buffer[2]);
$str .= pack(‘S’, $buffer[3]);
$str .= pack(‘S’, $buffer[4]);
$str .= pack(‘S’, $buffer[5]);
$str .= pack(‘S’, $buffer[6]);
fwrite($fp, $str);
}
}
?>
  这样IP就按照顺序每18字节一个单位排列了,所以很容易就使用二分法来检索出IP信息:
function getip($ip, $fp) {
fseek($fp, 0);
$begin = 0;
$end = filesize(‘./ip.dat’);
$begin_ip = implode(”, unpack(‘L’, fread($fp, 4)));
fseek($fp, $end – 14);
$end_ip = implode(”, unpack(‘L’, fread($fp, 4)));
$begin_ip = sprintf(‘%u’, $begin_ip);
$end_ip = sprintf(‘%u’, $end_ip);
do {
if ($end – $begin <= 18) {
fseek($fp, $begin + 8);
$info = array();
$info[0] = implode(”, unpack(‘S’, fread($fp, 2)));
$info[1] = implode(”, unpack(‘S’, fread($fp, 2)));
$info[2] = implode(”, unpack(‘S’, fread($fp, 2)));
$info[3] = implode(”, unpack(‘S’, fread($fp, 2)));
$info[4] = implode(”, unpack(‘S’, fread($fp, 2)));
return $info;
}
$middle_seek = ceil((($end – $begin) / 18) / 2) * 18 + $begin;
fseek($fp, $middle_seek);
$middle_ip = implode(”, unpack(‘L’, fread($fp, 4)));
$middle_ip = sprintf(‘%u’, $middle_ip);
if ($ip >= $middle_ip) {
$begin = $middle_seek;
} else {
$end = $middle_seek;
}
} while (true);
}
  以上$fp为打开ip.dat的文件句柄,由于是循环检索,所以写在函数外面,免得每次检索都要打开一次文件,30W行数据二分法最多也只需要循环7次(2^7)左右即可找到准确的IP信息。之后本来还想将ip.dat放在内存中加快检索速度,后来发现,字符串定位函数的效率,根本和文件指针的偏移定位不是在一个数量级的,所以还是放弃使用内存来存放IP库。
  这个实现,使IP检索效率提高了近百倍,只是一个简单的二分法的应用,从此算法在WEB应用中不重要的观念彻底打消了。其实要实现这个,我还请教了金狐,我一开始是请他帮我生成一个纯真格式的IP库,然后用Discuz的IP查询函数来检索,不过他不肯帮我,最后造就了我的这个实践和学习。有时候,求人不如求己
本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/15470.htm

  • Share/Bookmark

php连接mysql查询

September 4th, 2008 No comments

<?php
$con = mysql_connect(“localhost”,”peter”,”abc123″);
if (!$con)
  {
  die(‘Could not connect: ‘ . mysql_error());
  }

mysql_select_db(“my_db”, $con);

$result = mysql_query(“SELECT * FROM person”);

while($row = mysql_fetch_array($result))
  {
  echo $row['FirstName'] . ” ” . $row['LastName'];
  echo “<br />”;
  }

或者

 

<?php
mysql_connect
($host,$user,$password);
$result mysql_db_query(“database”,“select * from table”);
while(
$row mysql_fetch_array($result)) {
  echo 
$row["user_id"];
  echo 
$row["fullname"];
}
mysql_free_result($result);
?>

  • Share/Bookmark