(七)文件——PHP

news2025/8/13 13:16:57

文章目录

    • 第七章 文件
      • 1 文件包含
        • **1.1 include()函数**
        • **1.2 require()函数**
      • 2 文件的读取和写入
        • **2.1 文件模式**
        • **2.2 文件读取**
        • **2.3 文件写入**
      • 3 文件上传
        • 3.1 创建表单
        • 3.2 创建脚本
        • 3.3 实例

第七章 文件

1 文件包含

您可以在服务器执行PHP文件之前将其内容包含到另一个PHP文件中。有两个PHP函数可用于将一个PHP文件包含到另一个PHP中。

  • include()函数

  • require()函数

1.1 include()函数

include()函数获取指定文件中的所有文本,并将其复制到使用includ函数的文件中。如果加载文件时出现任何问题,则include()函数将生成警告,但脚本将继续执行。

<?php 
	//	main.php
	//	This is a main file
	include("header.php");
	echo "This is an example to show how to include php file";
 ?>
      
 
<?php 
	// header.php
	// The file is the included php file
	echo '<a href="www.baidu.com">百度</a>&emsp;' ;
	echo '<a href="www.sina.com">新浪</a>&emsp;';
	echo '<a href="www.qq.com">腾讯</a><br>';
	
 ?>

1.2 require()函数

require()函数获取指定文件中的所有文本,并将其复制到使用include函数的文件中。如果加载文件时出现任何问题,那么require()函数将生成致命错误并停止脚本的执行。

因此,require()和include()除了处理错误条件之外没有区别。建议使用require()函数而不是include(),因为如果文件丢失或命名错误,脚本不应继续执行。

<?php 
	//	main.php
	//	This is a main file
	require("unknown.php");  // 通过包含一个不存在的文件,可以发现include()函数和require()函数的区别
	echo "This is an example to show how to include php file";
 ?>
<?php 
	// header.php
	// The file is the included php file
	echo '<a href="www.baidu.com">百度</a>&emsp;' ;
	echo '<a href="www.sina.com">新浪</a>&emsp;';
	echo '<a href="www.qq.com">腾讯</a><br>';
 ?>

2 文件的读取和写入

fopen()函数用于打开文件。它需要两个参数,首先说明文件名,然后说明操作模式。

对打开的文件进行更改后,使用fclose()函数关闭它很重要。fclose()函数需要一个文件指针作为参数,然后在关闭成功时返回true,如果失败则返回false。

2.1 文件模式

ModePurpose
r以只读方式打开文件。
r+打开文件进行读取和写入
w打开文件仅写入。
将文件指针放在文件的开头。
并将文件截断为零长度。如果文件没有存在,然后尝试创建文件。
w+打开文件仅用于读取和写入。
将文件指针放在文件的开头。
并将文件截断为零长度。如果文件没有存在,然后尝试创建文件
a仅打开文件进行写入。
将文件指针放在文件的末尾。
如果文件不存在,则会尝试创建文件。
a+打开文件仅用于读取和写入。
将文件指针放在文件的末尾。
如果文件不存在,则会尝试创建文件

2.2 文件读取

下面是用PHP读取文件所需的步骤。

  • 使用fopen()函数打开文件。

  • 使用filesize()函数获取文件的长度。

  • 使用fread()函数读取文件的内容。

  • 使用fclose()函数关闭文件。

<?php 
	//	main.php
	$filename = "testFile.txt";
	$file = fopen($filename, "r");
	if($file == null){
		echo "Error in opening file";
		exit();
	}
	$filesize = filesize($filename);
	$filecontent = fread($file, $filesize);
	fclose($file);
	echo "File size:".$filesize." bytes.";
	echo "<br>";
	echo "File content:".$filecontent;
 ?>
// testFile.txt
This is the content to be read!

2.3 文件写入

fwrite()函数写入新文件或将文本附加到现有文件。此函数需要两个参数来指定文件指针和要写入的数据字符串。除此之外,可以包括第三个整数参数来指定要写入的数据的长度。如果包含第三个参数,则在达到指定长度后将停止写入。

//	写
<?php 
	$filename = "testFile.txt";
	$file = fopen($filename, "w");
	if($file == null){
		echo "error in opening file";
		exit();
	}
	$filecontent = "This is what I want to write";
	fwrite($file, $filecontent);
	fclose($file);

 ?>


