2009-07-17 9 views
3

Ok, donc mon PHP est, pour dire le moins, horrible. J'ai hérité d'une application et je dois corriger les erreurs de quelqu'un qui l'a écrit il y a plus de 7 ans. Quand je lance la page, il n'y a pas de retour, donc je vérifié les journaux pour voir l'erreur et voici ce que je reçois:Erreur de syntaxe PHP dans la configuration de la variable globale

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

Voici le code:

<? 
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(); 
?> 

Répondre

7

global est un mot clé qui doit être utilisé seul. Il ne doit pas être combiné avec une cession. Alors, hacher:

global $x; 
$x = 42; 

En outre, comme Zenham mentions, global est utilisé dans les fonctions, pour accéder aux variables dans un champ extérieur. Donc, l'utilisation de global telle qu'elle est présentée n'a pas beaucoup de sens.

Une autre astuce (bien que ce ne sera pas vraiment vous aider avec des erreurs de syntaxe): ajoutez la ligne suivante au début du fichier principal, pour aider à corriger (documentation):

error_reporting(E_ALL); 
2

Le global Le mot-clé est utilisé à l'intérieur des fonctions pour déclarer qu'elles utiliseront une variable définie globalement, et non pour en définir une. Il suffit de supprimer le mot global, et si vous avez besoin de ces valeurs dans les fonctions, ajouter:

global $a; 

... au début de la fonction.

2

Voir here. global est un modificateur qui signifie que la variable provient de la portée globale. Il devrait juste être

<? 
ob_start(); 

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

et dans les fonctions qui les utilisent (mais vous ne pas dans cette page)

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

Vous devez utiliser globale sans affectation, seule une variable.

que vous ne fonctionne, il n'y a pas besoin pour le mot-clé global du tout:

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

Si vous avez besoin des variables dans une fonction il suffit d'ajouter:

global $siteRoot; 
global $reportRoot 
Questions connexes