我的网站托管在共享主机上。我正在尝试建立一个新的开发环境(当我说新的时候,我的意思是说它看起来不像我以前的任何开发环境,范围从像单个Notepad ++之类的东西到“简单”的服务器解决方案,如WAMP / XAMPP……但是我是C#/。NET开发人员,因此php是我在家里随便使用的东西……)
到目前为止,我的新环境有:
我的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的关系如何。
答案 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>服务器)中设置了一个“服务器”,但这似乎无效且无关,您可能不需要它,不确定。
编辑:我只是意识到这实际上只是部分解决方法,因为如果使用此功能,调试似乎无效,不会触发断点。