2011-07-21 44 views
9

我已经写:PHP,如何设置包含路径

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

等在我的脚本包括使用功能a()b()。它变得非常乏味。有没有办法设置一个目录的路径,并有脚本可以访问多个文件?

  1. 我在剧本试过这样:

    set_include_path('.;C:\xampp\htdocs\myfunctionfolder'); 
    
  2. 我设置环境变量PATH有在那里这位前辈。

  3. 我也是在修改php.ini中包括

    include_path = ".;\xampp\php\PEAR;\xampp\htdocs\myfunctionfolder" 
    

如果我在那里有很多文件,我该如何访问这些文件,而不必每到设有独立?设置环境变量绝对可以在命令提示符下工作。

我是否需要为.php文件做一些其他操作,以便在一个目录下共同访问?

回答

11

通常的做法是使用包含include/include_once调用(为了简单起见)的“common.php”或“includes.php”文件。例如

  • [LIB]
    • a.php只会
    • b.php
    • includes.php
  • 的index.php

然后包括.PHP包含:

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

然后在任何脚本它包括includes.php文件的问题。

但是,要回答你原来的问题,你一次只能包含一个文件,每次调用。您可以使用类似opendirreaddir的东西来遍历特定目录中的所有文件,并将它们包含为发现(自动说话)或根据您创建的文件写出每个文件。

此外,所有设置包含路径都会设置一个目录,以便在拨打include时进行查找。这不是一个文件应该自动加载的目录(这是我从你的文章中得到的印象)。

+0

Hphph !!现在我清楚了。感谢您向我展示常见的方式。我仍然试图弄清楚PHP中的“传统”。 – musicliftsme

+1

如果这是您自己的个人项目,“常规”是任何方式适合您的方式。当你不得不开始使用查找功能或写下文件名和注释时,你会忽略“常规”。 ;-) –

+0

如果我包含加载一堆.php文件(比如20行到50行的函数)的“include.php”,我可能需要也可能不需要,这会在运行脚本时施加某种不必要的负载包括这些?我想知道是否应该自定义我的include.php,或者只是将1包括我所有的功能。 – musicliftsme

2

PHP的解析器非常高效 - 你会浪费更多的时间来加载大量的单个文件,而不是一个(或几个)更多的单片文件。然而,如果你坚持把事情隔离开来,你可以创建meta-include文件来加载单个文件集,所以你只需要包含一个meta-include文件,它就可以为你完成剩下的工作:

meta.php:

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

然后你只需要做:

<?php 

include('meta.php'); 

在脚本中,你已经得到了所有加载您个人的。

+0

没有人认为在某些情况下,包括必须加载在不同的部分......例如,如果包含页面布局的页眉,边栏和页脚,则不能连续包含它们。 – andreszs

2

我有这样的功能在我的大多数项目:

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

设置include_path将不包括在该目录中的所有文件,它只会增加该目录的列表,包括文件时,PHP将搜索。

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

Source

这将简化包括在深结构或在文件系统中的一个完全不同的部分文件。

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

随着/var/somewhere/else/加入到php.ini中的include_path可能成为

include('foo.php'); 

此外,正如其他人所指出的,也有共同的做法,但你可以看看OOPHP和autoloading classes。这对我所知道的功能不起作用。

许多编写面向对象应用程序的开发人员创建一个PHP源文件的每类定义。最大的烦恼之一是必须在每个脚本的开头(每个类一个)写一个需要包含的长列表。

在PHP 5中,这不再需要。您可以定义一个__autoload函数,在您尝试使用尚未定义的类/接口的情况下自动调用该函数。通过调用这个函数,脚本引擎有最后一次机会在PHP失败并且出现错误之前加载类。

2

看到了这个问题:

How to include() all PHP files from a directory?

此外,在最佳实践方面,您可以在同一文件的多个功能,如果他们是有联系的,而且我也建议有更多的您的函数和文件的描述性名称。例如,如果您的a()和b()函数都与验证相关,例如,将您的文件命名为validation.php,并将两个函数都放在那里,并尝试将它们重命名为与他们所做的相关的事情。这会让你记住他们在开始堆积一大堆功能时所做的事情;)