浏览模式: 标准 | 列表

在 PHP 中本身带有一个用 C 语言实现的 xmlrpc 扩展,叫 xmlrpc-epi。因为它是用 C 语言实现的,所以从速度上来说比用 PHP 实现的那些 xmlrpc 扩展要快的多。但是在实际应用中却发现很少有人用这个扩展,大都是用 PHP 脚本实现的 xmlrpc 的扩展。原因可能有以下两点:一是这个扩展需要在服务器上打开,如果没有服务器操作权限,使用这个扩展就不现实了。第二个原因就是这个扩展在 PHP 手册中的说明太少了,而且提供的函数都很基础,要使用的话就很麻烦了。针对第二个问题,我对这个扩展进行了封装,将它封装成了3个 类:xmlrpc_error、xmlrpc_client 和 xmlrpc_server。当然最主要的是后两个类,即 xmlrpc_client 和 xmlrpc_server。这两个类大大简化了创建 xmlrpc 客户端和服务器的步骤。

2006年1月11日 更新

修正了某些非标准端口的服务器上指定相对路径进行调用的错误。

2006年1月6日 更新

增加了对 PHP5 的支持。

» 阅读全文

以前只用 PHP + MySQL,从来没在 PHP 中用过 MSSQL,今天转过来的那个站点正好用的是 MSSQL。刚给他调好了 Register Globals 问题,又一个奇怪的问题就来了。他说他这个系统里面发的新闻有的内容能发,有的不能发,有的能改,有的不能改了。还说以前用着没事。后来发现有两个问题,一个是 php.ini 中有两个选项会影响查询的内容长度。这两个选项是 mssql.textlimit 和 mssql.textsize,把他们改的尽量大一点就好了。另外还有个问题就是 MSSQL 的查询语句跟 MySQL 不太一样,在字符串转义时不是用 \,而是把一个单引号写成两个单引号。这些都是从 PHP 手册的用户注释中发现了,看来 PHP 用户手册的注释真是个好东西。

» 阅读全文

今天,学校一个部门网站要转移到虚拟主机上来,学校虚拟主机上已经挂了 n 多个站点,跑 ASP、PHP、JSP、ASP.NET 的站点都有。因此为了保证安全性,许多不安全的选项都没有开启。所以该网站放上来以后发现许多功能不能用了。这个网站是 PHP 的,原来跑在一台单独的 Apache 服务器上。这个网站编码属于早期的很烂的编码风格,提交的变量都不是通过 $_GET、$_POST 等变量获取,而是直接使用变量名。也就是说这种编码的网页需要在 php.ini 中打开 Register Globals 选项才能正确执行。如果它是一台单独的服务器,打开那个选项也无所谓,大不了就那一个站点被入侵。可是放在虚拟主机上就不同了。要是开了那个选项,其他的 站点也就会受到威胁了。可是要全面修改这个程序也不太可能,一是这个网站不是我开发的,我只是帮他们发布,我没有义务给他们改程序,二是程序太多,我也不 可能一个个的给他们改。于是找了个简单的办法,那个网站虽然比较烂,但有一点不错,每个程序开头都包含了一个 global.php 文件。于是在这个程序中加了一段代码。实现了跟开启 Register Globals 同样的功能。代码如下:

  1. <?php
  2. function register_globals($item, $key) {
  3.     global $$key;
  4.     $$key = $item;
  5. }
  6.  
  7. array_walk($_GET , 'register_globals');
  8. array_walk($_POST , 'register_globals');
  9. array_walk($_COOKIE , 'register_globals');
  10. array_walk($_SERVER , 'register_globals');
  11.  
  12. ...
  13. session_start();
  14. array_walk($_SESSION , 'register_globals');
  15. ...
  16. ?>

其中 array_walk($_SESSION , ‘register_globals’); 要放在 session_start(); 之后才管用。

这样子,就算被入侵了,也就这一个站点倒霉,其他站点不会跟着受牵连。

» 阅读全文