2011-09-30 12 views
11

Mam cronjob, który podsumowuje statystyki przeglądarki. To cronjob ładuje dane, a następnie używa funkcji get_browser() PHP do analizy informacji o przeglądarce.Browscap.ini wyrzuca błąd podczas ładowania PHP (linia komend - PHP_CLI)

Oto co zrobiłem:

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] 

Następnie prowadzony zadanie crona:

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

i otrzymuję ten błąd:

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

Co robię źle? Dzięki

+0

Właśnie ściągnąłem najnowszy plik browsecap dla PHP, i to ponad 20.000 linii, więc jeśli mówi nieoczekiwany koniec $ na linii 51, to masz plik jest niekompletny. Niespodziewany $ end oznacza, że ​​php napotkał koniec pliku, gdy się tego nie spodziewał. Czy ściągnąłeś plik browsecap zgodny z PHP? Oto link do [najnowszego php browsecap.ini] (http://browsers.garykeith.com/stream.asp?PHP_BrowsCapINI) – drew010

Odpowiedz

26

Wygląda na to, że obecnie występuje błąd w plikach Browsecap. Wydają się zawierać nieoczyszczone średniki "; w specyfikacji przeglądarki. Można ustalić, że za pomocą tego małego skryptu:

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

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

Dzięki to działa :) – Tech4Wilco

+0

Nie działa dla mnie. IE, gdzie nie są rozpoznawane. Zastąpiłem średniki i tyknięcia gwiazdkami wewnątrz skryptu powłoki i działało to ponownie. Przykład: '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 mogą być wykorzystywane do ucieczki średnik tak:

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

To będzie złapać wszystkie komentarze, jak dobrze, ale można użyć sed ponownie złapać te.

Jak opisano tutaj github.com/browscap/browscap/issues/119