Предупреждение PHP: заголовки уже отправляются в Неизвестном [дубликат]

, чтобы пользователи не устанавливали свои собственные значения для этих свойств с помощью консоли.

Самый простой способ сделать это - просто запретить доступ к экземпляру Hero с верхнего уровня - например, обернуть все в IIFE:

(() => {
  const hero = new Hero();
  // do stuff with hero
})();

Затем все вы внутри IIFE будете номинально приватны - пользователь не сможет зайти в консоль и сослаться и изменить то, что он хочет. (Тем не менее, поскольку он является их браузером, они могут сделать это другими способами, например, с помощью пользовательского скрипта - вы не можете доверять всему, что работает на клиентской машине, чтобы это было сделано законно.) 1110] Используя аналогичный метод, полагаясь на номинальную конфиденциальность замыкания, вы можете сделать amount получателем переменной замыкания без установщика, гарантируя, что amount не будет изменяться извне (если, конечно, исходный код изменяется, и в этом случае все ставки в любом случае отключены):

const Hero = (() => {
  const privateHeroGold = new WeakMap();
  return class Hero {
    constructor() {
      privateHeroGold.set(this, 0);
    }
    get gold() {
      return privateHeroGold.get(this);
    }
    set gold(g) {
      console.log("You're not allowed to do that!");
    }
  }
})();
const hero = new Hero();
console.log(hero.gold);
hero.gold = 5;
console.log(hero.gold);

7
задан kari.patila 7 March 2009 в 17:35
поделиться

5 ответов

Выпущенный, что это была строка

ob_start("ob_gzhandler");

это вызвало предупреждение. Об этом сообщили и зафиксировали в 2001, кажется, но по некоторым причинам это продолжает возвращаться.

7
ответ дан 6 December 2019 в 19:42
поделиться

Это могло бы быть много вещей, но поскольку другие сказали, это - часто просто пространство, лежащее вокруг где-нибудь, который производится и затем a header() команда отправляется, который обычно прекрасен, но не после того, чтобы начинать передать содержание обратно (потенциально просто пространство в этом случае).

Используя ob_start() мешает выводу выйти сразу же путем буферизации его. Таким образом, это - потенциальное решение или по крайней мере способ диагностировать, куда это прибывает из того, как сказал zodeus.


Одна общая вещь, которая вызывает их, проигрывает, пробелы находятся в этом сценарии.

global.php

<?php
  $variable = 1;
  $database = 'something else';
?> <-- A space here
 <-- Or here

index.php

<?php

  require('global.php');
  $var = dosomething();
  header('Location: http://www.example.com/');

?>

Один способ зафиксировать, который должен удалить?> в конце global.php файла. Вам не нужны они, они только полезны, если Вы начинаете помещать HTML, например, после Вашего кода PHP. Таким образом, Вы имели бы:

<?php
  $variable = 1;
  $database = 'something else';

И когда Вы делаете require(), пространство не производится перед header().


Только для иллюстрирования проблем с произведенным содержанием и заголовки то, что другой общий падеж, который дает подобную ошибку. Это происходит, когда Вы забываете останавливать обработку после использования перенаправления header().

if ($notLoggedIn) {
  header('Location: http://www.example.com/login.php');
}
echo 'Welcome to my website'; // this will be outputted, 
                              // you should have an exit() 
                              // right after the header()
3
ответ дан 6 December 2019 в 19:42
поделиться

Вы проверили свои файлы на непреднамеренные BOM UTF-8?

1
ответ дан 6 December 2019 в 19:42
поделиться

Я думаю, что происходит, один из созданных в функциях php, производит что-то. Я видел это с несколькими функциями IMAP, куда они помещают просто "" (пробел), и он завинчивает вещи. Вы можете thry отслеживание его вниз использование Xdebug или отладчика Зенда, но я f, у Вас нет никакой попытки, переносящей выходную буферизацию вокруг некоторых функций, Вы думаете, может быть причина это.

ob_start();
callYourFunction();
ob_end_clean();

Сделайте эту функцию за один раз и когда ошибка уйдет, Вы будете знать, какая функция является причиной Вы проблема, затем можно или зарегистрировать отчет об ошибках или просто оставить его внутри как взлом. Но по крайней мере затем Вы знаете, какая функция является причиной проблема.

Править: Факт, который является, говорит, что Ваш вывод происходит на строке 0 средств, что это - функция уровня C выполнение вывода, не любого кода, который это было записано с помощью PHP.

2
ответ дан 6 December 2019 в 19:42
поделиться

Ошибка говорит Вам, что что-то отправило вывод, который вынудил бы заголовки быть отправленными, потому что заголовки должны быть записаны перед телом сообщения http.

Наиболее распространенной проблемой, которую я нашел, является текст в заголовках. vis:

<?php // myfile.php
  include 'header.php';
?>

и в header.php:

<?php // header.php
   ....
 ?>

Что Вы не видите, вот то, что существует пробел - или пространство или CR/LF после закрытия'?>'. Это производится, потому что в php стандарте говорится, что что-либо вне тегов PHP производится как HTML.

Решение состоит в том, чтобы удостовериться, что Вы удостоверяетесь, что стерли все после закрытия'?>'

0
ответ дан 6 December 2019 в 19:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: