0

我对 PHP 相当陌生,我想知道是否可以放置一个“如果文件存在则包含”所有列出的文件。我正在使用不同的 HTML 模板,其中一些不包含由 PHP 文件解释的代码。

编辑:请对评论进行投票和否决,因为我不知道要使用哪个答案。

4

4 回答 4

1

the include statement differs from the require statement that it only generates a warning (rather than an error), which could be silenced with the @ operator.

However, I'd recommend getting used to error handling... writing a template engine isn't that hard in PHP... This one is about the shortest:

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();
  }
}

Use it like

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

(Albeit this still has problems with non-existing properties (works, but will throw warnings), for that you'll need so-called magic functions like __set and __get)

As for not having any PHP code in an HTML, it doesn't matter for PHP... it'll just show the HTML instead. But you'll quickly move to frameworks hopefully..

于 2012-07-26T22:32:32.503 回答
1

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

auto_prepend_file = ../prepend.php

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

如果您使用的是常规的 PHP Apache 模块,如果您的服务器允许覆盖 .htaccess 中的 PHP 值,则可以在 .htaccess 中设置它:

php_value auto_prepend_file ../prepend.php

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

这确实要求您正在谈论的文件将被解析为 PHP(否则 PHP 的配置值不会做任何事情,因为没有为请求加载或初始化 PHP)。

于 2012-07-26T22:29:38.860 回答
0

尝试这样的事情:

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

于 2012-07-26T22:33:28.880 回答
0

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

  1. is_file()— 判断文件名是否为普通文件

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

于 2012-07-26T22:30:04.433 回答