【问题标题】:How to get php include_path to work on a custom directory '/var/custom_directory'?如何让 php include_path 在自定义目录“/var/custom_directory”上工作?
【发布时间】:2015-12-04 20:50:19
【问题描述】:

我认为 php 包含路径是一个非常简单的概念。我已经做过很多次了,但现在很难让它工作。

我正在运行一个

Azure 上的centos 7.1 服务器与 Apache/2.4.6 PHP/5.4.16

当我修改php.ini 中的include_path 时。重启apache后的错误显示

打开所需的“xfile”失败(include_path='.:/var/custom_directory')...

包含路径采用正确的文件格式。

我可能有所有权问题。

我可以将我的文件放在默认的usr/share/php 目录和页面"include" 中。但是,当我尝试将自己的目录放在 /var 中时,他们没有。

我以前做过这个,所以我不知道为什么它现在不起作用。 我已经 chowned 和 chmod 这些目录及其内容到死。甚至模仿工作目录的服务器。将所有权切换到apache 并授予完全授权访问权限,只是试图让它从我的/var/www/html/index.php 中查看文件

我错过了什么吗? 我需要在phphttp.conf 文件中启用或授予访问权限或修改某些内容吗?

更多信息: 这是系统/etc/php.ini中唯一包含的php.ini文件

包含路径的目的是在防火墙后面提供编码/用户文件。

我不认为这很重要,但我的虚拟机在 Azure 中。

这样写

include('/var/custom_directory/file.php'); 

也不行。为什么?

【问题讨论】:

  • 什么是include_path?
  • 包含路径是 php.ini 文件中的配置设置。例如在我的 centos 7.1 上,它位于 /etc/php.ini
  • 你需要它做什么?
  • 将文件放在 /www 后面的安全位置
  • @Demodave,我的意思是,你的 include_path 设置是什么?

标签: php apache azure include-path azure-virtual-machine


【解决方案1】:

我有一个快速测试来测试您的要求。

(环境:CentOs 7.1、Apache/2.4.6 和 PHP/5.4.16。)

我在“/var/www/”文件夹中除了“html”创建了一个“includes”文件夹,显示如下: p>

然后我在 php.ini 中设置include_path = ".:/var/www/includes"

在包含文件夹中,我使用简单的代码放置了一个名为 phpinfo.class.php 的测试类文件:

class phpInfo{
         public function echoinfo(){
                phpinfo(); 
         }
}

在 html 文件夹中,有一个测试 PHP 文件,代码很简单:

require('phpinfo.class.php');
phpInfo::echoinfo();  

对我来说效果很好。

所以你可以仔细检查你的文件和路径。


更新

我将includes文件夹下的/var/移动到了'html'旁边,并修改了php .ini,对我来说仍然可以正常工作,并且include_path的设置将显示在php运行环境中,我们可以检查配置。

【讨论】:

  • 你的 include_path 是什么样子的,它是在 azure 上吗?
  • 如上所示,我的 include_path 是“.:/var/includes”。我的环境是在 Azure 上构建的 centOS 7.1 VM。
  • 谁拥有您的目录,他们的权限是什么?
  • 您按照什么说明安装灯组可能是我做错了。
  • sudo yum install httpd, sudo yum install php
【解决方案2】:

include_path ini 设置设置路径,它不会添加到它,所以如果你改变它,你很可能意味着添加一个额外的路径,例如:

include_path = ".:/usr/share/php:/var/custom_directory"

这可确保您自己的custom_directory 和标准/usr/share/php 目录都在路径中。

(注意:在 Linux 上,路径分隔符是冒号 (:),在 Windows 上是分号 (;))

然而

您可能不想乱用 php.ini 设置,因为这会影响所有 php 文件。如果您将另一个站点放在您的服务器上,该站点试图在您的自定义目录中包含一个同名的文件,那么您最终会陷入混乱。

我建议你要么限定你的包含:

include('../custom_directory/file.php');
include('/var/custom_directory/file.php');
include(SOURCE_DIR . 'file.php');

或者在脚本开头使用set_include_path

$path = '/var/custom_directory';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);

【讨论】:

  • 我知道这一点,因为这不是问题。
猜你喜欢
  • 2011-02-17
  • 2014-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多