如果文件存在,则包括在所有文件中


If file exist then include on all files

我对PHP还很陌生,我想知道是否可以在列出的所有文件中添加一个"如果文件存在,那么就包括"。我使用了不同的HTML模板,其中一些模板不包括PHP文件所解释的代码。

编辑:请对评论投赞成票和反对票,因为我不知道该用哪个答案。

您可以使用auto_prepend_file ini设置将文件设置为在任何代码运行之前包含。如果你通过CGI使用PHP,你可以通过在运行脚本的目录中添加PHP.ini,然后添加来设置它

auto_prepend_file = ../prepend.php

自动拥有/prepend.php在任何其他文件之前插入并解析。

如果你使用的是常规的PHP Apache模块,如果你的服务器允许在.htaccess:中重写PHP值,你可以在.htacccess中设置它

php_value auto_prepend_file ../prepend.php

如果你想避免使用.htaccess文件,你也可以在指令中设置配置。

这确实需要将您所谈论的文件解析为PHP(否则,PHP的配置值将不会起任何作用,因为PHP没有为请求加载或初始化)。

include语句与require声明的不同之处在于,它只生成一个警告(而不是错误),可以使用@运算符使其静音。

不过,我建议大家习惯错误处理。。。在PHP中编写模板引擎并不难。。。这是最短的:

class Template {
  private $_scriptPath=TEMPLATE_PATH;//comes from config.php
  public function setScriptPath($scriptPath){
      $this->_scriptPath=$scriptPath;
  }
  public function render($filename){
      ob_start();
      if(file_exists($this->_scriptPath.$filename)){
          include($this->_scriptPath.$filename);
      } else throw new TemplateNotFoundException();
      return ob_get_clean();
  }
}

像一样使用它

$v = new Template();
$v->someProperty="value";
$v->render('myview.php');

(尽管这仍然存在非现有属性的问题(有效,但会发出警告),因此您需要所谓的魔术函数,如__set和__get)

至于HTML中没有任何PHP代码,这对PHP来说并不重要。。。它只显示HTML。但希望您能很快转向框架。。

PHP为我们提供了一些工具来测试文件是否存在。

  1. is_file()-告诉文件名是否为常规文件

  2. file_exists()—检查文件或目录是否存在

试试这样的东西:

function include_if_exists($path) {
    if( @file_exists($path) && is_file($path) ) {
        include($path);
    }
}
include_if_exists("lib/mylibrary.php");
//...

您还可以使用自动加载器来搜索类库文件,这取决于您要完成的任务。看见http://us2.php.net/manual/en/language.oop5.autoload.php