5.1. include(), require()
持之以恒,方得始终!
在讲函数之前,我们先说下这两个重要的函数,它们的作用是载入一个文件内容到调用处。依托于此,代码可以很好的分门别类的放入不同目录下,不同文件中。即实现了代码调用的模块化,组件化。
一般载入的文件类型是 xx.php, xx.html
的,你当然也可以载入其它类型的文件。主要是把文件的内容放入调用处,其实跟文件类型关系不大。
include(),require() 的区别
调用文件失败后,require()直接报一个致命错误。而include()是一个警告
include_once(), require_once()
被载入的文件,仅载入一次。
// ./index.php
var_dump(111);
// ./1.php
require_once("./index.php");
require_once("./index.php");
// 执行 php 1.php的结果
int(111)
可以看到,调用了两次 require_once(),载入文件index.php的内容,里面是打印111,但实际是仅执行了一次打印。
多重载入例子
1.php
echo "111111111\n";
2.php
echo "22222222222\n";
require("./1.php");
// 执行php 2.php , 输出结果
22222222222
111111111
可以看一下执行顺序
再看再次嵌入
3.php
echo "333333333\n";
require("2.php");
// 执行php 3.php
333333333
22222222222
111111111
html文件中包含php脚本的载入
我们在 html 中写入 php 代码,如果直接用浏览器去访问这个html文件,php 代码是不会解析。但是如果我们将html文件,载入php文件中,再用浏览器访问,则会解析。
当然了,我们可以设置 webserver 的配置,php的配置,让其可以执行。
还或者,我们用 php xxx.html
这样,也会执行。
page.php
$name = 'this page view';
include("./page.html");
page.html
<h1><?php echo $name;?></h1>
浏览器访问127.0.0.1:8080/page.php, 结果为:
这种形式,我们已经看到 mvc
分层的影子了。
html页面的头尾分离
一般网站中,很多页面的header,footer部分,都是一样的代码,如果我们每个页面都有这个代码,假如要稍微改动一下,就需要调整很多的页面文件。
这里我们就可以借助于 include(),require() 来做一个分离了,我们把header共用部分的代码单独放在一个文件中 header.php
<h1>header</h1>
把footer的代码放到footer.php中
<h1>footer</h1>
主内容main.php
<?php
require("./header.php");
?>
<p>this is content.</p>
<?php
require("./footer.php");
?>
这样的好处是,我们改动header.php中的文件,对其它所有引用它的地方,都生效。
还有一点,我们可以把require()引用的文件,放到项目之外,这样可以加强安全性。
如果我们知道引用的文件,都是纯文本,或者都是html,我们也可以用 readfile() 读取文件内容显示,不会解析执行里面的代码。这也是个加强安全的办法。
auto_prepend_file, auto_append_file
在 php.ini 配置这两个选项,也可以在每个页面的首部,尾部,载入内容。
它们类似于 include() 的功能,文件不存在,报一个 warning。
我们来设置一下
在项目下创建一个 main.php 文件, 写入
<h1>content...</h1>
然后重启web服务器,访问这个页面
可以看到,php.ini 中设置的 header.php 和 footer.php 文件内容已经自动载入 main.php 文件中了。
但是这样设置了,所有文件都会自动被载入内容,我们无法可选择性的载入。
假如我们是 apache web server,我们可以用 .htaccess
文件来改变一下配置方式。.htaccess
比 php.ini 更灵活,首先它可以替代一些 php.ini 中的配置,然后可以限定到某目录里边。并且它的修改不需要重启web server 服务器。限定到目录下,只需要在其目录下,创建一个 .htaccess
文件,写入配置即可。
当然它也有缺点的,它限定目录下的文件执行,都会要处理这个文件,所以性能会降低的。
// .htaccess
php_value auto_prepend_file "C:/Users/xqw/Desktop/code/header.php"
php_value auto_append_file "C:/Users/xqw/Desktop/code/footer.php"
这种方式其实不怎么用的,我们了解即可。
如有任何侵权行为,请通知我删除,谢谢大家!
个人邮箱:865460609@qq.com