百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

PHP 访问文件 php文件无法访问

bigegpt 2024-10-12 07:00 26 浏览

1.打开文件

定义和用法

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法

fopen(filename,mode,include_path,context)

参数描述

filename必需。规定要打开的文件或 URL。

mode必需。规定要求到该文件/流的访问类型。可能的值见下表。

include_path可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。

context可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

mode 参数的可能的值

mode说明

"r"只读方式打开,将文件指针指向文件头。

"r+"读写方式打开,将文件指针指向文件头。

"w"写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"w+"读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。

"a"写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"a+"读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

说明

fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

例:fopen.php

<?php

@fopen("file.txt", "r");//只读打开,将文件指针指向文件头

@fopen("file.txt", "w");//写入打开,将文件指针指向文件头 @ 可以屏蔽一些警告信息,但频繁使用 @ 会造成程序运行过慢

?>

结果:

2.访问文件

1)fread()

定义和用法

fread() 函数读取文件(可安全用于二进制文件)。

语法

fread(file,length)

参数描述

file必需。规定要读取打开文件。

length必需。规定要读取的最大字节数。

说明

fread() 从文件指针 file 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

返回所读取的字符串,如果出错返回 false。

例:fread.php

<?php

$filename = "file.txt"; //文件名称

$handle = fopen($filename, "r");//只读打开文件句柄指针

$str1 = fread($handle,filesize($filename));//读取文件,按照文件自身大小读取

echo '$str1 = '.$str1.'<br><br>';//读取文件内容

fclose($handle);//关闭只读

$handle = fopen($filename, "r");//再次打开只读文件

$str2 = fread($handle,7);//读取文件,按照7个字节读取 换行占两个字节

echo '$str2 = '.$str2;//读取文件内容

fclose($handle);//关闭只读

?>

结果:

注:读取文件3个步骤

调用fopen函数打开文件句柄

调用fread等文件读取函数

调用fclose函数关闭文件句柄

2)fgets()

定义和用法

fgets() 函数从文件指针中读取一行。

语法

fgets(file,length)

参数描述

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。

说明

从 file 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(要看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。

若失败,则返回 false。

例:fgets.php

<?php

$handle = @fopen("file.txt", "r");//打开只读句柄

$i = 0;//定义变量存储行数

while (!feof($handle)) { //函数检测是否已到达文件末尾 (eof) 是或者错误返回true

$buffer = fgets($handle, 4096); //句柄处读取行内容 字节大小为4096-1的内容

$i = $i + 1;//计数

echo "第 $i 行".$buffer.'<br>';//打印读取几行内容

}

fclose($handle);//关闭句柄

?>

结果:

注:

定义和用法

feof() 函数检测是否已到达文件末尾 (eof)。

如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。

语法

feof(file)

参数描述

file必需。规定要检查的打开文件。

说明

file 参数是一个文件指针。这个文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。

3)fgetc()

定义和用法

fgetc() 函数从文件指针中读取一个字符。

语法

fgetc(file)

参数描述

file必需。规定要检查的文件。

说明

返回一个包含有一个字符的字符串,该字符从 file 指向的文件中得到。碰到 EOF 则返回 false。

文件指针必须有效,并且必须指向一个由 fopen() 或 fsockopen() 成功打开(但还没有被 fclose() 关闭)的文件。

例:fgetc.php

<?php

$fp = @fopen('file.txt', 'r');//打开只读句柄

$i = 0;//定义变量存储字符次数

while (false !== ($char = fgetc($fp))) { //读取句柄中每一个字符直到EOF 返回false

$i = $i + 1;//计数

echo "第 $i 字符:$char<br>";//打印读取第几个字符

}

?>

结果:

4)file()

定义和用法

file() 函数把整个文件读入一个数组中。

与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。

如果失败,则返回 false。

语法

file(path,include_path,context)

参数描述

path必需。规定要读取的文件。

include_path可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。

context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

说明

对 context 的支持是 PHP 5.0.0 添加的。

返回的数组中每一行都包括了行结束符,因此如果不需要行结束符时还需要使用 rtrim() 函数。

例:file.php

<?php

$lines = file('file.txt');// 把文件内容存储到$lines 数组里,数组中每个单元都是文件中的一行,包括换行符在内

foreach ($lines as $num => $line) { //foreach方式遍历打印数组内容

echo "第{$num}行: ".$line."<br>";

}

?>

结果:

5)fgetss()

定义和用法

fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。

与 fgets() 相同,不同的是 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。

语法

fgetss(file,length,tags)

参数描述

file必需。规定要读取的文件。

length可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的。

tags可选。规定不会被删除的标签。

说明

可以用可选的第三个参数 tags 指定哪些标记不被去掉。

若失败,则返回 false。

例:fgetss.php

<?php

$handle = @fopen("file.html", "r");//打开只读句柄

$i = 0;//定义变量存储行数

