filter_input(INPUT_SERVER,'DOCUMENT_ROOT');返回null

时间:2019-03-20 15:23:04

标签: php xdebug filter-input

我的网站托管在共享主机上。我正在尝试建立一个新的开发环境(当我说新的时候,我的意思是说它看起来不像我以前的任何开发环境,范围从像单个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');

它返回null(或空的东西)。

当我将其粘贴到终端时说:

  

'filter_input'不被识别为内部或外部命令,   可操作的程序或批处理文件。

好吧,也许这就是我所期望的终端类型,但是它返回null的事实是一个问题。

我应该更改什么,使其返回与在线环境相同的值?

我尝试了PHP filter_input(INPUT_SERVER, 'REQUEST_METHOD') returns null?的解决方案 包括在php.ini中添加variables_order = "GPCSE",但这并不能解决问题。

改为写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'));

第一个var_dump显示正确的值。 第二个var_dump显示正确的值。 第三个var_dump显示字符串(0)“”。 我不确定$ _SERVER和INPUT_SERVER的关系如何。

2 个答案:

答案 0 :(得分:1)

这将查看您的服务器是否可以解析来自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));
}
?>

答案 1 :(得分:0)

以某种方式我发现:

显然,当您单击调试按钮时,PhpStorm不会像通过服务器访问PHP脚本那样运行PHP脚本,因此未填充某些值,例如DOCUMENT_ROOT。

但是,访问http://localhost:63342/[path]/[filename]时,DOCUMENT_ROOT确实包含期望值。

注意:使用localhost(或其他名称)可能需要编辑\ Windows \ System32 \ Drivers \ Etc \ hosts文件。

我还在localhost:80的PhpStorm(设置>语言和框架> PHP>服务器)中设置了一个“服务器”,但这似乎无效且无关,您可能不需要它,不确定。

编辑:我只是意识到这实际上只是部分解决方法,因为如果使用此功能,调试似乎无效,不会触发断点。