//	读
<?php 
	//	main.php
	$filename = "testFile.txt";
	$file = fopen($filename, "r");
	if($file == null){
		echo "Error in opening file";
		exit();
	}
	$filesize = filesize($filename);
	$filecontent = fread($file, $filesize);
	fclose($file);
	echo "File size:".$filesize." bytes.";
	echo "<br>";
	echo "File content:".$filecontent;
 ?>

3 文件上传

PHP脚本可以与HTML表单一起使用,以允许用户将文件上传到服务器。一开始,文件被上传到临时目录,然后通过PHP脚本重新定位到目标位置。

通常,在写入文件时,临时位置和最终位置都必须设置允许文件写入的权限。如果其中一个设置为只读,则进程将失败。

上传的文件可以是文本文件图像文件任何文档

上传文件的过程遵循以下步骤:

  • 用户打开包含HTML表单的页面,该表单包含文本文件、浏览按钮和提交按钮。
  • 用户单击浏览按钮并选择要从本地PC上传的文件。
  • 选定文件的完整路径显示在文本字段中,然后用户单击提交按钮。
  • 选定的文件将发送到服务器上的临时目录。
  • 表单的action属性中指定为表单处理程序的PHP脚本会检查文件是否已到达,然后将文件复制到预期目录中。
  • PHP脚本向用户确认成功。

3.1 创建表单

<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
      <form action="" method="post" enctype="multipart/form-data">
         <input type="file" name="image"><br>
         <input type="submit" name="submit">
      </form>
</body>
</html>

3.2 创建脚本

$_FILES是PHP的全局变量,这个变量是一个关联的二维数组,保存与上传文件相关的所有信息
例如,如果上传表单中输入的name属性值file,那么PHP将创建以下五个变量:

  • **$_FILES[ ‘file’ ] [ ‘tmp_name’ ]**− web服务器上临时目录中的临时文件
  • $_FILES[ ‘file’ ] [ ‘name’ ] − 上传文件的实际文件名
  • $_FILES[ ‘file’ ] [ ‘size’ ] − 上传文件的字节数
  • $_FILES[ ‘file’ ] [ ‘type’ ] − 上传文件的MIME类型
  • $_FILES[ ‘file’ ] [ ‘error’ ] − 与上传文件关联的错误代码
<?php 
   error_reporting(0);
   if (isset($_FILES['image'])) {                  // 判断name属性值是否是'image'
         $file_tmp = $_FILES['image']['tmp_name']; // 获取临时目录中的临时文件
         $file_name = $_FILES['image']['name'];    // 获取上传文件的实际文件名
         $file_size = $_FILES['image']['size'];    // 获取上传文件的字节大小
         $file_type = $_FILES['image']['type'];    // 获取上传文件的MIME类型
         $file_ext = strtolower(end(explode(".", $_FILES['image']['name'])));
         /*
            explode():以‘.’作为分割符,将字符串转化为数组
            end():获取数组最后一个元素
            strtolower():将全部字符变为小写

            $file_ext:获取文件名后缀
         */

         $errors = array();                       // 用于存储错误信息
         $extensions = array("jpg","jpeg","png"); // 标记文件扩展名 


         // 判断$file_ext是否存在指定的文件扩展名数组中
         if (in_array($file_ext, $extensions) == false) {
            $errors[] = "extension not allowed";
         }

         // 判断文件字节大小是否超过5MB
         if($file_size > 5098152){
            $errors[] = "it must be exactly 5MB";
         }

         // 判断$errors数组是否为空
         if (empty($errors) == true) {

            // 如果errors数组为空,即可将临时文件上传到指定位置
            move_uploaded_file($file_tmp, "images".$file_name);
         }else {

            // 如果errors数组不为空,则打印$errors数组中信息
            print_r($errors);
         }
   }
 ?>

3.3 实例

<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body bgcolor="pink">
      <form action="" method="post" enctype="multipart/form-data">
         <input type="file" name="image"><br>
         <input type="submit" name="submit">
      </form>
      <ul>
         <li>临时目录中的临时文件:<?php echo $_FILES['image']['tmp_name'] ?></li>
         <li>实际文件名:<?php echo $_FILES['image']['name'] ?></li>
         <li>文件字节大小:<?php echo $_FILES['image']['size'] ?></li>
         <li>文件类型:<?php echo $_FILES['image']['type'] ?></li>
      </ul>
