6

さて、私のPHPは、控えめに言っても恐ろしいものです。私はアプリケーションを継承し、7年以上前にそれを書いた誰かからそのアプリケーションのエラーを修正する必要があります。ページを実行しても戻り値がないため、ログをチェックしてエラーを確認しました。次のように表示されます。

PHP解析エラー:構文エラー、予期しない'='、予期する'、'、または';' 4行目の/httpdocs/cron123/purge.phpにあります

コードは次のとおりです。

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

4 に答える 4

10

global単独で使用する必要があるキーワードです。割り当てと組み合わせてはなりません。だから、それを切り刻む:

global $x;
$x = 42;

また、Zenhamが言及しているように、global関数の内部では、外部スコープの変数にアクセスするために使用されます。したがって、global提示されているとおりに使用してもほとんど意味がありません。

もう1つのヒント(構文エラーの場合は実際には役立ちませんが):デバッグに役立つように、メインファイルの先頭に次の行を追加します(ドキュメント)。

error_reporting(E_ALL);
于 2009-07-17T22:39:09.077 に答える
4

globalキーワードは、関数内で使用され、変数を定義するのではなく、グローバルに定義された変数を使用することを宣言します。globalという単語を削除し、関数でこれらの値が必要な場合は、次を追加します。

global $a;

...関数の開始まで。

于 2009-07-17T22:37:22.997 に答える
2

ここを参照してください。global変数がグローバルスコープからのものであることを意味する修飾子です。それはただあるべきです

<?
ob_start();

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

そしてそれらを使用する関数で(しかしあなたはこのページに何も持っていません)

function f() {
  global $siteRoot, $reportRoot;
  ...
}
于 2009-07-17T22:41:49.057 に答える
0

割り当てなしでグローバルを使用する必要があります。変数のみを使用してください。

機能しないため、globalキーワードはまったく必要ありません。

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

関数に変数が必要な場合は、次を追加するだけです。

global $siteRoot;
global $reportRoot
于 2009-07-17T22:47:26.953 に答える