Home mail me! Syndicate this site using RSS

Archive for PHP


短域名在IE中无法设置子域名COOKIE的BUG

对于域名投资者来说,当然是越短越好,然而对于IE来说,小于3位的域名就无法设置子域名COOKIE了。

最近就碰到这个BUG了,一直想不通IE为什么会出这种BUG,对于其他浏览器来说一点问题都没。

假设2台服务器如下:
127.0.0.1 www.6.cn
127.0.0.1 bbs.6.cn

在www.6.cn这台服务器上有个aa.php文件,源文件如下:

<?php
setcookie("aa", "bb", time()+3600, "/", ".6.cn");
echo '<pre>';
print_r($_COOKIE);
?>

在bbs.6.cn这台服务器上有个bb.php文件,源文件如下:

<?php
echo '<pre>';
print_r($_COOKIE);
?>

这2个程序的作用就是能使子域名共享COOKIE,结果却因为这个域名小于3位,瞎忙活了1天,如果域名换成3位或3位以上,就一点问题都没,比如把6.cn换成123.cn就很正常。

暂时还没有找到解决办法,先留个帖子,看看以后是否有时间解决。

参考资料:http://curl.haxx.se/rfc/cookie_spec.html

Only hosts within the specified domain can set a cookie for a domain and domains must have at least two (2) or three (3) periods in them to prevent domains of the form: “.com”, “.edu”, and “va.us”. Any domain that fails within one of the seven special top level domains listed below only require two periods. Any other domain requires at least three. The seven special top level domains are: “COM”, “EDU”, “NET”, “ORG”, “GOV”, “MIL”, and “INT”.

解决IE中IFRAME无法保留SESSION的问题

最近用C++开发一个基于WebBrowser的Application,界面都是在一个IFRAME里展示,由于需要会员登录模块,结果却出现在IFRAME里无法保留SESSION的问题,上MICROSOFT官方找到了答案:

@header(’P3P: CP=”CAO PSA OUR”‘);

一句代码搞定!

P3P是微软的隐私策略,通常情况下跨域IFRAME或者FRAMESET默认采用的隐私策略为“中”,该级别的策略拒绝保留SESSION。CAO PSA OUR则意味着你同意跨域保留SESSION。

详细资料可以查看官方文档:http://support.microsoft.com/kb/323752

Free UML 2 tool box – BOUML

BOUML is a free UML 2 tool box (under development) allowing you to specify and generate code in C++, Java, Idl, Php and Python.

BOUML runs under Unix/Linux/Solaris, MacOS X(Power PC and Intel) and Windows.

BOUML is very fast and doesn’t require much memory to manage several thousands of classes, see benchmark.

BOUML is extensible, and the external tools named plug-outs can be written in C++ or Java, using BOUML for their definition as any other program. The code generators and reverses are ones of the pre-defined plug-outs included in the BOUML distribution. See features.

BOUML是一个免费的UML2.0工具(还在开发中),可以生成C++, JAVA, IDL, PHP, Python的代码。

BOUML是一款跨平台的程序,支持Unix/Linux/Solaris, MacOS X(Power PC and Intel) 以及 Windows。

BOML执行速度非常快,而且不需要占用太多的内存就可以管理成百上千个类,具体可以看官方的性能评测

官方网址:http://bouml.free.fr
当前版本:v4.5,发布于2008年8月26日
下载地址:http://bouml.free.fr/download.html

Features in PHP 5.3

8月1日,PHP5.3的第一个Alpha发布了,粗一看,改动的还不少啊,这下终于支持Namespace命名空间了,而我们需要做的尽量多做测试,哈哈。

具体的一些新功能可以查看此链接:http://cvs.php.net/viewvc.cgi/php-src/NEWS?view=markup&pathrev=PHP_5_3

Microsoft’s SQL Server 2005 driver for PHP

真可谓PHP界的福音啊,微软最近也在PHP上频频有所作为,先是之前针对IIS对FASTCGI的支持,现在是为PHP写了个MSSQL的扩展。

