引入文件php文件,PHP中引入文件的方法有哪些?PHP引入文件的四种方法介绍(代码)..._weixin_39550410的博客-程序员宅基地

技术标签: 引入文件php文件  

PHP引入文件的方式有哪些?PHP引入文件有四个语句:include、require、include_once、require_once,下面我们就来看看PHP引入文件的具体实例。

基本语法

require:require函数一般放在PHP脚本的最前面,PHP执行前就会先读入require指定引入的文件,包含并尝试执行引入的脚本文件。require的工作方式是提高PHP的执行效率,当它在同一个网页中解释过一次后,第二次便不会解释。但同样的,正因为它不会重复解释引入文件,所以当PHP中使用循环或条件语句来引入文件时,需要用到include。

include:可以放在PHP脚本的任意位置,一般放在流程控制的处理部分中。当PHP脚本执行到include指定引入的文件时,才将它包含并尝试执行。这种方式可以把程序执行时的流程进行简单化。当第二次遇到相同文件时,PHP还是会重新解释一次,include相对于require的执行效率下降很多,同时在引入文件中包含用户自定义函数时,PHP在解释过程中会发生函数重复定义问题。

require_once / include_once:分别与require / include作用相同,不同的是他们在执行到时会先检查目标内容是不是在之前已经导入过,如果导入过了,那么便不会再次重复引入其同样的内容。

相互区别

include和require:

include有返回值,而require没有返回值

include在加载文件失败时,会生成一个警告(E_WARNING),在错误发生后脚本继续执行。所以include用在希望继续执行并向用户输出结果时。//test1.php

include './tsest.php';

echo 'this is test1';

?>

//test2.php

echo 'this is test2\n';

function test() {

echo 'this is test\n';

}

?>

//结果:

this is test1

require在加载失败时会生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本停止执行。一般用在后续代码依赖于载入的文件的时候。//test1.php

require './tsest.php';

echo 'this is test1';

?>

//test2.php

echo 'this is test2\n';

function test() {

echo 'this is test\n';

}

?>

结果:

4e2cdf4c8fb81d110f048413990026c5.png

include和include_once:

include载入的文件不会判断是否重复,只要有include语句,就会载入一次(即使可能出现重复载入)。而include_once载入文件时会有内部判断机制判断前面代码是否已经载入过。这里需要注意的是include_once是根据前面有无引入相同路径的文件为判断的,而不是根据文件中的内容(即两个待引入的文件内容相同,使用include_once还是会引入两个)。//test1.php

include './test2.php';

echo 'this is test1';

include './test2.php';

?>

//test2.php

echo 'this is test2';

?>

//结果:

this is test2this is test1this is test2

//test1.php

include './test2.php';

echo 'this is test1';

include_once './test2.php';

?>

//test2.php

echo 'this is test2';

?>

//结果:

this is test2this is test1

//test1.php

include_once './test2.php';

echo 'this is test1';

include './test2.php';

?>

//test2.php

echo 'this is test2';

?>

//结果:

this is test2this is test1this is test2

//test1.php

include_once './test2.php';

echo 'this is test1';

include_once './test2.php';

?>

//test2.php

echo 'this is test2';

?>

//结果:

this is test2this is test1

require和require_once:同include和include_once的区别相同。

载入时执行过程

1. 从include(require)语句退出php脚本模式(进入html代码模式)

2. 载入include语句所设定的文件中的代码,并尝试执行

3. 退出html模式,重新进入php脚本模式,继续后面脚本程序的执行//test1.php

主文件开始位置:

echo "
主文件中位置 A";

include "./test2.php"; //要载入的文件

echo "
主文件中位置 B";

?>


主文件结束位置

//test2.php


被载入文件位置 1

echo "
被载入文件位置 2";

?>


被载入文件位置 3

结果:

192e08cfa4ba04861427941ba47dae13.png

分析:

36158912966fb04e9bc613018ab458b5.png

加载时的路径问题

相对路径:

相对于当前网页文件所在位置来定位某个被加载的文件位置。./ 表示表示当前位置,即当前网页文件所在的目录

. . / 表示上一级位置,即当前网页文件所在目录的上一级目录

//例如:

include "./test2.php";

require "../../test3.html";

绝对路径:

分为本地绝对路径和网络绝对路径

本地绝对路径:

