f (feof($file)) echo "文件结尾";
php 文件处理fopen()
fopen() 函数用于在 PHP 中打开文件
此函数的第一个参数含有要打开的文件的名称,第二个参数规定了使用哪种模式来打开文件:
<html>
<body>
<?php
$file=fopen("welcome.txt","r");
?>
</body>
</html>
如果 fopen() 函数不能打开指定的文件,下面的实例会生成一段消息:
<html>
<body>
<?php
$file=fopen("welcome.txt","r") or exit("Unable to open file!");
?>
</body>
</html>
fclose() 函数用于关闭打开的文件:
<?php
$file=fopen("test.txt","r");
//执行一些代码
fclose($file);
?>
feof() 函数检测是否已到达文件末尾(EOF)
在循环遍历未知长度的数据时,feof() 函数很有用
注释:在 w 、a 和 x 模式下,您无法读取打开的文件
if (feof($file)) echo "文件结尾";
fgets() 函数用于从文件中逐行读取文件
在调用该函数之后,文件指针会移动到下一行
下面的实例逐行读取文件,直到文件末尾为止:
<?php
$file=fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
{
echo fgets($file). "<br>";
}
fclose($file);
?>
fgetc() 函数用于从文件中逐字符地读取文件
注释:在调用该函数之后,文件指针会移动到下一个字符。
下面的实例逐字符地读取文件,直到文件末尾为止
Filesystem 函数允许您访问和操作文件系统
Filesystem 函数是 PHP 核心的组成部分。无需安装即可使用这些函数
Filesystem 函数的行为受到 php.ini 中设置的影响
.打开文件
定义和用法
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");//写入打开,将文件指针指向文件头 @ 可以屏蔽一些警告信息,但频繁使用 @ 会造成程序运行过慢
?>
结果:
在北京写代码(31)
作者:鲁棒棒
写于:20240322
正文
上一篇写到了我的第一个工作所面对的需求,以及使用的框架,今天来详细记录一下我当时做研发所面对的一些问题和一些困惑。当时因为是使用了 openresty 这个框架,这个框架貌似是用在爬虫里的,我近期又研究了一下这个框架,这个框架貌似不太适合把比较复杂的业务放在里面,所以我仔细考虑之后,也没太弄明白为什么非要让我用这个框架去做。
当然这个抽取数据并放到 web 页面中的功能本身也不复杂,放在 nginx 里,也不能说不行,但是可用的替代方案实在是太多了,为什么偏要用 lua 这套东西呢?我到现在也没有十分清楚,同时我的上级也不跟我讲为什么,跟我对接的说辞就是
“我们公司现在在用的一个东西是 openresty,你看一下,之后你要用这个东西来写代码,这个是 lua 的,你看下 lua,今天就开始写吧”
然后我就吭哧吭哧满头大汗的开始搞了,我认为不外乎几点原因,但是都是我自己的推测,除非我去问一下我当时的领导。首先就是公司技术栈的适应问题,现在公司的项目有一部分是基于 openresty 的,让我用这个东西来写业务,可能也是出于适应公司文化上的考虑。
其次还有一个原因就是我面试的时候所面的职位是 “Python 程序员” 当时不让我做 python 方面的工作,可能是想在实习期,给我一个比较全面的测试,比如学习技术的速度,对业务的理解,抗压能力等等。我认为这个理由可能比较靠谱,当然在一般情况下,面试的岗位和工作的岗位不同,是经常有这种情况的,尤其是在不太成熟的小微企业,这种情况没必要过多解释,因为不管面试什么职位都是 “打杂职位”,和大型科技巨头的 “一个萝卜一个坑” 是非常不同的,纯属个人瞎猜,不用较真。
因为当时有更快的方案去实现整个业务,但是我不能用,没有选择权,比如用 django 或者用 flask,都是我比较熟悉的 web 框架,用起来也是比较顺手,同时我觉得 openresty 内嵌的 lua,不太好用,比较适合做一些流量转发,权限校验等需要在网关层面做的业务,增删改查用这个东西来做,可能有些牵强,我当时其实就这么想的,只是苦于不敢跟领导说。
其实还是自己的心态不够强大,其次也是多年所受的教育就叫我要 “逆来顺受”,人家让你干嘛你就干嘛,这也是老祖宗教我的,现在我不打算这么干了,所以我选择成为一名艺术家,我现在行为基本是反过来的。不是 “人家让你干嘛你干嘛” 而是 “我想干嘛就干嘛” 当然仅限于在干活上。生活中我选择多参加点娱乐活动,这样可以身心放松一点。
明白了业务,明白了需要用的技术,然后我就开始工作了,费尽千辛万苦把框架搭建起来之后,终于把 “Hello World” 跑通了,跑通之后我就需要去学习使用 lua 处理 http 请求了。
关于 lua 我的印象很深刻,公司当时给我扔过来一本很厚的书,叫做 “Lua 程序设计” 这本书是 lua 的作者写的,现在已经有了第四版,而我当时看的不是第四版,而是黄色书皮的那个版本,因为要尽快开始写代码,我也没有去翻看这本书,而是打算晚上的时候带回住处,慢慢看。
而在公司里,肯定不能让别人看到你整个下午抱着书看了,而是慢慢的一点一点从 demo 中复制代码过来,然后慢慢改着,测试运行,虽然并不十分清楚每一行代码的用处,但是比如处理字符串,处理 table,还有获取 http 请求,从 http 请求中获取参数等,都是一些 web 框架的常见的功能。
不外乎使用什么技术,什么语言,协议是如此的,那么就肯定要处理各种 http 中的参数,比如 query string 之类的等等。当时我比较着急,所以觉得心情有些焦躁,心态把控的不是很好,总觉得催命一样的感觉,总之就是很不舒服,也不知道该如何缓解,很郁闷。
就这样一边琢磨,一边研究,一边心慌的终于把 http 请求处理这部分跑通了,然后成功的在网页上打印出了 “Hello World” 不过我对其中的原理还是一知半解的。之后便很快又遇到了另一个问题,那就是 lua 的模板语言我看不懂,不会用,这就更着急了。
当时的程序还不是前后端分离啥的,可能现在参加培训之后上岗的程序员朋友,没听说过模板渲染,原理和现在流行的 nodejs 里的那个 server side render 差不多,都可以说是一种服务端渲染,反正 html 代码都是服务器上拼装上去的,连同 js 代码, css 代码,有时候也是需要在服务器端拼装的。
但是拼装的时候,比如需要把某个变量的值,直接传输到某个页面里,如果没有模板引擎,就只能自己去用读文件的方法 fopen 这个 html 文件,用字符串读出来,然后找到 token,最后将 token 替换成变量的值。
而有了模板引擎就不需要这样做了,因为模板引擎做的工作就是代换变量值和进行计算的工作,而公司大佬写的这个框架,一开始是没有模板引擎的,让我着急了好一阵子,因为我自己弄不明白,我只会用 django 里的模板引擎。
无论如何我都解决不了模板的问题,而且前端页面的代码量也比较大,很多功能都得自己写 html 和 js 才行,我跟领导说了,领导说自己研究研究,我跟写框架的大佬说,他说回头给你整个模板引擎,不过我估计他给我整模板引擎整的就把我整下岗了。
所以我很着急啊,接着我磨蹭了大佬好久,大佬终于把一个开源的 lua 模板引擎加上去了,不过也是 bug 很多,其实他可以告诉我的,我可以自己搞搞试试,但是我不知道模板引擎还能用开源的,我以为必须自己写。
这也算是我的一个经验不足的问题吧,现在代码跑通了,模板引擎也有了,接下来就开始开发业务。今天就写到这里,明天继续吧。
晚安!
*请认真填写需求信息,我们会在24小时内与您取得联系。