如何欺骗PHP思考我的绝对路径会有所不同?

时间:2012-05-02 15:01:08

标签: php function webserver

我的托管服务将我在php中的绝对路径设置为“/ customers / 12345 / BASEPATHOFMYWEBSPACE”所以,我必须输入“/ customers / 12345 / BASEPATHOFMYWEBSPACE / MYFOLDER”来获取MYFOLDER,但是在html“/ MYFOLDER”中的工作原理。

由于我网站的结构方式,这对我来说是一个很大的问题......

有没有办法我可以提出一个函数,然后我会包含在我的所有php文件中,这会欺骗php接受“/ MYFOLDER”作为MYFOLDER的绝对路径?

2 个答案:

答案 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"