我的托管服务将我在php中的绝对路径设置为“/ customers / 12345 / BASEPATHOFMYWEBSPACE”所以,我必须输入“/ customers / 12345 / BASEPATHOFMYWEBSPACE / MYFOLDER”来获取MYFOLDER,但是在html“/ MYFOLDER”中的工作原理。
由于我网站的结构方式,这对我来说是一个很大的问题......
有没有办法我可以提出一个函数,然后我会包含在我的所有php文件中,这会欺骗php接受“/ MYFOLDER”作为MYFOLDER的绝对路径?
答案 0 :(得分:1)
这对我来说是个大问题......
但这就是它的原因 - 它不是特定于您的托管服务提供商。如果你无法理解URL路径和文件系统路径之间的区别,那么你将遇到很多问题。
有可能网络服务器已经知道差异了 - 看看phpinfo()的输出。
如果你有自己的虚拟主机,我怀疑你会发现“/ customers / 12345 / BASEPATHOFMYWEBSPACE”= $ _SERVER [“DOCUMENT_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"]));
}
答案 1 :(得分:0)
根据是否启用了php safe_mode
,您可以使用ini_set()
或set_include_path()
来修改include_path。
这将允许您在此之后使用相对路径。例如,在您站点的配置中(或所有页面都包含的其他文件),您可以这样做:
<?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"