Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何诱使PHP认为我的绝对路径会有所不同?_Php_Function_Webserver - Fatal编程技术网

如何诱使PHP认为我的绝对路径会有所不同?

如何诱使PHP认为我的绝对路径会有所不同?,php,function,webserver,Php,Function,Webserver,我的托管服务将我在php中的绝对路径设置为“/customers/12345/BASEPATHOFMYWEBSPACE”,因此,我必须输入“/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER”才能访问我的文件夹,但在html中“/MYFOLDER”完全有效 由于我的网站的结构,这对我来说是一个巨大的问题 有没有一种方法可以让我想出一个函数,然后我会在我的所有php文件中包含该函数,使php接受“/MYFOLDER”作为MYFOLDER的绝对路径 根据是否

我的托管服务将我在php中的绝对路径设置为“/customers/12345/BASEPATHOFMYWEBSPACE”,因此,我必须输入“/customers/12345/BASEPATHOFMYWEBSPACE/MYFOLDER”才能访问我的文件夹,但在html中“/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没有给出他们使用的需要绝对路径的功能的任何细节。我想我应该提一下这个警告