新扩展与现有的MSSQL扩展的区别如下:

  • SQL Server 2000以后的数据库支持varchar存放大于255个字节的数据,而现有的只支持255个字节
  • 现有的不支持nvarchar类型
  • 新扩展没有PDO的实现
  • 新扩展只能运行在WINDOWS平台
  • 新扩展不提供源代码,只有DLL文件
  • 新扩展支持data streams
  • 新扩展在PHPINFO里将显示sqlsrv support enabled
  • 更多信息请访问官方网站:http://www.microsoft.com/sql/technologies/php/default.mspx

    PHP 5.3将支持namespace命名空间

    目前PHP的CVS已建立5.3版本的分支,并且已将namespace加进去,这绝对是个好消息,毕竟采用面向对象开发时有个namespace的功能非常有必要。

    虽然之前由Greg Beaver发布的namespace patch没有获得支持,但是PHP内核开发人员还是提供了另一版本的patch,请看这里:http://news.php.net/php.zend-engine.cvs/6039

    同时也宣布一个消息,经过PHP内核开发人员的讨论,Johannes将成为PHP 5.3的发布管理者,请看这里:http://news.php.net/php.internals/32497

    希望将来会给大家带来一个更好的PHP版本。

    FastCGI Extension for PHP hosting on IIS5.1/IIS6.0

    MS终于给IIS推出了FastCGI扩展了,这使PHP在IIS上作为CGI方式运行是提供了更好的性能和安全性。

    用IIS作为WEB服务器的朋友们不妨尝试一下。

    相关链接:

    Howto Install Oracle Berkeley DB on Linux

    Berkeley DB是由美国Sleepycat Software公司开发的一套开放源代码的嵌入式数据库管理系统(已被Oracle收购),它为应用程序提供可伸缩的、高性能的、有事务保护功能的数据管理服务。

    Berkeley DB为许多编程语言提供了实用的api接口,包括c、c++、java、perl、tcl、python和php等。所有同数据库相关的操作都由Berkeley DB函数库负责统一完成。

    官方地址为:http://www.oracle.com/technology/products/berkeley-db/db/index.html

    本文就先讲一下如何在CentOS下安装Berkeley DB数据库(其他系统类似)。

    1、安装Berkeley DB

    # cd /usr/local/src
    # wget http://download.oracle.com/berkeley-db/db-4.6.18.tar.gz
    # tar -zxvf db-4.6.18.tar.gz
    # cd db-4.6.18
    # cd build_unix

    Berkeley DB默认是安装在/usr/local/BerkeleyDB.4.6目录下,其中4.6就是版本号,你也可以指定–prefix参数来设置安装目录。

    # ../dist/configure --prefix=/usr/local/berkeleydb --enable-cxx

    其中–enable-cxx就是编译C++库,这样才能编译Berkeley DB数据库的PHP扩展php_db4。

    # make
    # make install
    # echo '/usr/local/berkeleydb/lib/' >> /etc/ld.so.conf
    # ldconfig

    这2句的作用就是通知系统Berkeley DB的动态链接库在/usr/local/berkeleydb/lib/目录。

    至此,Berkeley DB数据库已经安装完成。

    Read more…

    [小技巧]记录PHP错误日志

    对于PHP开发人员来说,一旦某个产品投入使用,那么第一件事就是应该将display_errors选项关闭,以免因为这些错误所透露的路径、数据库连接、数据表等信息而遭到黑客攻击。

    某个产品投入使用后,难免会有错误信息,那么如何记录这些对开发人员非常有用的信息呢?

    将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。

    当然也可以记录错误日志到指定的文件中。

    # vim /etc/php.ini
    display_errors = Off
    log_errors = On
    error_log = /var/log/php-error.log

    另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。

    PHP COM应用之WPS篇

    本文仅仅是一个简单的例子来演示PHP通过COM扩展来调用WPS二次开发接口.

    <?php
    $wps = new COM("WPS.application") or die("Can't start WPS");
    try {
    	$wps->Visible = true;
     
    	// Create Document
    	$doc = $wps->Documents->Add();
    	$doc->Range->Text = "WPS v{$wps->Version} Example";
    	$doc->Paragraphs[1]->Alignment = 1;
    	$doc->Shapes->AddPicture("http://img.kingsoft.com/publish/kingsoft/images/gb/sy/logo.gif", 80, 50, 148, 60);
     
    	$doc->SaveAs("c:/php.wps");
     
    	// Close
    	$wps->Quit();
    } catch (com_exception $e) {
    	echo $e;
    }
    ?>

    这段代码的执行结果是会在C盘下创建一个php.wps文件,文件内容如下图所示:
    php_com_wps


    Next Page »