整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          重新學習php基礎之-文件fopen()(十三)

          重新學習php基礎之-文件fopen()(十三)

          f (feof($file)) echo "文件結尾";

          php 文件處理fopen()



          php fopen()

          fopen() 函數用于在 PHP 中打開文件

          此函數的第一個參數含有要打開的文件的名稱,第二個參數規定了使用哪種模式來打開文件:

          <html>
          <body>
          
          <?php
          $file=fopen("welcome.txt","r");
          ?>
          
          </body>
          </html>
          • r 只讀。在文件的開頭開始。
          • r+ 讀/寫。在文件的開頭開始。
          • w 只寫。打開并清空文件的內容;如果文件不存在,則創建新文件
          • w+ 讀/寫。打開并清空文件的內容;如果文件不存在,則創建新文件。
          • a 追加。打開并向文件末尾進行寫操作,如果文件不存在,則創建新文件。
          • a+ 讀/追加。通過向文件末尾寫內容,來保持文件內容。
          • x 只寫。創建新文件。如果文件已存在,則返回 FALSE 和一個錯誤。
          • x+ 讀/寫。創建新文件。如果文件已存在,則返回 FALSE 和一個錯誤。

          如果 fopen() 函數不能打開指定的文件,下面的實例會生成一段消息:

          <html>
          <body>
          
          <?php
          $file=fopen("welcome.txt","r") or exit("Unable to open file!");
          ?>
          
          </body>
          </html>



          php fclose()

          fclose() 函數用于關閉打開的文件:

          <?php
          $file=fopen("test.txt","r");
          
          //執行一些代碼
          
          fclose($file);
          ?>



          php feof()

          feof() 函數檢測是否已到達文件末尾(EOF)

          在循環遍歷未知長度的數據時,feof() 函數很有用

          注釋:在 w 、a 和 x 模式下,您無法讀取打開的文件

          if (feof($file)) echo "文件結尾";



          php fgets()

          fgets() 函數用于從文件中逐行讀取文件

          在調用該函數之后,文件指針會移動到下一行

          下面的實例逐行讀取文件,直到文件末尾為止:

          <?php
          $file=fopen("welcome.txt", "r") or exit("無法打開文件!");
          // 讀取文件每一行,直到文件結尾
          while(!feof($file))
          {
              echo fgets($file). "<br>";
          }
          fclose($file);
          ?>



          php fgetc()

          fgetc() 函數用于從文件中逐字符地讀取文件

          注釋:在調用該函數之后,文件指針會移動到下一個字符。

          下面的實例逐字符地讀取文件,直到文件末尾為止



          php Filesystem

          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 很多,其實他可以告訴我的,我可以自己搞搞試試,但是我不知道模板引擎還能用開源的,我以為必須自己寫。

          這也算是我的一個經驗不足的問題吧,現在代碼跑通了,模板引擎也有了,接下來就開始開發業務。今天就寫到這里,明天繼續吧。

          晚安!


          主站蜘蛛池模板: 国产午夜一区二区在线观看| 99久久无码一区人妻a黑| 无码日韩人妻AV一区二区三区| 精品少妇ay一区二区三区| 黑人一区二区三区中文字幕| 久久精品道一区二区三区| 视频在线观看一区| 亚洲丰满熟女一区二区哦| 亚洲无删减国产精品一区| 91国在线啪精品一区| 一区二区三区精品视频| 国内精品一区二区三区最新| 亚洲另类无码一区二区三区| 亚洲电影一区二区| 免费av一区二区三区| 久久精品中文字幕一区| 国产婷婷一区二区三区| 亚洲成a人一区二区三区| 美女免费视频一区二区| 一区二区三区www| 一区二区三区视频观看| 精品一区二区三区在线视频观看| 国产伦精品一区二区三区视频小说| 精品少妇ay一区二区三区| 亚洲一区中文字幕| 亚洲码欧美码一区二区三区| 中文字幕日韩精品一区二区三区| 无码国产精品一区二区免费式直播| 91在线一区二区| 中文字幕乱码一区久久麻豆樱花| 亚洲日本久久一区二区va| 国产99久久精品一区二区| 亚洲国产一区二区三区在线观看| 无码视频免费一区二三区| 国产综合无码一区二区色蜜蜜| 视频一区视频二区日韩专区| 中文字幕无线码一区| 国产精品伦一区二区三级视频| 麻豆AV一区二区三区久久| 亚洲熟妇成人精品一区| 国产主播一区二区三区|