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小時內與您取得聯系。