Küresel Değişken Ayar PHP sözdizimi hatası

5 Cevap php

Tamam, bu yüzden benim PHP az, korkunç söylemek olduğunu. Ben bir uygulama miras ve 7 yıldan önce yazmış birinden bu hataları düzeltmek için yaşıyorum. Ben sayfayı çalıştırdığınızda, hiçbir geri dönüş, yani hatayı görmek için günlükleri kontrol ve burada ben ne alıyorum:

PHP Ayrıştırma hatası: sözdizimi hatası, ',' bekliyor, '=' beklenmeyen veya ';' in / httpdocs/cron123/purge.php 4.satıra

İşte kod:

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

5 Cevap

global kendisi tarafından kullanılması gereken bir anahtar kelimedir. Bu bir atama ile kombine edilmemelidir. Yani, doğrayın:

global $x;
$x = 42;

Zenham bahseder gibi Ayrıca, global dış kapsam değişkenleri erişmek için, fonksiyonların içinde kullanılır. Bu yüzden sunulmuştur gibi global kullanımı biraz mantıklı.

Başka bir ipucu (gerçekten yazım hataları ile size yardımcı olmayacaktır olsa): hata ayıklama yardımcı olmak için, ana dosyasının üstüne aşağıdaki satırı ekleyin (documentation):

error_reporting(E_ALL);

Bkz here. global değişken küresel kapsamından geliyor demektir bir değiştirici olduğunu. Sadece olmalı

<?
ob_start();

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

ve bunları kullanmak (ama bu sayfadaki herhangi yok) fonksiyonlarında

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

global anahtar kelime onlar bir tanımlamak için değil, küresel tanımlı değişken kullanmak edeceğini beyan fonksiyonların içinde kullanılır. Sadece kelime global kaldırmak ve işlevleri bu değerleri gerekiyorsa, ekleyin:

global $a;

... Işlevine başlangıç.

Sen, atama olmadan yalnızca bir değişken küresel kullanmanız gerekir.

Değil işlevleri yapmak gibi, tüm küresel anahtar kelime için gerek yoktur:

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

Eğer ihtiyacınız varsa, bir işlevi değişkenler sadece ekleyin:

global $siteRoot;
global $reportRoot

Ben yanlış başka bir şey göremiyorum ben sadece, soruna hat üzerindeki tüm gereksiz beyaz boşluk kaldırarak önerebilirsiniz.