filter_input (INPUT_SERVER, 'DOCUMENT_ROOT'); возвращает ноль - PullRequest
0 голосов
/ 20 марта 2019

Мой сайт размещен на общем хосте.Я пытаюсь настроить новую среду разработки (когда я говорю новую, я имею в виду, что она не похожа ни на одну из моих предыдущих сред разработки, которая варьируется от таких вещей, как один Notepad ++ до «простых» серверных решений, таких как WAMP / XAMPP…пока я на C # / .NET, поэтому php - это нечто, чем я обычно пользуюсь дома ...)

Моя новая среда до сих пор имеет:

  • Windows 10 (потому чтоэто то, что я использую дома)
  • PhpStorm.
  • Php 7.3.3 VC15 x64 Thread Safe разархивирован где-то на моем жестком диске.
  • php.exe упоминается как переводчик вPhpStorm
  • php_xdebug-2.7.0-7.3-vc15-x86_64.dll Отладка набора в php.ini

В моем php-коде у меня есть

filter_input(INPUT_SERVER,'DOCUMENT_ROOT');

Возвращает ноль (или что-то пустое).

Когда я вставляю его в терминал, он говорит:

'filter_input' не распознается как внутренняя или внешняя команда,работоспособная программа или командный файл.

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

Что я должен изменить, чтобы он возвращал то же значение, что и в моей онлайн-среде?

Я пробовал решения из PHP filter_input (INPUT_SERVER, 'REQUEST_METHOD') возвращает ноль? , включая добавление variables_order = "GPCSE" в php.ini, но это не решило проблему.

Запись filter_var(getenv('DOCUMENT_ROOT')); вместо этого, но этоне решил проблему ...

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


Дальнейшее тестирование 1

Рабочий код

var_dump(realpath(dirname(__FILE__).'/../'));

if($_SERVER['DOCUMENT_ROOT'] === '')
    $_SERVER['DOCUMENT_ROOT'] = realpath(dirname(__FILE__).'/../');

var_dump($_SERVER['DOCUMENT_ROOT']);

var_dump(filter_input(INPUT_SERVER, 'DOCUMENT_ROOT'));

1-й var_dump показывает правильное значение.2-й var_dump показывает правильное значение.3-я переменная var_dump показывает строку (0) "".Я не совсем уверен, как связаны $ _SERVER и INPUT_SERVER.

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Будет показано, может ли ваш сервер анализировать правильную информацию из INPUT_SERVER и INPUT_ENV. Если первая переменная var_dump не отображает переменную "DOCUMENT_ROOT", то функция filter_input также не будет отображаться.

<?php
var_dump($_SERVER);
foreach ( array_keys($_SERVER) as $b ) {
    var_dump($b, filter_input(INPUT_SERVER, $b));
}
echo '<hr>';
var_dump($_ENV);
foreach ( array_keys($_ENV) as $b ) {
    var_dump($b, filter_input(INPUT_ENV, $b));
}
?>
0 голосов
/ 21 марта 2019

Вот каким-то образом я нашел:

Очевидно, что когда вы нажимаете кнопку отладки, PhpStorm не запускает сценарии PHP, как если бы к ним обращались через сервер, поэтому некоторые значения, такие как DOCUMENT_ROOT, не заполняются.

Однако при доступе к http://localhost:63342/[path]/[filename] DOCUMENT_ROOT действительно содержит ожидаемое значение.

Примечание: использование localhost (или других имен) может потребовать редактирования файла \ Windows \ System32 \ Drivers \ Etc \ hosts.

Я также установил «сервер» в PhpStorm (Настройки> Языки и фреймворки> PHP> Серверы) на localhost: 80, но этот кажется неэффективным и не связанным, вероятно, он вам не нужен, не уверен.

РЕДАКТИРОВАТЬ: я только что понял, что это на самом деле только частично, потому что если я использую это, отладка кажется неэффективным, точки останова не срабатывают.

...