标签归档:php

RSS feed of php

最后更新于 .

由于公司业务需要,花两周时间实现了一个小型的支付系统,麻雀虽小五脏俱全,各种必须的模块如账户加锁,事务性保证,流水对帐等都是有完整实现的,整个开发过程中有很多经验积累,再加上在网上搜索了一下,大部分都是些研究性的论文,对实际使用价值不大,所以这次特意拿出来和大家分享一下。

这个系统可以用作小型支付系统,也可以用做第三方应用接入开放平台时的支付流水系统。

原来的需求比较负责,我简化一点说:

  1. 对每个应用,对外需要提供 获取余额,支付设备,充值 等接口
  2. 后台有程序,每月一号进行清算
  3. 账户可以被冻结
  4. 需要记录每一次操作的流水,每天的流水都要和发起方进行对账

针对上面的需求,我们设置如下数据库:

CREATE TABLE `app_margin`.`tb_status` (
    `appid` int(10) unsigned NOT NULL,
    `freeze` int(10) NOT NULL DEFAULT 0,
    `create_time` datetime NOT NULL,
    `change_time` datetime NOT NULL,
    
    PRIMARY KEY ...

最后更新于 .

用php有两个月了,说实话用惯了django,再用php开发真的有点郁闷,简单列一下,并非批评,仅为入门的同学少走弯路:

  1. 取不到post的数据 当url为如下形式:
    xx.com/?mod=x&act=y
    
    而method又为post的时候,post的数据会取不到;必须改成如下形式:
    xx.com?mod=x&act=y
    
  2. 字符串连接 这么写代码是会报错滴:
    echo 1."xx";
    
    必须这么写才行:
    echo 1 ."xx";
    
  3. require之后,不知道自己引入了些什么 这个地方,如果和C或者C++来比确实也没啥问题,关键是python的from x import y 的方式实在是让人赏心悦目,所以忍不住抱怨下。

OK,抱怨完了,言归正传。 其实这些问题都还好,仔细点都能解决,最让我不爽的是php的所有框架(不排除我孤陋寡闻,欢迎大家指教)居然都没有提供一个类似于django的form类。 心灰意冷之时,突然想起来之前看到过一个仿django的php框架,虽然整个框架还有很多问题,不过form类这部分应该完成了吧。 pluf ...

最后更新于 .

公司还是不推荐用python,只好屈服使用php,不过用python习惯了,真是发现有些地方不适应,今天写了一段代码,语法检查怎么都通不过,特地放在这里,希望有朋友能指点一下。 代码如下:

function get()
{
    $arr = array(
        1,2,3
    );
    return $arr;
}
$y = get()[1];
echo $y;

执行会报如下错误:

Parse error: syntax error, unexpected '['

一开始我还以为又是少写';'之类的问题,仔细检查未果,所以把代码拆成两行,变成:

$y = get();
$y = $y[1];

居然执行成功了! 于是我不解了,为什么连c++都支持的语法,而php里面却不肯支持? c++的代码如下:

vector<int> foo()
{
    vector<int> vec;
    vec.push_back(1 ...

最后更新于 .

其实很早就想写这篇文章了,虽然晚上介绍vim的文章很多,本博也已经就vim的使用写了70多篇博文,但是由于历史的原因,还有很多人对vim能做什么存在误解,包括:

  • vim对中文支持不好
  • vim适合临时编辑文本,对IDE的支持不好
  • vim的内嵌脚本语言不够强大,不像emacs的lisp那样无所不能

我不知道提出这些论断的人是因为不了不了解vim的现状,还是是对vim心存偏见。

本博在写vim相关文章的时候,一直坚持只谈技术的原则,不会涉及到与其他编辑器尤其是emacs的任何比较,然而最近在看了某些博文之后,觉得为了不让某些已经过时的观点给初学者选择编辑器时造成困扰,写下这篇文章十分必要。

OK,我们正式开始,在文章的末尾,相信大家都会明白上面的几个观点是否正确。

一.普通人的编辑利器

之所以第一点就提到这个,是因为"文字处理"当然是一个编辑器最基本的功能,而能把编辑的体验发挥到极致的也恐怕只有vim而已了。

这一节,也会参考善用佳软对vim的使用心得,相信用户的感受是最好的证明。

  1. 免费
    用户再也不用去网上辛苦的下载D版了!
  2. 提高输入速度
    这个相信也没有什么好争论的,纯键盘操作的速度是鼠标无法比拟的,虽然会带来一定的学习成本,但是相信还是值得的。
  3. 完美支持中文,并支持多种文件编码
    很多编辑器会有处理多字节编码的问题,而vim完美解决了这一点。(如果你的vim没解决,请参考linux下vim的编译以及终端乱码的最终解决方案
  4. 文本笔记管理
    这要归功于vim的一款插件:voom,详情可以参考善用佳软的这篇博文--VOoM(原VOOF):vim实现带折叠双栏树状文本管理

二 ...

最后更新于 .

最近部门在推行单元测试框架的时候,对C++有指定使用gtest,但对php并没有规定使用的框架,在试用了几个php单元测试框架后,认为simpletest这个框架最简单易用,而phpunit实在过于庞大与繁琐了。 这里简单说一下simpletest的使用。一个简单的unittest文件如下:

define('BASE_PATH','/home/dantezhu/appbase/php/');

require_once BASE_PATH . '/simpletest/autorun.php';

class TestOfSite extends UnitTestCase
{
    function __construct()
    {
        parent::__construct();
    }
    function setUp() {}
    function tearDown() {}

    function test_case1()
    {
        $this->assertTrue(true);
    }
}
$test = &new TestOfSite();
//$test->run(new HtmlReporter());
$test->run(new TextReporter());

其中以test开头的函数即为每个testcase,而setUp和tearDown函数分别为每个testcase运行开始前和结束后会自动调用的函数,可以做一些初始化或者清理工作。

$test = &new TestOfSite();
//$test->run ...

最后更新于 .

可能不少读者知道,本博之前是有单独搭建过一个微博:http://t.vimer.cn,用来记录一些简短的思想,不过后来由于与主站的关联太少,所以就没有再使用了。
不过最近对于这种一句话思想的需求日渐多了起来,所以发愤图强,终于算是搞定啦~(如果还没注意到的朋友,请看右侧的"我的唠叨")。
如图:

1


对于http://t.vimer.cn的搭建比较简单,使用的是p2主题,大家自行安装即可,这里只贴出右侧widget的实现,代码如下:

<?php
$con = mysql_connect('localhost', 'dantezhu_wp', 'xxxxxxxx',true);
mysql_query("SET NAMES 'utf8'");
mysql_select_db('dantezhu_t',$con);
$result = mysql_query("select * from wp_posts where post_status='publish' order by ID desc limit 1 ...

最后更新于 .

上一篇文章说道在用python的suds库的时候,发的中文总是乱码(windows下还总是encode失败,真是杯具),无奈产品经理又死活都要求是中文,今天研究了一天,总算是搞定了。 说一下定位的过程。

1.先拿一段php的soap代码来看:

<?php 
$client = new SoapClient("http://ws.sb.com/messageservice.asmx?wsdl",Array('trace'=>True)); 
// 参数转为数组形式传递 
$aryPara = array('sender' => 'dantezhu', 
    'receiver' => 'dantezhu', 
    'title' => 'OZ评论消息提醒', 
    'msgInfo' => 'sss', 
    'messageType'=>0); 
// 调用远程函数 
$ret = $client->SendRTX($aryPara); 
var_dump($ret); 
echo $client->__getLastRequest(); 
?>

这段代码是能够正确的发送请求的,通过__getLastRequest打出发送包,如下:

< ...

最后更新于 .

最近在做公司的一个内部管理系统,因为自己php不熟,公司又没有asp.net的环境,所以自己最后居然用js+CGI的模式,运行速度倒是飞快了,编码却麻烦的要死……罪过啊,罪过,又不是外网……
废话不多说了,有一个问题就是要在调用我的CGI的时候,返回一个文件下载对话框。
好吧,在网上搜了一下,实际上只是http头里面有这样一段就可以了:

Content-Disposition:   attachment;   filename= %s\r\n\r\n

找到了php版如下:

$old_name = "E:\a.doc";
$file_name = "新文件名.doc";
if (!file_exists($old_name)) { //检查文件是否存在
    echo "文件找不到";
    exit;
} else {
    $file = fopen($old_name, "r"); //   打开文件
    //   输入文件标签
    Header("Content-type:   application/octet-stream");
    Header("Accept-Ranges:   bytes");
    Header("Accept-Length ...

最后更新于 .

之前的文章已经介绍过vim中实现各种补全,这篇文章我们主要以php为例,实现通过字典补全,来自动补全php函数。

首先,我们从下面的url下载一个php的函数字典文件 http://cvs.php.net/viewvc.cgi/phpdoc/funclist.txt 然后改名字为 php_funclist.txt,并放在vim的安装目录的ExtraVim下(笔者的是C:/vim/ExtraVim)

然后,我们就可以通过如下两行代码来实现将php_funclist.txt字典文件载入到vim中啦~

set dictionary-=$VIM/ExtraVim/php_funclist.txt dictionary+=$VIM/ExtraVim/php_funclist.txt

set complete-=k complete+=k

注意上面的代码中,我的php_funclist.txt的路径是$VIM/ExtraVim/php_funclist.txt,$VIM的意思是vim的安装目录,比如我安装在C:/vim/下面,那么$VIM 就是 ...

最后更新于 .

最近需要写一些php的程序,于是研究了一下如何在vim中对php进行语法检查。 其实原理也是和在vim中调用g++/gcc对源文件进行编译是一样的(详见VIM-一键编译单个源文件),也是调用外部程序,然后将错误输出到vim的quickfix中去,为什么要输出到quickfix中?……如果这个都不知道,恐怕也不是在用vim吧……,呵呵,OK,我们进入正题。

先来做准备工作,由于大部分读者应该实在windows下开发,所以我们主要讲解windows下的部署(但是vim的配置代码在linux下一样可以完美执行)。

首先,你需要去下载一个php在windows下的压缩包,然后解压到任何一个地方,进入目录,你会发现一个php.exe。

OK,把这个目录放到环境标量里去。

第二步,打开你的_vimrc,将如下配置写入并保存。

"检查当前文件代码语法(php){{{

function! CheckSyntax()  
    if &filetype!="php"   
        echohl WarningMsg | echo "Fail to check syntax! Please select the right file!" | echohl None   
        return  
    endif  
    if &filetype=="php ...