从本地的根目录逐层递归向下找,直到找到对应目录下的待引入文件。include "C:/PHP/test/test2.php";

我们都知道,绝对路径不利于项目的移植和可维护性,所以一般很少在代码中直接这样写绝对路径,但是如果我们需要用到绝对路径,应该怎么办??PHP中有魔术常量__DIR__和全局数组$_SERVER,用法如下:<?php

define('DS') or define('DS',DIRECTORY_SEPARATOR);

echo "使用绝对路径引入(方法一)";

include __DIR__ . DS . 'test2.php';

echo "使用绝对路径载入方法(方法二)";

$root = $_SERVER['DOCUMENT_ROOT']; // 获得当前站点的根目录

include $root.DS.'node_test'.DS.'inAndRe'.DS. 'test2.php';

?>

网络绝对路径:

通过网址链接到文件下,服务器会将网址指向的文件执行后返回回来include "http://www.lishnli/index.php"

无路径:

只给出文件名而没有给出路径信息,此时PHP会在当前网页目录下找该文件,如果找到相同名字的文件,执行并引入。

需要注意:无论采用哪种路径,必须要加上文件后缀名,这四种文件载入方式不能识别无后缀的文件。//test1.php

include "./test2.php";

//结果:this is test2

//test1.php

include "./test2";

//结果:

返回值的比较

上文说道include有返回值,而require无返回值

对于include,如果载入成功,有返回值,返回值为1;如果载入失败,则返回false.

对于require,如果载入成功,有返回值,返回值为1;如果载入失败,无返回值。//test1.php

$a = include "./test2.php";

var_dump($a);

echo "
";

$b = include "./test2.phps";

var_dump($b);

echo "
";

$c = require "./test2.php";

var_dump($c);

echo "
";

$d = require "./test2.phps";

var_dump($d);

?>

输出:

bf70c60caa050301ff54a87069089079.png

当文件中有return:

当被载入文件中有return语句时,会有另外的机制,此时return语句的作用是终止载入过程,即被载入文件中return语句的后续代码不再载入。return语句也可以用于被载入文件载入时返回一个数据。//test1.php

$a = include "./test2.php";

echo "
";

var_dump($a);

?>

//test2.php

//该文件中有return语句

$b = 'test2';

echo "被载入的文件:A 位置";

return $b;

echo "

?>

结果:

1db049c017697af6aaa37401ff997615.png

相关推荐:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39550410/article/details/115990833

智能推荐

报名 | 清华大数据论坛之深度学习技术与应用_数据派THU的博客-程序员宅基地

时光荏苒,春华秋实,厚重的积淀和改革创新的新发展给予清华人自信和力量。在清华大学108周年校庆的喜庆气氛里,清华大学大数据研究中心、清华-快手未来媒体数据联合研究院共同主...

Qt:在QTableWidget(表格)中将控件(QRadioButton)居中显示_qradiobutton文字居中_Muzi_李先生的博客-程序员宅基地

QTableWidget 插入的QRadioButton在单元格内居中显示//创建空间QRadioButton *rbtn = new QRadioButton();//增加widget+布局巧妙实现居中QWidget *widget = new QWidget();QHBoxLayout *layout = new QHBoxLayout();layout-&gt;setMargin(0);//一定要有layout-&gt;addWidget(rbtn);layout-&gt;setAli

Maven_刘锋的博客_刘沐Mu的博客-程序员宅基地

文章目录ANT概述功能安装种类和之间的关系本地仓库远程仓库中央仓库设置本地仓库路径Maven的标准目录结构Maven常用的命令Maven生命周期Maven概念模型图IDEA集成Maven骨架创建一个web工程项目maven工程实例Maven Web报错:Unable to compile class for JSP选择提高tomcat的版本或者降低jdk的版本配置活动模板maven依赖范围Maven连接数据库(JDBC)ANTMaven之前管理项目的技术,可以打包发布项目。*.jar *.va

SQL注入——二次注入漏洞_W小哥1的博客-程序员宅基地

一、二次注入原理二、二次注入需要具备的两个条件:(1)用户向数据库插入恶意语句(即使后端代码对语句进行了转义,如mysql_escape_string、mysql_real_escape_string转义)(2)数据库对自己存储的数据非常放心,直接取出恶意数据给用户三、二次注入实例实例:less-24应用范围:我们注册一个用户后,然后点击用户的图像类似进入了用户中心,对应的URL地址:帐号 ceshi www.XXX.com/member.php?user=ceshi反过来想:如果

