当前位置:  编程技术>php
本页文章导读:
    ▪PHP正则表达式入门教程[转]       思维导图点击下图,可以看具体内容!  介绍        正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript.........
    ▪Yii系列-02:定制 Web App      应用的行为定制大多在config/main.php中进行,该文件返回key-value数组,用于配置web app的初始状态。一、将 yii framework 包含在应用目录内Yii Based Web Application通过Yii::createWebApplication创建;默认地,.........
    ▪paypal php 对接      项目需要要在php中使用paypal支付。先吐槽下paypal,以前做过国内的一些支付接口,有些经验。想到的是直接找paypal客服要接口文档。尼玛加paypal客服QQ  不在线。几天如此。这么大的支付居.........

[1]PHP正则表达式入门教程[转]
    来源:    发布时间: 2013-11-07
 
思维导图
点击下图,可以看具体内容!

 
 
介绍
 
       正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,php等等,我今天就把我对正则表达式的理解跟大家唠唠,不当之处,请多多指教!
 
需要知道的术语——下面的术语你知道多少?
 
Δ  定界符
Δ  字符域
Δ  修饰符
Δ  限定符
Δ  脱字符
Δ  通配符(正向预查,反向预查)
Δ  反向引用
Δ  惰性匹配
Δ  注释
Δ  零字符宽
 
定位
 
       我们什么时候使用正则表达式呢?不是所有的字符操作都用正则就好了,php在某些方面用正则反而影响效率。当我们遇到复杂文本数据的解析时候,用正则是比较好的选择。
 
优点
 
      正则表达式在处理复杂字符操作的时候,可以提高工作效率,也在一定程度节省你的代码量。
 
缺点
 
       我们在使用正则表达式的时候,复杂的正则表达式会加大代码的复杂度,让人很难理解。所以我们有的时候需要在正则表达式内部添加注释。
 
通用模式

 
 ¤ 定界符,通常使用 "/"做为定界符开始和结束,也可以使用"#"。
  什么时候使用"#"呢?一般是在你的字符串中有很多"/"字符的时候,因为正则的时候这种字符需要转义,比如uri。
     使用"/"定界符的代码如下.
$regex = '/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html$/i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

    preg_match中的$matches[0]将包含与整个模式匹配的字符串。 

    使用"#"定界符的代码如下.这个时候对"/"就不转义!

$regex = '#^http://([\w.]+)/([\w]+)/([\w]+)\.html$#i';
$str = 'http://www.youku.com/show_page/id_ABCDEFG.html';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

  ¤ 修饰符:用于改变正则表达式的行为。

     我们看到的('/^http:\/\/([\w.]+)\/([\w]+)\/([\w]+)\.html/i')中的最后一个"i"就是修饰符,表示忽略大小写,还有一个我们经常用到的是"x"表示忽略空格。

贡献代码:

  

$regex = '/HELLO/';
$str = 'hello word';
$matches = array();

if(preg_match($regex, $str, $matches)){
echo 'No i:Valid Successful!',"\n";
}

if(preg_match($regex.'i', $str, $matches)){
echo 'YES i:Valid Successful!',"\n";
}

 

  ¤ 字符域:[\w]用方括号扩起来的部分就是字符域。

  ¤ 限定符:如[\w]{3,5}或者[\w]*或者[\w]+这些[\w]后面的符号都表示限定符。现介绍具体意义。

     {3,5}表示3到5个字符。{3,}超过3个字符,{,5}最多5个,{3}三个字符。

     * 表示0到多个

     + 表示1到多个。

  ¤ 脱字符号

      ^:

          > 放在字符域(如:[^\w])中表示否定(不包括的意思)——“反向选择”

          >  放在表达式之前,表示以当前这个字符开始。(/^n/i,表示以n开头)。

      注意,我们经常管"\"叫"跳脱字符"。用于转义一些特殊符号,如".","/"

 

通配符(lookarounds):断言某些字符串中某些字符的存在与否!
 
