Tagged: php RSS

  • admin 3:32 pm on December 25, 2009 Permalink | Reply
    Tags: nginx, php   

    nginx 下QUERY_STRING 的一个bug 

    配置选项:
    location / {
    root “D:/xampp/htdocs/teeume.com”;
    try_files $uri /t.php;
    }

    实现重写后,我们用 /search/?q=test 请求,会发现$_GET['q'] 无值,$_SERVER['QUERY_STRING']无值。

    这就影响了正常的取值方式。
    我们做如下修正:
    $uri = $_SERVER['REQUEST_URI'];
    $uri = strtok($uri, ‘?’);
    $qs = $_SERVER['QUERY_STRING'] = strtok(‘?’);
    parse_str($qs, $qs_arr);
    $_REQUEST = array_merge($_REQUEST, $qs_arr);

     
  • admin 11:42 am on November 6, 2009 Permalink | Reply
    Tags: Alipay, php   

    即时到账–银行网关提前功能 

    在商家的收银台页面选择银行,提交到支付宝页面后就默认为买家选择的银行。
    目的:操作更顺,流程更简单! 例如:该图是商家自己网站设计的页面。

    Alipay form Example

    测试页面:http://alipaysales.cn:8082/cpys/jsdz/

    如何集成 ?

    即时到账技术文档中有这两个参数:
    paymethod :(bankPay(网银);cartoon(卡通); directPay(余额))
    defaultbank:默认网银 String (见常见银行表)
    银行列表:

    银行简码 银行名称
    ICBCB2C 中国工商银行
    CMB 招商银行
    CCB 中国建设银行
    ABC 中国农业银行
    SPDBB2B 上海浦东发展银行(B2B)
    CIB 兴业银行
    GDB 广东发展银行
    SDB 深圳发展银行
    CMBC 中国民生银行
    COMM 交通银行
    POSTGC 邮政储蓄银行
    CITIC 中信银行
    BOCB2C 中国银行

    只需要 在接口中新增加 paymethod,defaultbank 这两个参数,这两个参数也需要经过签名,否则会报错。

    比如:买家选择 工行,那这两个参数的值就应该为 paymethod=bankPay; defaultbank=ICBCB2C;

    以php即时到账代码为例就是:

    require_once(“alipay_service.php”);
    require_once(“alipay_config.php”);
    $parameter = array(
    “service” => “create_direct_pay_by_user”, //交易类型
    “partner” => $partner, //合作商户号
    “return_url” => $return_url, //同步返回
    “notify_url” => $notify_url, //异步返回
    “_input_charset” => $_input_charset, //字符集,默认为GBK
    “subject” => “商品名称”, //商品名称,必填
    “body” => “商品描述”, //商品描述,必填
    “out_trade_no” => date(Ymdhms), //商品外部交易号,必填(保证唯一性)
    “total_fee” => “0.01″, //商品总价,必填(价格不能为0)
    “payment_type” => “1″, //默认为1,不需要修改

    “paymethod” => “bankPay”, //bankPay(网银);cartoon(卡通); directPay(余额)
    “defaultbank” => “ICBCB2C”, //见银行简码表
    “show_url” => $show_url, //商品相关网站
    “seller_email” => $seller_email //卖家邮箱,必填
    );
    $alipay = new alipay_service($parameter,$security_code,$sign_type);
    $link=$alipay->create_url();

     
  • admin 3:17 pm on October 22, 2009 Permalink | Reply
    Tags: , , php   

    apache mod_negotiation与MultiViews的奥妙 

    今天遇到一个奇怪的问题,取URL请求字符串时,明明访问的是/index/welcome/,取回来的却是/welcome/。
    框架在处理这个问题时的处理流程是:

    $php_self = $_SERVER['PHP_SELF'];
    $uri = $_SERVER['REQUEST_URI'];

    if (isset($_SERVER['PATH_INFO'])) {
    $uri = $_SERVER['PATH_INFO'];
    } else {
    $uri = substr($uri, strlen(dirname($php_self)) );
    }
    $uri[0]!=’?’ || $uri = “/$uri”;
    $uri = strtok($uri, ‘?’);

    先判断PATH_INFO,然后再处理其他情况。
    但我这里直接是http://xxx.com/index/welcome/ 怎么会存在PATH_INFO变量呢?
    后来打印$_SERVER变量时发现,apache认为我访问的这个链接是/index.php/welcome/ !
    原来apache可以在访问/path/foo时,如果找不到/path/foo,就会去找/path/foo.*,并且选一个合适的返回来,为你服务。
    我这里存在着/index.php,所以访问/index/welcome/时,它就自动去找/index.php了!
    而这些功能是一个模块提供的,它的名字叫mod_negotiation。相关说明:http://httpd.apache.org/docs/2.2/content-negotiation.html
    同时,这个模块还提供了一个目录级别的控制开关,也就是

    网上有很多相关的问题,但很多回复都没有回中点子上,比如:

    http://www.phpx.com/happy/thread-125808-1-1.html

    大多人都是想到用url rewrite来实现,呵呵。

    其实,这个模块还有很多其他的强大功能,等待我们去发现,嘿嘿。

     
  • admin 3:45 pm on September 4, 2009 Permalink | Reply
    Tags: php,   

    PHP 5.3 Extensions For Windows 

    自己动手丰衣足食。继续编译中,有好的扩展可以推荐来~~

    这里的dll都是仅适用于php 5.3 vc9版本。

    注:下边扩展只适用于PHP 5.3,至于其他扩展,估计到处都有了,不用重复造轮子。

    php_imagick.dll

    php_ming.dll

    php_apc.dll

    Updated 2009-09-09:Add php_ming.dll for php5.3.0

    Updated 2009-10-05:    php_apc.dll 已经添加,应bya之求。

    –EOF–

     
    • jianfen 9:26 pm on September 6, 2009 Permalink | Reply

      怎么编译的,能把编译的步骤写一些吗,谢谢

    • bya 11:33 am on September 16, 2009 Permalink | Reply

      可否提供一个3.13p1的php_apc.dll

    • admin 10:20 am on October 5, 2009 Permalink | Reply

      @bya
      已经附上,请测试。

    • admin 10:31 am on October 5, 2009 Permalink | Reply

      @jianfen
      请参考: http://seaprince.cn/compiling-php-on-windows/
      比如说APC扩展,只需要下载APC的扩展包,放入ext目录中,再重新
      buildconf
      configure –disable-all –enable-cli –enable-apc=shared
      nmake
      成功完成后,在Release_TS 中,就可找到php_apc.dll

    • luckgo 6:52 pm on May 26, 2010 Permalink | Reply

      兄弟,我装了PHP5.3 VC6,里面没有php_mcrypt.dll和libmcrypt.dll, 但我要启动php_mcrypt.dll,我就把PHP5.2中的php_mcrypt.dll和libmcrypt.dll拿来用,启动Apache后在日志中发现有这样错误:
      PHP Warning: PHP Startup: mcrypt: Unable to initialize module\nModule compiled with module API=20060613\nPHP compiled with module API=20090626\nThese options need to match\n in Unknown on line 0

      估计是不兼容问题,但我在网上找不到相关下载,也不知道如何编译,兄弟能不能帮忙编译个?

    • luckgo 8:10 pm on May 26, 2010 Permalink | Reply

      再请教个问题,PHP官方说在windows+apache环境下装PHP 5.3要选择VC6版本,网上搜到的全是相同的内容,而我当初却装了VC9Visual C++ 2008 Redistributable

    • luckgo 8:12 pm on May 26, 2010 Permalink | Reply

      (不小心提交了,晕)
      而我当初却装了apache和PHP5.3 VC9,但已安装Visual C++ 2008 Redistributable,结果完全正常,这说明应该没问题吧?

    • seaprince 2:31 pm on June 3, 2010 Permalink | Reply

      @luckgo
      PHP Warning: PHP Startup: mcrypt: Unable to initialize module\nModule compiled with module API=20060613\nPHP compiled with module API=20090626\nThese options need to match\n in Unknown on line 0

      这个错误是版本不一致导致的。比如,mcrypt的编译环境是VC9,它就不能运行在VC6版本的PHP中。否则你就报你这个错。

  • admin 4:04 pm on August 12, 2009 Permalink | Reply
    Tags: php   

    UCenter Home2.0的无法同步登录的修正 

    今天在弄UCenter Home和其他自定义应用同步登录,发现一个UCH 2.0中的一个问题。

    打开source/do_login.php,你会发现这样的一个代码片段:

        if($_SCONFIG['uc_status']) {

            include_once S_ROOT.’./uc_client/client.php’;

            $ucsynlogin = uc_user_synlogin($setarr['uid']);

        } else {

            $ucsynlogin = ”;

        }

    这个$_SCONFIG['uc_status']并没有出现中出现在任何配置文件中,所以它始终是未被定义的。也就一直无法同步登录其他应用了。

    在前边加上一句

        $_SCONFIG['uc_status'] = 1;

    可以临时解决这个问题。

    另外,自己写应用时,例子是最好的老师。ucenter的包中,有examples目录,就包括了两灰常经典的例子,绝对值得参考。

    –EOF–

     
  • admin 1:01 am on August 9, 2009 Permalink | Reply
    Tags: php,   

    Windows下源码编译PHP 

    开始前准备

    开始之前,你需要准备如下东西:

    1. Microsoft Visual C++, 建议Visual C++ 2008, 速成版或专业版都可以。
    2. Windows SDK,下载地址:http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en 不建议用那个网络安装,慢死,还不知道什么时候能完。还有就是建议全部安装。
    3. 其他工具,下载地址:http://pecl2.php.net/downloads/php-windows-builds/php-libs/binary-tools.zip

    编译步骤

    1. 下载并安装VC++ 2008,并安装。
    2. 安装windows sdk 6.1
    3. 下载php5.3,下载地址:http://cn.php.net/get/php-5.3.0.tar.bz2/from/this/mirror
    4. 创建文件夹,比如C:\php-sdk
    5. 把上面第三步下载的包解压到这里,解压完时C:\php-sdk里应该有两个子目录bin, script
    6. 在开始菜单处打开Microsoft Windows SDK v6.1/CMD Shell,输入命令:
      setenv /x86 /xp /release
      cd c:\php-sdk
      bin\phpsdk_setvars.bat
      bin\phpsdk_buildtree.bat php53dev
    7. 上一步会创建一些目录。进入vc9\x86,把php5.3.0解压在这里,解压后目录结构:vc9\x86\php5.3.0
    8. 在WIN-SDK的命令行下输入:
      cd C:\php-sdk\php53dev\vc9\x86\php5.3.0
      buildconf
    9. 到了这一步,就和linux下差不多了,你可以看一下编译的选项帮助:
      configure –help
    10. 好,我们来一个最小化的编译:
      configure –disable-all –enable-cli
      nmake
    11. 这一步在php wiki上是没有问题,但由于我们是中文环境,会报下面的错误:
    12. 用Editplus打开ext\standard\browscap.c这个文件,

      选是,并选择Western European (Windows)
      然后另存为UTF-8编码。
    13. 重新nmake编译,然后用nmake snap编译成最终二进制包。二进制包在php-5.3.0\Release_TS下。可能的名字是php-5.3.0-Win32-VC9-x86.zip
    14. 测试一下:

    下一篇文章再写怎么编译pecl扩展。

     
  • admin 11:47 am on July 24, 2009 Permalink | Reply
    Tags: , php, rewrite   

    小心对待rewrite中邪恶的百分号(%) 

    今天遇到一个非常诡异的问题。

    我目前是采用 /key1/value1/key2/value2 方式传递参数,非常干净明了。但是今天我试图传递一个urlencode过的字符串时发现,只要URI里带有百分号%,就会导致Apache服务器400错误,警告说“错误的请求”。

    /key1/value1/key2/value_with_%_symbol    400 error

    /key1/value1/key2/value_without_symbol    200 OK

    查阅手册后,发现%是rewrite语法中的特殊字符,会认为是一个变量的开始,就像PHP中的美元符号$。

    经测试,很多知名站点也没有解决这个问题,如WP,discuz,osnews等等。

    目前找到一个解决方案,但情况有点不太一样,所以也没有测试成功。链接地址:http://stackoverflow.com/questions/734654/modrewrite-doesnt-work-for-a-url-beginning-in-percent-sign

    临时解决方案:/key1/value2/?key2=evil_value2 即换回传统的方式来解决问题。

    特留此文,以后找到方案时更新。

     
    • 小诗 11:21 am on June 25, 2010 Permalink | Reply

      这个问题可以解决了。
      在wp里的重写规则是:

      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ – [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.php [L]

      然后用php中的:$_SERVER['REQUEST_URI']获取网址斜杠后的字符串。
      如:
      xx.com/%BF%AA%D0%C4
      $_SERVER['REQUEST_URI'] 就等于 /%BF%AA%D0%C4

    • 淡淡的阳光 4:51 pm on June 26, 2010 Permalink | Reply

      你的路径写得就有问题,如果访问的文件名包含’%',那么合理的url就应该是

      /key1/value1/key2/value_with_%25_symbol
      而不是
      /key1/value1/key2/value_with_%_symbol

    • admin 1:14 pm on July 1, 2010 Permalink | Reply

      @淡淡的阳光
      对的,应该先urlencode。

  • admin 4:24 pm on July 16, 2009 Permalink | Reply
    Tags: php, qq   

    用PHP通过邮箱获取QQ好友列表 

    今天研究了一下QQ邮箱的登录过程,企图从这个位置突破,获取好友列表。

    结果网上有一个Python的版本,还发现在php.cn上有人用PHP模拟了一个,不管3721,拿回来,测试,乖乖!不禁感慨牛人的强悍。

    验证码已经自动提取。

    输出密码,验证码,成功登录并提取好友列表!酷!

    演示页面:http://blog.eaxi.com/wp-content/demo/qq/

    QQ密码已经在客户端用JS加密,本程序无法获取用户密码。所以请大家放心使用!

    另,程序请大家自己放狗去找,此处不提供下载了,怕太多人用腾讯改协议大家都不能用!呵呵。如果确实有需要,但放狗找不到的,再私下找我要吧。

    Updated:

    2009-7-29 因为太多人找我要程序,想想还是共享给大家的好,下载地址:qq


     
    • 幽默笑话 10:56 am on July 20, 2009 Permalink | Reply

      这样都行?

    • admin 11:21 am on July 20, 2009 Permalink | Reply

      @幽默笑话
      呵呵,为什么不行?自己测试一下了。

    • kevin yang 1:39 pm on July 23, 2009 Permalink | Reply

      我找到了相关的php class,不过还不是很明白客户端怎么实现的。能不能email我一个客户端的。谢谢~

    • admin 4:09 pm on July 23, 2009 Permalink | Reply

      @kevin yang
      邮件已经发出,请查收。

    • kevin yang 11:59 am on July 24, 2009 Permalink | Reply

      谢谢~~

    • Changer 12:25 pm on July 28, 2009 Permalink | Reply

      找了很久了,能不能发个代码给我看看,谢谢

    • admin 9:35 am on July 29, 2009 Permalink | Reply

      @Changer
      已经公开下载,谢谢捧场!

    • bill 9:36 am on September 15, 2009 Permalink | Reply

      谢谢 我也想要代码

    • hiton 11:18 am on November 3, 2009 Permalink | Reply

      劳烦楼主把代码发到我信箱 不胜感激 .. hitont(at)gmail.com

    • admin 2:37 am on November 4, 2009 Permalink | Reply

      @hiton

      上文已经提供下载,请自己下载。

    • shimmer8711 4:19 pm on November 26, 2009 Permalink | Reply

      这个代码现在已经不能用了,老是提示验证码错误,不知道是什么原因啊

    • zhang 7:53 pm on November 27, 2009 Permalink | Reply

      已经无法使用了。

    • Dicky 11:31 pm on January 16, 2010 Permalink | Reply

      好像已经无法使用,总是提示验证码错误,楼主有最新版本吗?

    • PP 3:59 pm on February 26, 2010 Permalink | Reply

      您好,现在验证码是不是不可以用了,请问有什么办法可以解决嘛,谢谢

    • tangtang 3:51 pm on October 14, 2010 Permalink | Reply

      你好。能不能把这个程序发给我一份呢。谢谢了。

    • admin 12:23 am on October 24, 2010 Permalink | Reply

      @tangtang
      已经在帖子中有了哦。。但不知道还能不能用。你可以试试!

  • admin 5:18 pm on June 26, 2009 Permalink | Reply
    Tags: , php   

    php中的memcached扩展使用 

    本文提供php_memcache.dll 扩展下载,本版本适用于绝大多数PHP 5版本,已经测试5.2.6, 5.2.9-2,欢迎您把测试结果分享出来。

    另外,提一下用memcache做session.save_handler的方法。

                ini_set(‘session.save_handler’, ‘memcache’);
                ini_set(‘session.save_path’, ‘tcp://192.168.0.240:11211′);

    以下用正常的方式使用session,呵呵,简单吧!如果有更多的服务器,用逗号分隔即可。

                ini_set(‘session.save_path’, ‘tcp://192.168.0.240:11211,tcp://192.168.0.241:11211′);

    还可以带上参数,这些参数和Memcache::addServer()保持一致:

                ini_set(‘session.save_path’, ‘tcp://192.168.0.240:11211?persistent=1&weight=1&timeout=1&retry_interval=15′);

    更新:

    还可以把tcp换成udp,以得到更好的效率,更低的资源消耗:

                ini_set(‘session.save_path’, ‘udp://192.168.0.240:11211,tcp://192.168.0.241:11211′);

     
  • admin 9:17 pm on August 5, 2008 Permalink | Reply
    Tags: php   

    PHP探针iProber修正版 v1.0 

    旧版无法支持最新的硬件,此版本为修正版本。支持主流硬件的识别。

    或许后期还会追加一些新功能。

    演示:http://u.eaxi.com/iprober/iprober.php

    UPDATE:

    添加SVN:http://svn.zhpanel.com/iprober

     
c
compose new post
j
next post/next comment
k
previous post/previous comment
r
reply
e
edit
o
show/hide comments
t
go to top
l
go to login
h
show/hide help
shift + esc
cancel