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
测试,解决问题!!!
总结: 蛋疼的 随心播的调试!!!