11

ブラウザの統計を要約するcronジョブがあります。このcronジョブはデータをロードし、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はすべて;をエスケープしています\'
  • 2番目のsedはコメントを前の状態(遅い)に戻します。このような文字列を持つセクションがあるため、4つまたは5つのセミコロンを置き換えるだけでエラーが発生します(;;;;)^\;これは、検索部分のようなもので最適化することができ;、置換部分で1つだけで、置く前にそれをテストする必要があります
  • 3番目のsedは、「Let'sEncrypt...」セクションやこのような他のいくつかの場所で使用されている一重引用符をエスケープしています。'*'

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 に答える