</body>
</html>

    
<?php 
   error_reporting(0);
   if (isset($_FILES['image'])) {                  // 判断name属性值是否是'image'
         $file_tmp = $_FILES['image']['tmp_name']; // 获取临时目录中的临时文件
         $file_name = $_FILES['image']['name'];    // 获取上传文件的实际文件名
         $file_size = $_FILES['image']['size'];    // 获取上传文件的字节大小
         $file_type = $_FILES['image']['type'];    // 获取上传文件的MIME类型
         $file_ext = strtolower(end(explode(".", $_FILES['image']['name'])));
         /*
            explode():以‘.’作为分割符,将字符串转化为数组
            end():获取数组最后一个元素
            strtolower():将全部字符变为小写

            $file_ext:获取文件名后缀
         */

         $errors = array();                       // 用于存储错误信息
         $extensions = array("jpg","jpeg","png"); // 标记文件扩展名 


         // 判断$file_ext是否存在指定的文件扩展名数组中
         if (in_array($file_ext, $extensions) == false) {
            $errors[] = "extension not allowed";
         }

         // 判断文件字节大小是否超过5MB
         if($file_size > 5098152){
            $errors[] = "it must be exactly 5MB";
         }

         // 判断$errors数组是否为空
         if (empty($errors) == true) {

            // 如果errors数组为空,即可将临时文件上传到指定位置
            move_uploaded_file($file_tmp, "images".$file_name);
         }else {

            // 如果errors数组不为空,则打印$errors数组中信息
            print_r($errors);
         }
   }
 ?>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14983.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

支付宝"手机网站支付"主域名申请了,二级域名还要申请吗

微信商城小程序里可以用支付宝付款吗&#xff1f;当然可以了&#xff0c;不过需要去支付宝官方网站去申请一个接口&#xff0c;注意选对产品&#xff0c;支付宝提供了很多种接口&#xff0c;微信里要用到的支付宝付款属于“手机网站支付”这个产品&#xff0c;重要的事情说三遍…

一文讲解,Linux内核——内存管理(建议收藏)

一.内存的基础知识&#xff1a; 1.写程序到程序运行的过程&#xff1a; &#xff08;1&#xff09;编译&#xff1a;由编译程序将用户代码编译成若干个目标模块&#xff08;把高级语言翻译成机器语言&#xff09; &#xff08;2&#xff09;链接&#xff1a;由链接程序将编译…

头歌平台-MongoDB 之滴滴、摩拜都在用的索引

第1关&#xff1a;了解并创建一个简单索引 > use test switched to db test > db.student.insert([{_id:1,name:"王小明",age:15,score:90},{_id:2,name:"周晓晓",age:18,score:86},{_id:3,name:"王敏",age:20,score:96},{_id:4,name:&qu…

kudu集群数据节点(tserver)扩容(缩容)

背景&#xff1a; 4个数据节点有数据倾斜&#xff0c;rebalance后依旧如此&#xff0c;检查分片数量和分布情况也是均衡的。最后发现相同的分片在其中一个节点存储消耗的磁盘资源比其他节点要大很多&#xff0c;导致了这个节点磁盘消耗较快。于是决定更换节点的磁盘 操作计划如…

【freeRTOS】操作系统之一-任务调度

一. 任务调度 ​ FreeRTOS操作系统支持三种调度方式&#xff1a;抢占式调度&#xff0c;时间片调度和合作式调度。实际应用主要是抢占式调度和时间片调度&#xff0c;合作式调度用到的很少。 挂起/阻塞/就绪/运行 三种基本状态 进程在运行中不断地改变其运行状态。通常&…

智能网联汽车网络安全攻击与防御技术概述

作者 | 王博文 上海控安可信软件创新研究院研究员 来源 | 鉴源实验室 01 引言 在汽车电动化、网联化、智能化和共享化等新四化的发展趋势下&#xff0c;智能网联汽车&#xff08;Intelligent Connected Vehicles&#xff0c;ICVs&#xff09;已经是新时代的必然产物。在智能网…

【学习笔记】浅谈闵可夫斯基和

学这东西主要是 这道题 要用 233 定义&#xff1a;给定两个凸包AAA,BBB&#xff0c;定义C{ab∣a∈A,b∈B}C\{ab|a\in A,b\in B\}C{ab∣a∈A,b∈B} &#xff0c;其中aaa,bbb均为坐标。 不好意思图是嫖的 首先我们感性认识一下。可以直接将一个凸包的顶点换成另一个凸包&#x…

实现登陆模块时Cookie,Session,Token的理解

目录引言一、简化版登陆&#xff08;不保存登录状态&#xff09;二、Session 登陆三、CookieSession 实现登录四、Token登陆引言 先思考问题&#xff1a; 1、如何实现登陆&#xff1f; &#xff08;1&#xff09;表单输入账号密码 &#xff08;2&#xff09;后台数据库验证 …