lookarounds分两种:lookaheads(正向预查 ?=)和lookbehinds(反向预查?<=)。
> 格式:
正向预查:(?=) 相对应的 (?!)表示否定意思
反向预查:(?<=) 相对应的 (?<!)表示否定意思
前后紧跟字符
$regex = '/(?<=c)d(?=e)/'; /* d 前面紧跟c, d 后面紧跟e*/
$str = 'abcdefgk';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

否定意义:

$regex = '/(?<!c)d(?!e)/'; /* d 前面不紧跟c, d 后面不紧跟e*/
$str = 'abcdefgk';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

 

>字符宽度:零
验证零字符代码
$regex = '/HE(?=L)LO/i';
$str = 'HELLO';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

打印不出结果!

$regex = '/HE(?=L)LLO/i';
$str = 'HELLO';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

 能打印出结果!

说明:(?=L)意思是HE后面紧跟一个L字符。但是(?=L)本身不占字符,要与(L)区分,(L)本身占一个字符。

 
捕获数据
 
没有指明类型而进行的分组,将会被获取,供以后使用。
> 指明类型指的是通配符。所以只有圆括号起始位置没有问号的才能被捕捉。

> 在同一个表达式内的引用叫做反向引用。
> 调用格式: \编号(如\1)。
$regex = '/^(Chuanshanjia)[\w\s!]+\1$/';
$str = 'Chuanshanjia thank Chuanshanjia';
$matches = array();

if(preg_match($regex, $str, $matches)){
var_dump($matches);
}

echo "\n";

 

> 避免捕获数据
   格式:(?:pattern)
   优点:将使有效反向引用数量保持在最小,代码更加、清楚。
 
>命名捕获组
   格式:(?P<组名>) 调用方式 (?P=组名)
$regex = '/(?P<author>chuanshanjia)[\s]Is[\s](?P=
    
[2]Yii系列-02:定制 Web App
    来源:    发布时间: 2013-11-07

应用的行为定制大多在config/main.php中进行,该文件返回key-value数组,用于配置web app的初始状态。

一、将 yii framework 包含在应用目录内

