0x001 项目背景
最近在制作一个手机直播平台, 使用的是腾讯云的 随心播系统。 在本地ubuntu 中测试的时候,配置好参数(腾讯的参数配置,挺蛋疼的,自己尝试了一天,才把所有的参数配置搞定)手机端测试也正常, 后来换到阿里那边的 ubuntu系统, 就开始莫名其妙起来了。挺折腾的, 随心播的 调试不是一般的蛋疼!!
0x002 报错分析一
报答代码:
Server inner error, Regist fail!
跟踪调试,php代码,定位到一行代码
$result = $stmt->execute();
这段代码执行失败 导致的
stmt是pdo的对象, 服务器是 lnmp 的环境配置, 支持pdo
推荐文章(pdo捕获错误):
http://blog.csdn.net/qq_28602957/article/details/51037644
关键代码
$dbms='mysql';//数据库类型 $dbName='admin';//使用的数据库 $user='root';//数据库连接用户名 $pwd='password';//数据库连接密码 $host='localhost';//数据库主机名 $dsn="$dbms:host=$host;port=3306;dbname=$dbName"; $pdo=new PDO($dsn,$user,$pwd);//初始化一个PDO对象,就是创建了数据库连接对象$pdo $query="insert into user (username,password) values('admin')";//需要执行的sql语句 $res=$pdo->prepare($query); $res->execute(); $code=$res->errorCode(); echo $code.'<br>'; if($code==00000){//如果没有任何错误, errorCode() 返回的是: 00000 ,否则就会返回一些错误代码 echo "数据添加成功"; }else{ echo "数据库错误:<br>"; echo 'SQL Query:'.$query; echo '<pre>'; var_dump($res->errorInfo()); echo '<pre>'; }有用的代码只是
$code=$stmt->errorCode();
var_dump( $stmt);
echo "<br/>";
var_dump( $code);
echo "<br/>";
var_dump($stmt->errorInfo());
exit;
找到具体的报错信息
提示我 pwd 为 null
我明明传了pwd 的。
0x003 报错分析二
这时候,就需要向上推了,
可以代码:
// 加密密码 $cmd = "echo $this->pwd | base64"; $pwd = ''; exec($cmd, $pwd, $ret);
测试这里,输出的 $pwd 为空
原因就是 exec 执行失败
看了看 phpinfo() 中的信息, exec 被 disable了
0x004 解决
find / -name "php.ini"
找到 php.ini 的位置
删除 disable中 exec 和 shell_exec
测试,解决问题!!!
总结: 蛋疼的 随心播的调试!!!
0则评论给“随心播 Server inner error, Regist fail!”