2011-09-30 84 views
11

我有一個總結瀏覽器統計信息的cronjob。這個cronjob加載數據,然後使用get_browser()PHP函數來解析瀏覽器信息。加載PHP時出現錯誤Browscap.ini(命令行 - PHP_CLI)

這裏就是我所做的:

cd /etc/php5/cli/conf.d 
[email protected]:/etc/php5/cli/conf.d$ sudo wget http://browsers.garykeith.com/stream.asp?Lite_PHP_BrowsCapINI -O browscap.ini 
2011-09-30 15:14:18 (890 KB/s) - `browscap.ini' saved [185384/185384] 

隨後的cronjob運行:

php /usr/local/cron/summarizeStats.php --option=browserStats --date=yesterday 

,我得到這個錯誤:

PHP: syntax error, unexpected $end, expecting ']' in /etc/php5/cli/conf.d/browscap.ini on line 51 

我在做什麼錯?謝謝

+0

我剛剛下載PHP的最新browsecap文件,它是超過20000行,所以如果在51行說意外$結束,那麼你的文件是不完整的。意外的$結束意味着php遇到一個不期待的文件末尾。你下載了PHP兼容的browsecap文件嗎?這是一個鏈接到[最新的php browsecap.ini](http://browsers.garykeith.com/stream.asp?PHP_BrowsCapINI) – drew010

回答

26

現在看來,這些browsecap文件有錯誤。它們似乎包含未轉義的分號「;」在瀏覽器中。您可以修復使用這個腳本:

<?php 
$browsecap = file('browscap.ini'); 
foreach($browsecap as &$row) 
    if ($row[ 0 ] == '[') 
     $row = str_replace(';', '\\;', $row); 

file_put_contents('fixed_browscap.ini', $browsecap); 
+1

感謝它的工作:) – Tech4Wilco

+0

沒有爲我工作。沒有被識別的IE。我用我的shell腳本中的星號替換了分號和刻度,然後再次運行。例如:'sed -e'/^\ [/ s /;/*/g'/etc/php5/apache2/browscap_orig.ini> /etc/php5/apache2/browscap.ini sed -i「/^\ [/ s /'/ */g「/ etc/php5/apache2/browscap.ini' –

0

sed可以用來躲避分號像這樣:

sed 's/;/\\\;/g' browscap.ini > browscap_escape.ini 

這將捕獲所有的意見很好,但你可以再次使用sed去抓那些。

如這裏所描述github.com/browscap/browscap/issues/119