Удалите кавычки из именованных переменных среды в сценариях Windows

Предупреждение: невозможно изменить информацию заголовка - уже отправленные заголовки

Случается, когда ваш скрипт пытается отправить HTTP-клиенту клиенту, но он уже был выведен ранее, что привело к тому, что заголовки уже отправлены на клиент.

Это E_WARNING , и он не остановит сценарий.

Типичным примером может быть файл шаблона, подобный этому:


    
    My Page

...

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

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

Часто пропускаемый вывод - это новые строки после закрытия PHP ?>. Считается стандартной практикой опускать ?>, когда это последняя вещь в файле. Аналогичным образом, еще одной распространенной причиной этого предупреждения является то, что перед открытием перед ним появляется пустое пространство, строка или невидимый символ, в результате чего веб-сервер отправляет заголовки и пробел / новую строку, таким образом, когда PHP начинает синтаксический анализ, он не сможет для отправки любого заголовка.

Если в вашем файле содержится более одного кодового блока , у вас не должно быть пробелов между ними. (Примечание: у вас может быть несколько блоков, если у вас есть код, который был автоматически сконструирован)

Также убедитесь, что в вашем коде не указаны знаки байтового заказа, например, когда кодировка скрипта является UTF -8 с BOM.

Вопросы, относящиеся

54
задан Thomas Weller 7 September 2015 в 07:15
поделиться

4 ответа

Это не ограничение переменной среды, а скорее командный процессор.

Включают все присвоение в кавычки:

set "myvar=http://example.com?foo=1&bar="

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

можно отозваться эхом, это путем включения var называет в кавычках:

echo "%myvar%"

Или лучше, просто используйте команду набора для просмотра содержания:

set myvar
32
ответ дан zdan 7 November 2019 в 08:01
поделиться

эхо %myvar: "= %

37
ответ дан 7 November 2019 в 08:01
поделиться

Я думаю, что это должно сделать это:

for /f "tokens=*" %i in (%myvar%) do set %myvar%=%~i

, Но Вам не нужно, это,

set myvar="http://example.com?foo=1&bar="
start "" %myvar%

будет работать также, просто необходимо предоставить заголовок к команде запуска.

-1
ответ дан wimh 7 November 2019 в 08:01
поделиться

Используйте отложенное раскрытие переменной среды и используйте! Var: ~ 1, -1! чтобы удалить кавычки:

@echo off
setlocal enabledelayedexpansion
set myvar="http://example.com?foo=1&bar="
set myvarWithoutQuotes=!myvar:~1,-1!
echo !myvarWithoutQuotes!
2
ответ дан 7 November 2019 в 08:01
поделиться
Другие вопросы по тегам:

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