PHP,如何设置包含路径

14

我一直在编写:

include('a.php')
include('b.php')

我想在我的脚本中添加一些内容来使用函数 a()b(),但这样会变得非常繁琐。有没有一种方法可以设置一个目录的路径,并且让脚本能够访问那里的多个文件?

  1. 我在我的脚本中尝试了这个:

    set_include_path('.;C:\xampp\htdocs\myfunctionfolder');
    
  2. 我设置了一个环境变量PATH,将其设置为旧版本。

  3. 我还修改了php.ini文件以包含以下内容:

  4. include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder"
    
    如果我有许多文件,如何在不逐个包含每个文件的情况下访问这些文件呢?在命令提示符中设置环境变量确实有效。我需要做些什么才能使在目录下通过 .php 文件集体访问可行?
7个回答

14

通常的做法是创建一个名为"common.php"或"includes.php"的文件,其中包含include / include_once调用(为简单起见)。例如:

  • root
  • [lib]
    • a.php
    • b.php
    • includes.php
  • index.php

然后,includes.php 包含以下内容:

<?php
  include_once('a.php');
  include_once('b.php');
?>

在任何脚本中,只需要包含includes.php文件即可。

但是,回答您最初的问题,每次调用只能包含一个文件。您可以使用类似于opendirreaddir的方法迭代指定目录中的所有文件并将它们包含进来(就像自动化一样),或者根据您创建的文件编写每个要包含的 include 语句。

此外,设置包含路径只是在进行include调用时设置要查找的目录。这不是一个应该自动加载文件的目录(这是我从您的帖子中得到的印象)。


哼!!现在我完全明白了。谢谢你向我展示通用的方法。我还在努力弄清PHP中的“传统”是什么。 - laketuna
1
如果这是你自己的个人项目,“传统”的方式就是任何能够为你工作的方式。一旦你开始使用查找功能或写下带有注释的文件名,你就会失去“传统”的视野。;-) - Brad Christie
如果我包含“include.php”文件,它会加载一堆.php文件(比如20个50行的函数),但我可能并不需要这些函数,那么在运行包含这些函数的脚本时,是否会产生某种不必要的负载?我在想是否应该自定义我的include.php文件,还是只创建一个包含所有函数的文件。 - laketuna
@user:视情况而定。或许可以创建一个名为“common.php”的文件,其中包含了90%页面使用的函数,再创建一个名为“user_includes.php”的文件,其中只包含成员页面使用的用户函数等。去下载phpBB并查看他们如何设置结构,这应该可以给你一些很好的启示来继续操作。 - Brad Christie

9
设置include_path不会包含该目录中的每个文件,它只会将该目录添加到PHP在包含文件时搜索的列表中。

指定require()、include()、fopen()、file()、readfile()和file_get_contents()函数查找文件的目录列表。

源代码

这将简化在深层结构或完全不同的文件系统部分中包含文件的过程。

include('/var/somewhere/else/foo.php');

/var/somewhere/else/ 添加到 php.ini 的 include_path 中,可能会变成:

include('foo.php');

此外,正如其他人指出的那样,有一些常见的做法,但你可以了解OOPHP和自动加载类。据我所知,这对于函数是不起作用的。
许多编写面向对象应用程序的开发人员为每个类定义创建一个PHP源文件。其中最大的烦恼之一是在每个脚本开头编写一长串所需的包含(每个类都需要一个)。
在PHP 5中,这已经不再必要。您可以定义一个__autoload函数,在尝试使用尚未定义的类/接口时自动调用该函数。通过调用此函数,脚本引擎会在PHP失败并出现错误之前最后尝试加载类。

3

PHP的解析器非常高效 - 与加载大量单独文件相比,加载一个(或几个)更大的文件会浪费更多时间。但是,如果您坚持保持这种分隔状态,您可以创建元包含文件来加载一组单独的文件,因此您只需包括一个单一的元包含文件,它就会为您完成其余事项:

meta.php:

include('a.php');
include('p.php');
...
include('z.php');

然后你只需要执行以下操作:

<?php

include('meta.php');

在你的脚本中,你已经把所有的单个文件都加载好了。

没有人考虑到在某些情况下,必须在不同的部分加载“包含”…例如,如果您要包含页面布局的头、侧边栏和页脚,那么您就不能连续地包含它们。 - andreszs

3

在我的大多数项目中,我都有这样一个函数:

function appendToIncludePath($path)
{
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . BASE_DIR . $path . DIRECTORY_SEPARATOR);
}

3

请看这个问题:

如何包含目录中的所有PHP文件?

此外,就最佳实践而言,如果多个函数相关,则可以将它们放在同一个文件中,并建议使用更具描述性的函数和文件名称。例如,如果您的a()和b()函数都与验证相关,请将文件命名为validation.php,并将两个函数放在其中,并尝试将它们重命名为与其所做的内容相关的名称。这将使您在开始积累大量函数时记得它们所做的事情;)


1
include __DIR__ . '/../folder1/folder2/folder3/Target.php';
include __DIR__ . '/../folder1/folder2/Target.php';

它帮助您进入任何路径。

在Ubuntu上对我有效,使用PATH_SEPARATOR的方法没有起作用。 - PokatilovArt

0

下载最新的PHP压缩包并将其解压到C驱动器,然后下载Composer并安装它,在安装过程中会要求输入PHP路径,只需选择已提取的PHP路径即可。

按照以下步骤进行操作。

  1. 进入“计算机”。

  2. 选择“高级系统设置”。

  3. 从系统属性中选择“环境变量”。
  4. 在“环境变量”中为用户变量添加“Path”。
  5. 在“环境变量”中添加系统变量中的“Path”。
  6. 点击确定。
  7. 重新启动电脑。
  8. Win + R键输入“cmd”。
  9. 输入命令“php -v”。
  10. 完成,您可以开始使用了。

PHP http://php.net/downloads.php

Composer https://getcomposer.org/download/

Composer https://getcomposer.org/download/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接