治愈系书单|林曦《只生欢喜不生愁》

《只生欢喜不生愁》是水墨画家林曦的艺术生活随笔集&#xff0c;谈艺术之道&#xff0c;论无用之美。      全书按主题分为六辑&#xff1a;“艺可通道”“观照世间”“得自在禅”“心安之所”“写给时间”“赤子之心”&#xff0c;文字轻盈、意境优雅。林曦以手艺人之道&a…

Java#13(String Builder介绍及其常用办法)

目录 一.String Builder 1.理解:可以将String Builder当作一个容器,创建之后的内容是可以变的 2.作用:可以提高字符串的操作效率 二. StringBuilder中的常用方法 1.public StringBuilder append (任意类型) 添加数据&#xff0c;并返回对象本身 2.public StringBuild…

Keysight是德科技e5063A网络分析仪-安泰测试

Keysight E5063A ENA 是一款经济适用的台式矢量网络分析仪&#xff0c;可用于测试简单的无源元器件&#xff0c;例如频率最高达到 18 GHz 的天线、滤波器、电缆或连接器。 作为业界闻名的 ENA 系列中的一员&#xff0c;它传承了一致的测量框架&#xff0c;以便提高效率和生产率…

大学生静态HTML鲜花网页设计作品 DIV布局网上鲜花介绍网页模板代码 DW花店网站制作成品 web网页制作与实现

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

RabbitMQ初步到精通-第二章-RabbitMQ介绍

第二章 RabbitMQ介绍 1、RabbitMQ简介 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。RabbitMQ最初起源于金融系统&#xff0c;用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面表现不俗。 rabbit- 兔子&#xff0c;兔子的特点是什么? 轻…

图解https读书笔记

7.确保Web安全的HTTPS 7.2 HTTP 加密 认证 完整性保护 HTTPS https http ssL(Secure socket layer)client: 使用servcer端的publickey对消息加密-----》server&#xff1a;收到消息&#xff0c;用privatekey进行解密参考&#xff1a;彻底搞懂HTTPS的加密原理_峰子2012的博…

VS+QT错误集合

主要是使用VSQT时遇到等一些问题&#xff0c;现在使用等是VS2015&#xff08;专业版&#xff09; QT5.13.1 这章主要解决遇到的无法解析等外部符号这类问题 1、LNK2001 无法解析的外部符号 "public: virtual struct QMetaObject const * __cdecl Process::metaObject…

【分析笔记】Linux 4.9 backlight 子系统分析

相关信息 内核版本&#xff1a;Linux version 4.9.56 驱动文件&#xff1a;lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上&#xff0c;面对应用层提供统一的设备节点入口同级&#xff0c;面对驱动层提供设备驱动加载卸载通知事件&#xff0c;以及背光…

闲人闲谈PS之三十二——业务工程预算和PS成本计划

惯例闲话&#xff1a;年底&#xff0c;又要开始忙了&#xff0c;今年这一年&#xff0c;收获还不错&#xff0c;至少规划了第三年实现的目标——工程行业彩虹图&#xff0c;在今年居然奇迹般的实现了&#xff0c;看样子闲人还是保守了。还是应验了那句话&#xff0c;只要标准化…

React插槽

在开发中&#xff0c;我们抽取了一个组件&#xff0c;但是为了让这个组件具备更强的通用性&#xff0c;我们不能将组件中的内容限制为固定的div、span等等这些元素。我们应该让使用者可以决定某一块区域到底存放什么内容。这里可以使用插槽。 而在React中&#xff0c;我们可以通…

Spring Cloud Circuit Breaker 使用示例

Spring Cloud Circuit Breaker 使用示例 作者&#xff1a; Grey 原文地址&#xff1a; 博客园&#xff1a;Spring Cloud Circuit Breaker 使用示例 CSDN&#xff1a;Spring Cloud Circuit Breaker 使用示例 说明 Spring Cloud Circuit breaker提供了一个跨越不同断路器实现…

留学Essay写作怎么注意具体结构?

留学生都知道Essay一般分为Introduction,Main Body和Conclusion这三个部分&#xff0c;Introduction说明了文章的整体内容&#xff0c;但本身并没有提出任何论点&#xff1b;Conclusion通常简要地概括了正文的要点&#xff0c;并建议进一步研究给出一些或结论性的想法&#xff…