标签 PHP 下的文章

一次灵异的数据排序问题

测试同学反馈说数据没有做排序,检查了下代码发现没有指定排序字段。
赶紧在PHP代码里加上,前端刷新后发现顺序还是不对,。
一开始以为是代码没传到测试环境导致,上测试环境上检查了下对应文件,代码已经更新了。

输出结果类似:

{
    "1002": {
        "xx": "xxxx", 
        "yy": "yyyy"
    }, 
    "1000": {
        "a": "aaa", 
        "b": "bbb"
    }
}

突然想到之前项目组同事说过js的排序问题,感觉是js自动做了排序。
跟同事确认了下,js会对带数字key的数组进行自动排序。

于是把PHP输出的数据结构改成没有key的就可以了,最终输出结果类似:

[
    {
        "xx": "xxxx", 
        "yy": "yyyy"
    }, 
    {
        "a": "aaa", 
        "b": "bbb"
    }
]

设置PHP服务器的环境变量

通过设置服务器的环境变量,来区分开发/测试/生成环境。

Apache

命令

`
SetEnv RUN_MODE development
`

Nginx

命令

`
fastcgi_param RUN_MODE development;
`

PHP获取环境变量

命令

`
$runMode = $_SERVER['RUN_MODE'];
`

mysql_real_escape_string返回false的问题

开发中用到mysql_real_escape_string进行过滤,调试后发现执行后返回为false。
查了下手册,发现使用这个方法时必须要有mysql连接。

Yes, this means that you have to start a connection before you can escape data... you can't escape the data first, and then use it to build your SQL, and then connect.

Be aware of this when you're designing objects and architecture.

如何获取php函数exec执行命令后的输出结果

项目开发中,遇到需要在PHP里用exec执行svn命令,需要知道执行后的结果。

代码如下:

$return = exec("svn import -m 'add file' 1.txt http://xxxxx/1.txt");
var_dump($return);

执行结果如下:

svn: 路径 “http://xxxxx/1.txt” 已经存在
string(0) ""

可以看到return变量为空,svn命令的输出并没有给到return变量上。

查了下手册exec的说明,修改代码如下:

exec("svn import -m 'add file' 1.txt http://xxxxx/1.txt", $return);
var_dump($return);

执行结果如下:

svn: 路径 “http://xxxxx/1.txt” 已经存在
array(0) {
}

好奇怪,return还是空的。
搜索了一番,正确的代码应该是:

exec("svn import -m 'add file' 1.txt http://xxxxx/1.txt 2>&1", $return);
var_dump($return);

执行结果如下:

array(1) {
  [0]=>
  string(88) "svn: 路径 “http://10.182.23.34:53021/1251100188/xxx/xxxxxx/test3.txt” 已经存在"
}