0

我的托管服务将我在 php 中的绝对路径设置为“/customers/12345/BASEPATHOFMYWEBSPACE”,因此,我必须输入“/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER”才能进入 MYFOLDER,但在 html 中“/MYFOLDER”完全有效。

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

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

4

2 回答 2

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"]));
}
于 2012-05-02T15:15:08.730 回答
0

根据是否safe_mode启用了 php,您可以使用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"
于 2012-05-02T15:10:30.477 回答