在php脚本中加debug做troubleshooting

在工作中遇见了一个问题,最后通过快速学习php语法解决。
问题是客户在访问服务器的网页时 需要从 服务器A 跳转到服务器B,但是B的登录报错。报错内容是 “ 服务器A 和服务器B 时间不同步”。

但是在A和B上分别检查时间和NTP配置,发现是同步的。此时troubleshooting比较困难。
于是思考是否有可能A和B的时间都没有 问题,但是在获取时间传递时间的时候出现了问题。
由于这个web 是用php写的,不涉及编译和混淆,可以很容易的通过网络往回找到具体是哪一个php文件来实现该部分功能。也可以通过服务器上Apache的log来找报错,具体确定是哪一个PHP文件 。
[client ***.***.***.***] PHP Notice: import_r equest_variables(): No prefix specified - possible security hazard in /opt/ /start.php on line 4, referer: https:

                  $delta = time() - $server_A_time();
                    if ( ($delta < (0 - $timeout)) || ($delta > $timeout) ) {       
                               $_SESSION['status'] = "Error time not sync";
                            }

发现是在脚本中进行的比较,那如果我能在脚本中多加几行,把time()和server_A_time() 都打出来,就可以知道是本地时间取错了,还是从serverA的时间拿错了。于是在该php里加入下面几行,将 两个时间,以及做差值后的delta 输出到指定的文件里,这样我重新尝试登陆,再去查看我指定的myfile 就可以 了。

         $myfile = fopen("myfile.txt", "w") or die("Unable to open file!");
                    fwrite($myfile, $delta);
                    fwrite($myfile,time());
                    fwrite($myfile,$server_A_time());
                    $txt = "thanks\n";
                    fwrite($myfile, $txt);

这样在我的lab里的结果如下。
delta -2754
serverB time 1479429890
serverA time 1479432644
thanks

客户的运行结果如下
delta 1479699729
serverB time 1479699729
serverA time
thanks

于是发现是由于在serverB上拿到的serverA的时间为空导致的。

回到serverA上检查发现,serverA传过去的是带有正确时间的。
• @2016-11-15 20:40:38,278 |getSessionParamValue PHP Array: a:7:{s:8:“username”;:“password”;s:7:“timeout”;s:4:“1800”;s:3:“key”;s:10:"1479213638";

于是问题应该发生在serverB 去连serverA 拿参数的地方,重启ServerB的web 服务器,问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值