11

我有一个总结浏览器统计信息的 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

我究竟做错了什么?谢谢

4

3 回答 3

28

这些browsecap文件现在似乎存在错误。它们似乎包含未转义的分号“;” 在浏览器规范中。您可以使用这个小脚本来解决这个问题:

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

file_put_contents( 'fixed_browscap.ini', $browsecap );
于 2011-09-30T20:56:09.513 回答
1

有点晚了,但是在不修改的情况下使用文件仍然存在问题。我正在使用以下脚本来下载和更改 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 作业。

于 2019-12-05T10:35:56.690 回答
0

sed可用于转义分号,如下所示:

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

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

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

于 2017-12-20T14:50:38.353 回答