由dll导出lib文件_BeanJoy的博客-程序员宅基地

老生长谈的问题了,网上的教程也很多,这里以实际例子作个备份,并说明下注意点。  只有dll文件(my.test.dll)和头文件,没有lib文件,需要导出lib,静态编译进代码中,用VS自带的dumpbin.exe和lib.exe来完成。  dumpbin.exe和lib.exe的路径不赘述,路径见下图:    先用如下命令行导出dll的相关信息:dumpbin /export

边缘存储_Owen_Liangcheng的博客-程序员宅基地

什么是边缘存储边缘存储(Edge Storage)就是把数据直接存储在数据采集点,而不需要把采集的数据通过网络(即时)传输到存储的中心服务器(或云存储)的数据存储方式。这种存储在端(边缘)的存储方式也就是分布式的存储,或者可以称作去中心化存储。举些例子来说明:1)公共监控摄像,在摄像头本地保存数据,即时处理,毋需把所有数据传输至中心机房;2)家庭数据中心,用户非常希望数据存储在自己的家里,...

随便推点

logstash对埋点日志进行整理并传输到ES---以及在linux下安装_logstash 监控日志送到el-head_NICEDAYSS的博客-程序员宅基地

Logstash埋点日志整理:上一篇文章,我们将埋点日志自动生成,后来我把代码稍作修改,将服务器和用户的日志进行分别输出到各自的文件中。然后我们需要使用logstash将从各种地方得到的不同的文件格式进行整理建表,最后输送到ElasticSearch中进行存储。PS:logstash一般与部署tomcat的服务器装在一起,ElasticSearch由于索引较大,需要专门装载一个服务器.logstash处理数据的流程:一般是在本地获取抓取格式文件,然后过滤器进行整理数据格式,远程连接输出到Elasti

英语面试常见问题集锦 ._hackai886的博客-程序员宅基地

求职面试时的"甜言蜜语" 1. What is important to you in a job?Challenge, the feeling of accomplishment, and knowing that you have made a contribution.2. Why do you want to work for this organization?

在vscode中统一vue编码风格的方法_Young丶的博客-程序员宅基地

vetur 很多人知道,但在 vscode 下没办法格式化 .vue 里的 html, js 很是头疼,代码风格无法统一。所以不少人直接拆分开,然后在 .vue 中引入,虽然方法很好,但这有违 .vue 单文件组件的初衷。本文详细介绍 vscode 下使用 vetur + prettier + eslint 来统一 vue 编码风格。vetur 插件vetur 经过多个版本迭代,算...

POI Excel 在已有的Excel模板上写入 不改变格式 合并单元格的也可以_poi替换表格内容 格式不变_IC77777的博客-程序员宅基地

POI Excel 在已有的Excel模板上写入 不改变格式 合并单元格的也可以使用的poi的相关jar包一定版本一定要相同,maven所使用jar包,没有使用maven的话,就用poi-3.9.jar和poi-ooxml-3.9.jar(这个主要是用于Excel2007以后的版本)两个jar包就行。&amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.apach...

vue cli 3 打包部署测试出现net::ERR_ABORTED 404 (Not Found)问题解决_CHH5431的博客-程序员宅基地

vue cli 3 打包部署到服务器上出现net::ERR_ABORTED 404 (Not Found)问题解决解决方法:配置vue.config.js如下:module.exports = { publicPath: "./"}注意:具体配置请参考官网教程 https://cli.vuejs.org/zh/config/#vue-config-jspublicPath...

快速排序(c语言实现)_c语言快速排序代码_「已注销」的博客-程序员宅基地

原理分析(从小到大):1. 首先取出一个key,一般取第一个元素2. 从后往前遍历,如果数组中的数据小于了key,那么就将从前往后未比较过的第一个位置即fisrt位置替换为该数据3. 然后从前往后遍历,如果数组中的数据大于了key,那么就将从后往前的第一个比较过数据位置替换4. 直到左右两边的位置重合,说明key就找到了正确的位置,每次循环就能找到一个数的正确位置5. 然后将key左右两...

推荐文章

热门文章

相关标签