Yii Based Web Application通过Yii::createWebApplication创建;默认地,该Yii类包含在YiiRoot目录下的framework目录,位于当前WebApplication之外。这种配置适合在一个服务器上部署多个基于Yii的应用,Web App均指向这个YiiRoot目录,也利于升级。
  • 当仅有一个Yii Based 应用,或者需要开发用于发布的WebApp时,将所有资源统一打包更为用户友好一些。具体步骤为:
  • YiiRoot/framework目录移入应用的portected目录下,即AppRoot/protected/framework。在index.php中,require_once(dirname(__FILE__).'protected/framework/yii.php')
  • 在protected/config/main.php中,修改basepath指向protected目录,该路径需要包含framework的父目录。
  • 另外,protected目录下有.htaccess,通过其中的deny from all指令屏蔽对该目录的外部访问。


    二、定制App名称

    在protected/config/main.php中,修改键name的值,将显示在页面左上方。


    三、定制默认首页

    在protected/config/main.php中,修改键defaultController的值为指定的controller,在该controller中须指定默认action。当request中未明确目的时,采用defaultController/defaultAction来响应。


    四、定制URL模式

    默认url形如http://youAppRoot/index.php?r=controller/action,该url不利于SEO,也比较晦涩,可定制为http://youAppRoot/controller/action。通过定制protected/config/main.php返回的components数组中的urlManager来实现,如下所示。
  • 'urlManager'=>array(
             'urlFormat'=>'path',
             'rules'=>array(
              ),
             'showScriptName'=>false,
           ),
  • urlFormat设置path:默认值为get,即在url中通过get参数r来表示请求的资源(/path/to/EntryScript.php?name1=value1&name2=value2...)。path则通过路径形式表示(/path/to/EntryScript.php/name1/value1/name2/value2...)。
  • showScriptName设置为false:在url 中不出现 入口文件“/index.php”,此时需要设置web服务器的转发规则,将不能明确资源位置的请求均转发至入口文件。
  • rules设置了action的参数映射模式,用正则表达式来表示,具体参阅 CUrlManager

  • 五、定制DB

    通过定制protected/config/main.php返回的components数组中的db来实现:
    'db'=>array(
             'emulatePrepare' => true,
              'charset'=> 'utf8',
             'connectionString' =>'mysql:host=myDbHost;dbname=myDbName',
              'username'=> 'username',
              'password'=>'password',
          ),

    在程序中需要访问DB时,通过Yii::app()->db来获取连接。

    本文链接


        
    [3]paypal php 对接
        来源:    发布时间: 2013-11-07

    项目需要要在php中使用paypal支付。

    先吐槽下paypal,以前做过国内的一些支付接口,有些经验。想到的是直接找paypal客服要接口文档。

    尼玛加paypal客服QQ  不在线。几天如此。这么大的支付居然没技术支持,真不能理解。文档后面还是在官网7找8找才找到了。

     

    正文:

    首先要在sandbox环境申请主帐号。连接:https://developer.paypal.com/

    申请后用主帐号登录申请卖家以及买家帐号。然后进行一些设置。

    注意:如果买家是国外的,那么创建买家帐号的时候就要设置所在国家。这样在支付页面才会以该国家的语言显示界面。

    申请帐号以及设置问题请参考文档  连接:https://www.paypal-biz.com/development/documentation/PayPal_Sandbox_Guide_CN_V2.0.pdf

     

    支付过程首先第一步是提交表单给paypal 当然post方式。

    <form id="form_starPay" name="form_starPay" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick"> //告诉paypal该表单是立即购买
    <input type="hidden" name="business" value="XXXXXX@XXXXX.com"> //卖家帐号 也就是收钱的帐号
    <input type="hidden" name="item_name" value="name"> //商品名称
    <input type="hidden" name="amount" value="10000"> //价格
    <input type="hidden" name="currency_code" value="JPY"> //币种
    <input type="hidden" name="return" value="http://localhost/frontend/pay/PDT_order"> //支付成功后网页跳转地址
    <input type="hidden" name="notify_url" value="http://localhost/frontend/pay/IPN_Order"> //支付成功后paypal后台发送订单通知地址
    <input type="hidden" name="invoice" value=""> //自定义订单号 paypal原样返回
    <input type="hidden" name="custom" value=""> // 自定义变量 paypal原样返回
    <input type="hidden" name="lc" value="JP"> //支付页面语言设置
    <input type="image" src="/en_US/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt=" PayPal - The safer, easier way to pay online">//支付按钮

    </form>

    当支付成功后 paypal就会跳转到我们设置的 “return” 地址,会带上一个流水号 我们get方式就可以取到值。流水号键名 “tx”。

    拿到流水号然后加上身份标识跟cmd变量就可以到paypal请求刚才支付的订单的交易内容。

    例如:cmd=_notify-synch&tx=123sflsfjlw12&tx_token=fsfljvw3lwejloj43jfvdflf2

    cmd=_notify-synch是告诉paypal你要做什么,这里是查询订单交易。

    tx_token值要在paypal后台取,刚才注册帐号的时候要开通pdt功能才行。

    这个过程paypal称为:PDT (Payment Data Transfer 付款数据传输)。

    我们接收到返回的一些数据后就可以进行一些支付后的操作,比如发金币,发货等等。

    pdt 详细的返回参数最后给出文档。

    代码:

    <?php
    //获取 PayPal 交易流水号 tx
    $tx_token = $_GET['tx'];
    //定义您的身份标记
    $auth_token = "CHANGE-TO-YOUR-TOKEN";
    //形成验证字符串
    $req = " cmd=_notify-synch&tx=$tx_token&at=$auth_token";
    //将交易流水号及身份标记返回 PayPal 验证
    $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
    if (!$fp) {
    // HTTP ERROR
    } else {

        
    最新技术文章:
     




    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3