while (!feof($handle)) {//函数检测是否已到达文件末尾 (eof) 是或者错误返回true

$lines = fgetss($handle);//从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。

$i = $i + 1;//计数

echo "第{$i}行: ".$lines."<br>";//打印读取几行内容

}

?>

file.html

<html>

<head>title

</head>

<body>

<pre>This is a file.

<table>

<tr>

<td>abcd</td>

<td>xyz</td>

</tr>

</table>

</body>

</html>

结果:

3.写入文件

1)fwrite

定义和用法

fwrite() 函数写入文件(可安全用于二进制文件)。

语法

fwrite(file,string,length)

参数描述

file必需。规定要写入的打开文件。

string必需。规定要写入文件的字符串。

length可选。规定要写入的最大字节数。

说明

fwrite() 把 string 的内容写入文件指针 file 处。 如果指定了 length,当写入了 length 个字节或者写完了 string 以后,写入就会停止,视乎先碰到哪种情况。

fwrite() 返回写入的字符数,出现错误时则返回 false。

例:fwrite.php

<?php

$filename = 'file.txt'; //文件名称

$content = "abcd\nxyz";//文件内容

$handle = fopen($filename,'a+');//读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

if(fwrite($handle,$content) === false) //返回写入的字符数,出现错误时则返回 false。

{

echo "写入{$filename}文件失败";//写入{$filename}文件失败

exit;

}

echo "写入{$filename}文件成功";//写入{$filename}文件成功

fclose($handle);//关闭句柄

?>

结果:

2)file_put_contents

定义和用法

file_put_contents() 函数把一个字符串写入文件中。

与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

语法

file_put_contents(file,data,mode,context)

参数描述

file必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。

data可选。规定要写入文件的数据。可以是字符串、数组或数据流。

mode

可选。规定如何打开/写入文件。可能的值:

FILE_USE_INCLUDE_PATH

FILE_APPEND

LOCK_EX

context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

说明

参数 data 可以是数组(但不能是多维数组)。

自 PHP 5.1.0 起,data 参数也可以被指定为 stream 资源,stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。

对 context 参数的支持是 PHP 5.0.0 添加的。

返回值

该函数将返回写入到文件内数据的字节数。

提示和注释

提示:使用 FILE_APPEND 可避免删除文件中已有的内容。

例:file_put_contents.php

<?php

$content = 'file_put_contents';//写入内容

$file = 'file.txt';//写入文件

if(file_put_contents($file ,$content) === false)//返回写入的字符数,出现错误时则返回 false。

{

echo "写入{$file}文件失败";//写入{$file}文件失败

exit;

}

echo "写入{$file}文件成功";//写入{$file}文件成功

?>

结果:

4.复制文件

定义和用法

copy() 函数拷贝文件。

语法

copy(source,destination)

参数描述

source必需。规定要复制的文件。

destination必需。规定复制文件的目的地。

说明

将文件从 source 拷贝到 destination。如果成功则返回 TRUE,否则返回 FALSE。

提示和注释

提示:如果要移动文件的话,请使用 rename() 函数。

例:copy.php

<?php

$file = 'filebak.txt'; //被复制原文件

$newfile = 'file.txt';//复制后文件

if (!copy($file, $newfile)) {//如果成功则返回 TRUE,否则返回 FALSE。

echo "文件复制失败:{$file} copy to {$newfile}";

}

else {

echo "文件复制成功:{$file} copy to {$newfile}";

}

?>

结果:

原文件不存在报错

5.删除文件

定义和用法

unlink() 函数删除文件。

若成功,则返回 true,失败则返回 false。

语法

unlink(filename,context)

参数描述

filename必需。规定要删除的文件。

context可选。规定文件句柄的环境。Context 是可修改流的行为的一套选项。

例:unlink.php

<?php

$filename = 'file.txt'; //要被删除文件

fopen($filename,'a+');//读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

if(!unlink($filename))//若成功,则返回 true,失败则返回 false。

{

echo "文件{$filename}删除失败";

}

else

{

echo "文件{$filename}删除成功";

}

?>

结果:

6.重命名文件

定义和用法

rename() 函数重命名文件或目录。

若成功,则该函数返回 true。若失败,则返回 false。

语法

rename(oldname,newname,context)

参数描述

oldname必需。规定要重命名的文件或目录。

newname必需。规定文件或目录的新名称。

context可选。规定文件句柄的环境。context 是可修改流的行为的一套选项。

例:rename.php

<?php

$filename = 'file.txt';//被重命名原文件

$newname = 'newfile.txt';//重命名文件

fun_rename($filename,$newname);//调用fun_rename函数

function fun_rename($filename,$newname)//创建函数 形参$filename和$newname

{

if(!rename($filename,$newname))//若成功,则该函数返回 true。若失败,则返回 false。

{

echo "文件{$filename}重命名为{$newname}失败<br>";

}

else

{

echo "文件{$filename}重命名为{$newname}成功<br>";

}

}

?>

结果:

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...