2

重複の可能性:
PHPの「警告:ヘッダーはすでに送信されています」

私のbamfg_functions.phpコード:

<?php
error_reporting(E_ALL & ~E_NOTICE);
define('THIS_SCRIPT', 'test');
define('CSRF_PROTECTION', true); 
require_once('global.php');

function bamfg_navigation()
{
global $vbulletin;

if ($vbulletin->userinfo['userid']) {
$navigation .= "<center>- Browse Vehicles - <a href='./bamfg.php'>Search  Vehicles</a>     -<br>- <a href='./bamfg_vehicle.php'>ADD / EDIT Vehicles</a><br><br>      </center>";
}
else {
$navigation .= "<center>- Browse Vehicles - <a href='./bamfg.php'>Search Vehicles</a>  -<br><br></center>";
}
return $navigation;
}
?>

これが、bamfg_functions.phpをbamfg_vehicle.phpファイルに含める方法です。

require('bamfg_functions.php');
bamfg_navigation = bamfg_navigation();
global $bamfg_navigation;

これは、bamfg_vehicle.php内の多くのdo==ステートメントの1つです。

if($_REQUEST['do'] == 'add_comment') {
$userid = $vbulletin->userinfo['userid'];
$username = $vbulletin->userinfo['username'];
$vbulletin->input->clean_gpc('r', 'id', TYPE_INT);
$vehicle_id = $vbulletin->GPC['id'];
$owner_userid = $_GET["owner_userid"];

// ** THIS GETS THE "POSTED" INFORMATION FROM THE PAGE AND CONVERTS TO VARIABLE - CLEANS INPUT
$vbulletin->input->clean_array_gpc('p', array(
'comment' => TYPE_NOHTML,
));  

$comment = $vbulletin->GPC['comment'];


// MAKES SURE THE COMMENT ISN'T BLANK
if (strlen($comment) == 0){
Header( "Location: $website_url/bamfg_vehicle.php?do=view_vehicle&    id=$vehicle_id" );
}

else {
$sql = "INSERT INTO ". TABLE_PREFIX ."BAMFG_comment (

  comment_id, 
  vehicle_id, 
  userid,
  owner_userid, 
  username,
  comment) VALUES (

  '". $comment_id ."',
  '". $vehicle_id ."',
  '". $userid ."',
  '". $owner_userid ."',
  '". $username ."',
  '". $comment ."')";

$db->query_write($sql);
Header( "Location: $website_url/bamfg_vehicle.php?do=view_vehicle&id=$vehicle_id" );
}}

私の問題は、bamfg_functions.phpファイルを「require」すると、すべてのヘッダーリダイレクトが壊れることです。また、require_once(bamfg_functions.php);を試しました。そして、単にinclude(bamfg_functions.php); 同じ結果になります。

ファイルを呼び出す行をコメントアウトするとすぐに、ヘッダーリダイレクトが機能し、それが私を狂わせます。

ヘッダーリダイレクトは、呼び出される前にブラウザーにデータが出力されていない場合にのみ機能することに気付きましたが、どこにも表示されませんか?

どんなアドバイスも素晴らしいでしょう、ありがとう。

4

1 に答える 1

0

有効error_reporting(E_ALL);にして、それが何を示しているかを確認します。末尾?>のフォームを削除しますbamfg_functions.php-それで問題が解決した場合は、の後に空白があります?>。それでも問題が発生する場合は、出力バッファリングを有効にすることで、問題を回避できます(ただし、問題を特定し、回避策でさえ問題を「解決」する必要があります)。ob_start();スクリプトの最初の行として追加するだけです。

あなたもglobal間違って使用しているようです。global変数グローバルを宣言することではありません。つまり、メソッド/クラス/関数スコープでグローバル変数を表示することです。したがって、たとえば、このコードはあまり意味がありません。

$a = "foo";
global $a;

function b() {
  echo $a;
}

これは「より良い」ですが(使用globalは常に悪いので引用されています):

$a = "foo";

function b() {
  global $a;
  echo $a;
}

ただし、必要であると確信している場合でもglobal(つまり、コードをあまりやり直すことができない場合)、代わりにglobalアクセスするのではなく、使用する必要があります$_GLOBALS[]。だからこれは悪いことの最高です:

$a = "foo";

function b() {
  echo $_GLOBALS['a'];
}
于 2012-11-17T18:10:20.093 に答える