2009-07-17 52 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

hereglobal是一个修饰符,表示该变量来自全局范围。它应该只是

<? 
ob_start(); 

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

,并在其中使用它们的功能(但你没有任何在本页)

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

您必须使用全局没有分配,只有一个变量。

当你这样做不是函数,就没有必要对全球关键字都:

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

如果您需要在函数中的变量只需添加:

global $siteRoot; 
global $reportRoot