php require和include区别 php include的用法
yuyutoo 2024-10-31 16:41 3 浏览 0 评论
require和include区别
区别主要表现在两个方面:1 加载失败时如何处理; 2 加载重复时如何处理
require()和include()语句是语言结构,不是真正的函数,可以像php中其他的语言结构一样,例如echo()可以使用echo("abc")形式;
require()和include()也可以不加圆括号而直接加参数。
include()产生一个警告而require() 则导致一个致命错误。换句话说,如果你想在遇到丢失文件时停止处理页面就用require()。
include()就不是这样,脚本会继续运行。
require执行效率高
require_once()
include_once()
该文件中的代码被包括了则不会再包括
require_once "file.txt";
require_once "file.txt"; //不会再包括
对于被包含的文件中有自定义函数, 多次加载文件就会出现错误;
解决方法:使用 require_once()和include_once()
require是在PHP脚本引擎编译的时候就载入的, 而include是条件执行, 当代码执行到那一行时才包含。
include()是有条件包含函数, 而require()则是无条件包含函数。
例如:如果变量$somg为真, 则将包含文件somefile.php
if($some){
include 'somefile.php';
}
但无论$some取何值, 下面的代码将把文件somefile.php包含进文件里
if($something){
require 'somefile.php';
}
例如: 充分说明了这两个函数之间的不同:
$i = 1;
while ($i < 3) {
require "somefile.$i.php";
$i++;
}
可以从以上这段代码中看出, 每一次循环的时候, 程序都将把同一个文件包含进去, 很显然这不是我们想要的。
我们希望在每次循环时, 将不同的文件包含进来, 如果要完成这个功能, 只能使用函数include():
$i = 1;
while ($i < 3) {
include "somefile.$i.php";
$i++;
}
include和require加载文件不会对header()函数产生影响
如果加载文件里含有header()函数的代码, 则不会产生错误;
one.php
<?php
header("Content-type:text/html;charset=utf-8");
session_start();
echo "这是第一个脚本文本";
$_SESSION['username'] = "汪娜娜";
include "two.php";
?>
two.php
<?php
header("Content-type:text/html; charset=utf-8");//可以在被加载的文件重新设置一个响应头信息
//session_start(); 不能加载第二个
echo "<br>";
echo $_SESSION['username'];
echo "<br>";
echo "这是第二个脚本文件";
?>
加载中的文件路径问题
通常,文件的路径应该给定,并且有一个明确的位置,主要有以下三种情况:
相对路径:
/ 根路径(网站域名所指向的路径)
include和require不支持根路径(PHP不支持以"/"开头的路径, 除非两个文件都在根路径下, 使用根路径加载文件时不会出现错误)
./ 当前文件位置
../ 当前文件位置的"上一级"位置
注意:"上一级"的位置,最终也不能超出当前站点所在目录;
相对路径一定就是以该两个特殊符号为"开始"
加载后的子模板的路径问题:
子模板要想在父模板中显示, 必须以父模板为基准点
如:网站根目录下有三个文件
index.php
view/index.html
public/public.css
index.php加载view/index.html
而index.html在加载public/public.css
要想在index.php中生效 则index.html路径必须以index.php为基准点
<link rel='stylesheet' type="text/css" href="public/public.css">应当这样写
绝对路径:
本地绝对路径:c:/abc/def/
网络绝对路径:http://www.abc.com/dir/
当我们在加载文件时,没有给定路径信息(即只给定了文件名), 此时,机制就比较复杂了(虽然我们不推荐这么做):
此时, PHP会按如下顺序依次去找该文件:
?先在include_path设定的目录中找(include_path是一个php.ini的配置项,里面可以设定多个目录位置)。
?没找到,则在当前网页文件所在目录中找(当前工作目录)
?没找到,则在当前include命令所在文件的目录中找
;include_path = ".;c:\php\includes"
这里设置了两个路径: "." 表示当前路径 "c:\php\includes" 表示当前网页所在的路径
上述后两个位置,通常其实是"一致的",只有出现"文件嵌套包含"的时候,才可能会出现不一致(在修改配置文件php.ini中include_path的值时)。
在实际应用中,
首先,不推荐不指定文件路径。
其次,通常会获取到站点的物理路径,然后以此为"起点"去定位各个文件的位置。比如:
define("ROOT", $_SERVER['DOCUMENT_ROOT'] . "/"); //站点跟目录
define("PULIC", ROOT . "public/"); //通常用于定义一个存放公共函数的目录
define("UPLOAD",ROOT . 'upload/"); //用于存放用户上传的文件
如果要在page1.php中,引入一个函数库文件(func1.php),则可以这样:
include PULIC . 'func1.php'; //这里用的就是绝对路径。
又比如要在dir/page2.php中,引入该函数库文件(func1.php),则可以:
include PULIC . 'func1.php';
加载文件
require_once __DIR__ . '/composer' . '/autoload_real.php';
__DIR__能够解决框架内加载问题
相关推荐
- 【Socket】解决UDP丢包问题
-
一、介绍UDP是一种不可靠的、无连接的、基于数据报的传输层协议。相比于TCP就比较简单,像写信一样,直接打包丢过去,就不用管了,而不用TCP这样的反复确认。所以UDP的优势就是速度快,开销小。但是随之...
- 深入学习IO多路复用select/poll/epoll实现原理
-
Linux服务器处理网络请求有三种机制,select、poll、epoll,本文打算深入学习下其实现原理。0.结论...
- 25-1-Python网络编程-基础概念
-
1-网络编程基础概念1-1-基本概念1-2-OSI七层网络模型OSI(开放系统互联)七层网络模型是国际标准化组织(ISO)提出的网络通信分层架构,用于描述计算机网络中数据传输的过程。...
- Java NIO多路复用机制
-
NIO多路复用机制JavaNIO(Non-blockingI/O或NewI/O)是Java提供的用于执行非阻塞I/O操作的API,它极大地增强了Java在处理网络通信和文件系统访问方面的能力。N...
- Python 网络编程完全指南:从零开始掌握 Socket 和网络工具
-
Python网络编程完全指南:从零开始掌握Socket和网络工具在现代应用开发中,网络编程是不可或缺的技能。Python提供了一系列高效的工具和库来处理网络通信、数据传输和协议操作。本指南将从...
- Rust中的UDP编程:高效网络通信的实践指南
-
在实时性要求高、允许少量数据丢失的场景中,UDP(用户数据报协议)凭借其无连接、低延迟的特性成为理想选择。Rust语言凭借内存安全和高性能的特点,为UDP网络编程提供了强大的工具支持。本文将深入探讨如...
- Python 网络编程的基础复习:理解Socket的作用
-
计算机网络的组成部分在逻辑上可以划分为这样的结构五层网络体系应用层:应用层是网络协议的最高层,解决的是具体应用问题...
- 25-2-Python网络编程-TCP 编程示例
-
2-TCP编程示例应用程序通常通过“套接字”(socket)向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通信。Python语言提供了两种访问网络服务的功能。...
- linux下C++ socket网络编程——即时通信系统(含源码)
-
一:项目内容本项目使用C++实现一个具备服务器端和客户端即时通信且具有私聊功能的聊天室。目的是学习C++网络开发的基本概念,同时也可以熟悉下Linux下的C++程序编译和简单MakeFile编写二:需...
- Python快速入门教程7:循环语句
-
一、循环语句简介循环语句用于重复执行一段代码块,直到满足特定条件为止。Python支持两种主要的循环结构:for循环和while循环。...
- 10分钟学会Socket通讯,学不会你打我
-
Socket通讯是软硬件直接常用的一种通讯方式,分为TCP和UDP通讯。在我的职业生涯中,有且仅用过一次UDP通讯。而TCP通讯系统却经常写,正好今天写了一个TCP通讯的软件。总结一下内容软件使用C#...
- Python 高级编程之网络编程 Socket(六)
-
一、概述Python网络编程是指使用Python语言编写的网络应用程序。这种编程涉及到网络通信、套接字编程、协议解析等多种方面的知识。...
- linux网络编程Socket之RST详解
-
产生RST的三个条件:1.目的地为某端口的SYN到达,然而该端口上没有正在监听的服务器;2.TCP想取消一个已有的连接;3.TCP接收到一个根本不存在的连接上的分节;现在模拟上面的三种情况:cl...
- Python中实现Socket通讯(附详细代码)
-
套接字(socket)是一种在计算机网络中进行进程间通信的方法,它允许不同主机上的程序通过网络相互通信。套接字是网络编程的基础,几乎所有的网络应用程序都使用某种形式的套接字来实现网络功能。套接字可以用...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
推荐7个模板代码和其他游戏源码下载的网址
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)