Как исправить проблему невидимого пространства в PHP?

В результате такие функции, как session_start и setcookie не могут успешно работать, сообщая:

Невозможно изменить информацию заголовка – заголовки, уже отправленные

Но целевой файл выглядит так:

 1 <?php 2 session_start(); 

Как это исправить?

отливок

Я обнаружил, что файлы utf-8 становятся utf-8 + BOM после загрузки на сервер, поэтому я временно решил проблему, сохранив ее как utf-8.

НО , есть много других файлов с той же проблемой, как я могу решить проблему?

Solutions Collecting From Web of "Как исправить проблему невидимого пространства в PHP?"

Пахнет проблемой спецификации, поскольку некоторые редакторы ее не показывают. Попробуйте открыть файл с помощью Notepad ++, Emacs или любого другого редактора, который показывает его. Если у вас есть какой-то странный характер перед <, вы получили преступника.

Если ваш файл закодирован в Юникоде, в начале файла добавляется двухбайтная спецификация (байтовый порядок). Эта спецификация не отображается большинством редакторов. Например, в Notepad ++ вы можете изменить кодировку на UTF-8 без спецификации или просто совсем другую кодировку, такую ​​как ANSI.

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

Есть только один способ исправить это: найти место! Это где-то, это всегда где-то.

Чтобы исправить ошибку, попробуйте выполнить три шага в этой статье .

можете ли вы опубликовать всю программу, что вы пробовали? проверьте этот код, убедитесь, что вы добавили?> в конце

  <?php session_start(); session_register("count"); if(!isset($_SESSION)) { $_SESSION["count"]=0; echo "<p>counter initialized</p>\n"; } else { $_SESSION["count"]++; } echo "<p>The counter is now <b> $_SESSION[count]</b></p>"; echo "<p>Reload this page to increment</p>"; ?> 

Откройте файл в хорошем редакторе, например vi, и вы увидите все бессмысленные символы и пробелы.

Если вы обнаружите оскорбительный характер, и в нем присутствуют многие ваши файлы, вы, вероятно, можете использовать grep / xargs / sed, чтобы заменить его из всех файлов одновременно. Не уверен, как вы это делаете в Windows.

Что касается ответа, предполагающего, что вы оставите закрытие?> Php tag … Я видел / слышал это несколько раз, но он просто не сидит прямо со мной. Если вы собираетесь опустить закрывающий тег php из всех ваших файлов, тогда вы должны поместить комментарий в конце каждого файла, указав это, чтобы вы знали, что файл не был усечен.

// конец файла

Однако, если вы собираетесь сделать это со всеми вашими файлами, вы можете просто удалить пробел после тега?>. Это действительно не так сложно, если вы не небрежны с вашей кодировкой.

Включите буферизацию вывода в PHP, это можно сделать на уровне php.ini или в .htaccess http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering

Затем весь ваш выход будет кэшироваться в буфере, пока ваш скрипт не закончится, и он будет отправлен сразу. Это часто бывает хорошо с точки зрения производительности (так как ваш сервер отправляет меньше, больше, куски данных). В зависимости от архитектуры вашего сайта вы можете поместить флеш (); после создания HTML-заголовков.