加载PHP时Browscap.ini抛出错误(命令行 - PHP_CLI)

时间:2011-09-30 19:42:28

标签: cron syntax-error php browscap

我有一个总结浏览器统计信息的cronjob。这个cronjob加载数据,然后使用get_browser()PHP函数来解析浏览器信息。

这就是我的所作所为:

cd /etc/php5/cli/conf.d
me@ubutnu:/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

我做错了什么?感谢

3 个答案:

答案 0 :(得分: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 :(得分:0)

sed可以用来逃避分号:

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

这也将捕获所有评论,但您可以再次使用sed来捕获这些评论。

如此处所述github.com/browscap/browscap/issues/119

答案 2 :(得分:0)

有点晚了,但是使用未经修改的文件仍然存在问题。我正在使用以下脚本来下载和更改browscap.ini,以便它可以在我的服务器上正常工作。

#!/bin/sh
url="http://browscap.org/stream?q=PHP_BrowsCapINI"
curl -L -o browscap.ini ${url}
sed -I "" -E 's/;/\\;/g' browscap.ini
sed -I "" -E 's/[\\;]{40}/;;;/g' browscap.ini
sed -I "" -E "s/\'/\\\'/g" browscap.ini
mv browscap.ini /usr/local/etc/php/browscap.ini

说明

  • 第一个sed使用;转义每个\'
  • 第二个sed将注释返回到以前的状态(慢速),仅替换4个或5个分号将导致错误,因为其中有些部分带有类似(;;;;)的字符串。可以使用搜索部分中的^\;之类的东西对此进行优化,而替换部分中只有一个;,需要在我放置之前进行测试
  • 第三版sed转义了“让我们加密...”部分以及其他类似'*'
  • 中使用的单引号

别忘了调整您的browscap.ini最终目的地。另外,更新后无需重新启动Apache或PHP,因此请将此脚本放在某个地方并设置cron作业。