繁体   English   中英

为什么DOCUMENT_ROOT与远程服务器上的realpath('。')不同

[英]Why DOCUMENT_ROOT is different than realpath('.') on remote server

echo realpath('.').'<br>';
echo dirname(__FILE__).'<br>';
echo realpath(dirname(__FILE__)).'<br>';
echo $_SERVER[PHP_SELF].'<br>'; 
echo getcwd();

我总是

/services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public

但在phpinfo中,DOCUMENT_ROOT是

/services/webpages/l/i/mydomain.com/public

因此,我在与Zend Framework一起使用.htaccess时遇到了困难。

在本地,我可以使其正常运行。 但是在提供者主机上,我还无法掌握魔术。

EDT:我放入$_SERVER['DOCUMENT_ROOT'] = realpath($_SERVER['DOCUMENT_ROOT']); 在索引文件上,但是得到了。

致命错误:消息为'parse_ini_file(/services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public/v0.2b/application/configs/appkeys.ini)的未捕获异常'Zend_Config_Exception' [function.parse-ini-file]:无法打开流:无此类文件或目录parse_ini_file(/services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public/v0.2b /application/configs/appkeys.ini)[function.parse-ini-file]:无法打开流:/services2/webpages/util/i/g/gg8375620.provider.com.br/中没有此类文件或目录mydomain.com/public/v0.2b/library/Zend/Config/Ini.php:181堆栈跟踪:#0 /services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public /v0.2b/library/Zend/Config/Ini.php(201):Zend_Config_Ini-> _ parseIniFile('/ services2 / webp ...')#1 /services2/webpages/util/i/g/gg8375620.provider。 com.br/mydomain.com/public/v0.2b/library/Zend/Config/Ini.php(125):/services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain中的Zend_Config_。 COM /公/ v0.2b /溴化锂 第181行的ary / Zend / Config / Ini.php

EDT:多数民众赞成在其中之一:

$appkeys = new Zend_Config_Ini(APPLICATION_PATH . '/configs/appkeys.ini');

和APPLICATION_PATH由定义

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

尝试这个:

$_SERVER['DOCUMENT_ROOT'] = realpath($_SERVER['DOCUMENT_ROOT']);
echo $_SERVER['DOCUMENT_ROOT'] . "\n";

并阅读

可能是您DOCUMENT_ROOT中的某些目录实际上是与其他目录的符号链接 -引用文档

realpath()扩展所有符号链接,并在输入路径中解析对“ /./”、“/../”和其他“ /”字符的引用,并返回规范化的绝对​​路径名。

因此,例如,如果/services/webpages/l是目录,而/services/webpages/l/i是指向/services2/webpages/util/i/g/gg8375620.provider.com.br的符号链接,/ /services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public / /services/webpages/l/i/mydomain.com/public /services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public / /services/webpages/l/i/mydomain.com/public /services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public / /services/webpages/l/i/mydomain.com/public /services2/webpages/util/i/g/gg8375620.provider.com.br/mydomain.com/public/services/webpages/l/i/mydomain.com/public会将您带到同一目录,但是realpath()将始终返回前者。

/services
 + webpages
 | - util
 |   - i
 |     - g 
 |       - gg8375620.provider.com.br
 |         - mydomain.com
 |           - public
 + l
   - i -> ../webpages/util/i/g/gg8375620.provider.com.br/

document_root来自您的Web服务器配置文件,这就是为什么它与realpath函数不同的原因。

回声realpath(dirname( FILE ));

这应该会有所帮助。 在此链接http://www.tech99.us/finding-absolute-path-in-php/中,您可以找到使用这些功能的详细信息。 上一行中使用的每个函数都可以与php4和php5一起使用。

好吧,DOCUMENT_ROOT环境变量只是设置为错误的值。
如果您无法控制此服务器,则无法自己对其进行修复。
要求支持人员进行修复或找到避免使用此变量的方法

似乎是ZF问题,我认为很容易解决。
我从未使用过该框架,但可以肯定它具有单个入口点或一些配置文件。
因此,您可以通过设置以下内容轻松伪造DOCUMENT ROOT:

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

其中“ /../”表示从此类入口点到实际文档根目录的相对路径

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM