如何诱使PHP认为我的绝对路径会有所不同?
我的托管服务将我在php中的绝对路径设置为“/customers/12345/BASEPATHOFMYWEBSPACE”,因此,我必须输入“/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER”才能访问我的文件夹,但在html中“/MYFOLDER”完全有效 由于我的网站的结构,这对我来说是一个巨大的问题如何诱使PHP认为我的绝对路径会有所不同?,php,function,webserver,Php,Function,Webserver,我的托管服务将我在php中的绝对路径设置为“/customers/12345/BASEPATHOFMYWEBSPACE”,因此,我必须输入“/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER”才能访问我的文件夹,但在html中“/MYFOLDER”完全有效 由于我的网站的结构,这对我来说是一个巨大的问题 有没有一种方法可以让我想出一个函数,然后我会在我的所有php文件中包含该函数,使php接受“/MYFOLDER”作为MYFOLDER的绝对路径 根据是否
有没有一种方法可以让我想出一个函数,然后我会在我的所有php文件中包含该函数,使php接受“/MYFOLDER”作为MYFOLDER的绝对路径 根据是否启用了php
安全模式
,您可以使用ini\u set()
或set\u include\u path()
来更改include\u路径
这将允许您在此之后使用相对路径。例如,在站点的配置(或所有页面包含的其他文件)中,您可以执行以下操作:
<?php
// This will allow all files to have relative path access to the
// "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER" directory.
set_include_path(get_include_path() . PATH_SEPARATOR . "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER");
// Eg: now you can write require('myfile.php') and
// it will search inside of "/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER"
这对我来说是个大问题
但事实就是如此——这并不是特定于您的主机提供商的。如果您不能理解URL路径和文件系统路径之间的区别,那么您将遇到很多问题
Web服务器可能已经知道了这一区别——请查看phpinfo()的输出
如果你有自己的vhost,我想你会发现“/customers/12345/BASEPATHOFMYWEBSPACE”=$\u SERVER[“DOCUMENT\u ROOT”]
因此,如果要将URL映射到文件系统路径:
function to_file_path($url)
{
$parts=parse_url($url);
return $_SERVER["DOCUMENT_ROOT"] . $parts['path']
}
反过来说:
function to_url_path($file)
{
$file=realname($file);
if (substr($file, 0, strlen($_SERVER["DOCUMENT_ROOT"]))
!==$_SERVER["DOCUMENT_ROOT"]) {
return false;
}
return substr($file, strlen($_SERVER["DOCUMENT_ROOT"]));
}
你听说过关于相对路径的事情吗?我不能使用相对路径,因为我的网站的工作方式ref:这是因为浏览器路径和绝对路径是完全不同的东西。最好的答案是根本不使用绝对路径,而只使用相对路径。任何其他的答案都会让那些在未来(包括你自己)尝试编写你的代码的人大惑不解set_include_path(get_include_path().path_SEPARATOR.$\u SERVER['DOCUMENT_ROOT'])代码>虽然这可以用于包含文件,但我不相信它可以用于操作文件系统上的文件。OP没有给出他们使用的需要绝对路径的功能的任何细节。我想我应该提一下这个警告