我对 PHP 相当陌生,我想知道是否可以放置一个“如果文件存在则包含”所有列出的文件。我正在使用不同的 HTML 模板,其中一些不包含由 PHP 文件解释的代码。
编辑:请对评论进行投票和否决,因为我不知道要使用哪个答案。
我对 PHP 相当陌生,我想知道是否可以放置一个“如果文件存在则包含”所有列出的文件。我正在使用不同的 HTML 模板,其中一些不包含由 PHP 文件解释的代码。
编辑:请对评论进行投票和否决,因为我不知道要使用哪个答案。
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..
您可以使用 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)。
尝试这样的事情:
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
PHP 为我们提供了一些工具来测试文件是否存在。
is_file()
— 判断文件名是否为普通文件
file_exists()
— 检查文件或目录是否存在