作者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