作者usherII (阿达)
看板PHP
标题[请益] Debug方法跟$_SERVER的问题
时间Tue Sep 10 19:17:12 2013
小弟这一两天把在windows下开发的网页系统搬移到Linux(Ubuntu)系统下跑
使用 Apache2 + PHP5
系统里有个透过 AJAX(POST) 问PHP程式更後端资料的机制
本来在windows下跑都正常, 但搬到linux下就失效了
ajax直接跑到error部分, 得到的错误是500, Internal Server error
除此之外没有其他的资讯
由於在linux上也同时有写档权限的问题 (改own跟mod权限给www-data都无效 Orz)
所以也没办法透过我本来就写好的log机制去看问题
所以在这想请教各位, 你们都怎麽debug PHP程式?
不能设断点之类的还真麻烦.... Orz
接着我为了找出问题 尝试了一大堆东西 花了一整天
最後使用最笨的手段 把PHP部分一段一段加回来 看到底哪边才出错
才发现是 $_SERVER['xxxxxxxxx'] 这个片段出问题
if (empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$vm_address = $_SERVER['REMOTE_ADDR'];
}
else
{
$vm_address = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'])[0];
}
我想请教 这东西不能用在linux系统里吗?
感谢~~
PS: 我爬了一些资料, 有人建议改用 getenv
--
◢ . ______ ◣ ◣ ◢
◣ ◢ ◢ ◥█◣▲◢█◤ ◣
◥ ◥ ● │GRAVEYARD. \‧◣ ◥ █
◣◢
█ ◤ ◢ ◢◤◥█◤◥◣ ◤ ◤
' \ BILE DEMON│ '◣ ◥◥
▌◤◤ ◢ ◢▌ ◣▽◢▌ ◣
▄ ▄ ̄ ̄ ̄ ̄ ̄ ̄ ◤ ◢
█▌ ◣ ◥ ▎ ◥▌ ◤ ▊
◢◢ ▌ //\ ●● ◣◥◥ ◤
◥ ◤◤◢ ◥◥ ︵ ◤◤ ◣◣
◥ ▃▇ ▆◣▂◢▂▅≡█▄ ◣ USHER ◢ Ⅲ◥◢▅◣◤Ⅲ ◤
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 175.181.118.240
1F:→ alpe:没有这回事, 但是HTTP_X_FORWARDED_FOR 是过proxy才有的 09/10 19:23
2F:→ danny8376:explode(...)[0] 改成 09/10 20:08
3F:→ danny8376:$tmparr = explode(...); 09/10 20:09
4F:→ danny8376:$XXX = $tmparr[0]; 09/10 20:09
5F:推 shadowjohn:$xxx = current(explode(...)); 09/10 21:11
6F:→ usherII:其实小的测过才把[0]挂到後面的.. 不过我会改回去看看! 3Q 09/10 23:36
7F:→ iFEELing:新的linux可能有SELinux的问题 这个很容易搞死没碰过的 09/11 00:03
8F:推 rickysu:把 php.ini display_errors 打开吧,看到底发生了什麽事 09/11 08:55
9F:→ rickysu:ubuntu 预设是把 error 显示关掉,有错误讯息才能 debug。 09/11 08:55
10F:→ danny8376:反正PHP [0]挂在函数後面会synax error... 09/11 11:54
11F:→ rickysu:php 5.4 允许 foo()[0]; 这样的用法了 09/11 13:29
12F:→ danny8376:现实上很多php还没更新到5.4 09/11 17:59
13F:→ danny8376:尤其RHEL&CentOS还只有5.3.3 要5.4还得要自己编 09/11 17:59
14F:→ danny8376:是说PHP5.5都已经Release了... 09/11 18:06
15F:→ usherII:我今天把系统里有用到(array)[0]的都改掉 确实正常了! 09/11 20:47
16F:→ usherII:看来Linux上用apt-get install php5装的并没到5.4 09/11 20:49
17F:→ danny8376:BSD系列(这抓源码现场编的是废话XD)&Ubuntu之外 09/12 03:19
18F:→ danny8376:应该大多数主流的Server版distribution都还在5.3 09/12 03:19