2009-07-17 3 views
3

Итак, мой PHP, мягко говоря, ужасен. Я унаследовал приложение, и мне приходится исправлять ошибки в нем от кого-то, написавшего его более 7 лет назад. Когда я запускаю страницу, нет возврата, поэтому я проверил журналы, чтобы увидеть ошибку и вот что я получаю:Ошибка синтаксиса PHP в настройке глобальной переменной

PHP Parse error: syntax error, unexpected '=', expecting ',' or ';' in /httpdocs/cron123/purge.php on line 4

Вот код:

<? 
ob_start(); 

global $siteRoot = '/httpdocs/'; 
global $reportRoot = '/reports/'; 
include('billing1.php');  

$date='Purge report for: ' .date('M d, Y \a\t g:i a'); ?> 

<html> 
<head><title><?=$date?></title></head> 
<body> 

<?php  
    $account = new billing(); 
    $ftresult = $account->purge(); 
    new dBug($ftresult);   
    echo "successfully wrote"; 
?> 
</body> 
<? 
    $filename = "purge_report_" . date('y.m.d_\a\t_g_i_a') . ".html"; 
    $loc = $reportRoot . 'purge_reports/'; 
    $f = $loc . $filename; 

    $fp = @fopen($f, 'w'); 
    @fwrite($fp, ob_get_contents()); 
    @fclose($fp); 

    ob_end_flush(); 
?> 

ответ

7

global - ключевое слово, которое должно использоваться само по себе. Он не должен сочетаться с назначением. Так, нарезать его:

global $x; 
$x = 42; 

Кроме того, как Zenham упоминает, global используется внутри функций, чтобы получить доступ к переменным во внешней области видимости. Поэтому использование global, как представлено, мало смысла.

Еще один совет (хотя это не будет реально помочь вам с синтаксическими ошибками): добавьте следующую строку в верхней части основного файла, чтобы помочь отладки (documentation):

error_reporting(E_ALL); 
2

глобальный ключевое слово используется внутри функций, чтобы объявить, что они будут использовать глобально определенную переменную, а не определять ее. Просто удалите слово глобальный, и если вам нужны эти значения в функциях, добавьте:

global $a; 

... для начала к функции.

2

См here. global - это модификатор, который означает, что переменная поступает из глобальной области. Это должно быть просто

<? 
ob_start(); 

$siteRoot  =  '/httpdocs/'; 
$reportRoot  =  '/reports/'; 

и в функциях, которые используют их (но у вас нет каких-либо на этой странице)

function f() { 
    global $siteRoot, $reportRoot; 
    ... 
} 
0

Вы должны использовать глобальный без присвоения, только переменный.

Как вы не функции, нет необходимости глобального ключевого слова на всех:

$siteRoot  =  '/httpdocs/'; 
$reportRoot  =  '/reports/'; 

Если вам нужны переменные в функции только добавить:

global $siteRoot; 
global $reportRoot