Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产精品综合久久2007 ,久久精彩免费视频,青青免费视频精品一区二区

          整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          重新學(xué)習(xí)php基礎(chǔ)之-文件fopen()(十三)

          重新學(xué)習(xí)php基礎(chǔ)之-文件fopen()(十三)

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

          php 文件處理fopen()



          php fopen()

          fopen() 函數(shù)用于在 PHP 中打開(kāi)文件

          此函數(shù)的第一個(gè)參數(shù)含有要打開(kāi)的文件的名稱,第二個(gè)參數(shù)規(guī)定了使用哪種模式來(lái)打開(kāi)文件:

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

          如果 fopen() 函數(shù)不能打開(kāi)指定的文件,下面的實(shí)例會(huì)生成一段消息:

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



          php fclose()

          fclose() 函數(shù)用于關(guān)閉打開(kāi)的文件:

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



          php feof()

          feof() 函數(shù)檢測(cè)是否已到達(dá)文件末尾(EOF)

          在循環(huán)遍歷未知長(zhǎng)度的數(shù)據(jù)時(shí),feof() 函數(shù)很有用

          注釋:在 w 、a 和 x 模式下,您無(wú)法讀取打開(kāi)的文件

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



          php fgets()

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

          在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一行

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

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



          php fgetc()

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

          注釋:在調(diào)用該函數(shù)之后,文件指針會(huì)移動(dòng)到下一個(gè)字符。

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



          php Filesystem

          Filesystem 函數(shù)允許您訪問(wèn)和操作文件系統(tǒng)

          Filesystem 函數(shù)是 PHP 核心的組成部分。無(wú)需安裝即可使用這些函數(shù)

          Filesystem 函數(shù)的行為受到 php.ini 中設(shè)置的影響

          .打開(kāi)文件

          定義和用法

          fopen() 函數(shù)打開(kāi)文件或者 URL。

          如果打開(kāi)失敗,本函數(shù)返回 FALSE。

          語(yǔ)法

          fopen(filename,mode,include_path,context)

          參數(shù)描述

          filename必需。規(guī)定要打開(kāi)的文件或 URL。

          mode必需。規(guī)定要求到該文件/流的訪問(wèn)類型。可能的值見(jiàn)下表。

          include_path可選。如果也需要在 include_path 中檢索文件的話,可以將該參數(shù)設(shè)為 1 或 TRUE。

          context可選。規(guī)定文件句柄的環(huán)境。Context 是可以修改流的行為的一套選項(xiàng)。

          mode 參數(shù)的可能的值

          mode說(shuō)明

          "r"只讀方式打開(kāi),將文件指針指向文件頭。

          "r+"讀寫方式打開(kāi),將文件指針指向文件頭。

          "w"寫入方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

          "w+"讀寫方式打開(kāi),將文件指針指向文件頭并將文件大小截為零。如果文件不存在則嘗試創(chuàng)建之。

          "a"寫入方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。

          "a+"讀寫方式打開(kāi),將文件指針指向文件末尾。如果文件不存在則嘗試創(chuàng)建之。

          "x"

          創(chuàng)建并以寫入方式打開(kāi),將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級(jí)別的錯(cuò)誤信息。如果文件不存在則嘗試創(chuàng)建之。

          這和給底層的 open(2) 系統(tǒng)調(diào)用指定 O_EXCL|O_CREAT 標(biāo)記是等價(jià)的。

          此選項(xiàng)被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。

          "x+"

          創(chuàng)建并以讀寫方式打開(kāi),將文件指針指向文件頭。如果文件已存在,則 fopen() 調(diào)用失敗并返回 FALSE,并生成一條 E_WARNING 級(jí)別的錯(cuò)誤信息。如果文件不存在則嘗試創(chuàng)建之。

          這和給底層的 open(2) 系統(tǒng)調(diào)用指定 O_EXCL|O_CREAT 標(biāo)記是等價(jià)的。

          此選項(xiàng)被 PHP 4.3.2 以及以后的版本所支持,僅能用于本地文件。

          說(shuō)明

          fopen() 將 filename 指定的名字資源綁定到一個(gè)流上。如果 filename 是 "scheme://..." 的格式,則被當(dāng)成一個(gè) URL,PHP 將搜索協(xié)議處理器(也被稱為封裝協(xié)議)來(lái)處理此模式。如果該協(xié)議尚未注冊(cè)封裝協(xié)議,PHP 將發(fā)出一條消息來(lái)幫助檢查腳本中潛在的問(wèn)題并將 filename 當(dāng)成一個(gè)普通的文件名繼續(xù)執(zhí)行下去。

          如果 PHP 認(rèn)為 filename 指定的是一個(gè)本地文件,將嘗試在該文件上打開(kāi)一個(gè)流。該文件必須是 PHP 可以訪問(wèn)的,因此需要確認(rèn)文件訪問(wèn)權(quán)限允許該訪問(wèn)。如果激活了安全模式或者 open_basedir 則會(huì)應(yīng)用進(jìn)一步的限制。

          如果 PHP 認(rèn)為 filename 指定的是一個(gè)已注冊(cè)的協(xié)議,而該協(xié)議被注冊(cè)為一個(gè)網(wǎng)絡(luò) URL,PHP 將檢查并確認(rèn) allow_url_fopen 已被激活。如果關(guān)閉了,PHP 將發(fā)出一個(gè)警告,而 fopen 的調(diào)用則失敗。

          例:fopen.php

          <?php

          @fopen("file.txt", "r");//只讀打開(kāi),將文件指針指向文件頭

          @fopen("file.txt", "w");//寫入打開(kāi),將文件指針指向文件頭 @ 可以屏蔽一些警告信息,但頻繁使用 @ 會(huì)造成程序運(yùn)行過(guò)慢

          ?>

          結(jié)果:

          在北京寫代碼(31)

          作者:魯棒棒

          寫于:20240322

          正文

          上一篇寫到了我的第一個(gè)工作所面對(duì)的需求,以及使用的框架,今天來(lái)詳細(xì)記錄一下我當(dāng)時(shí)做研發(fā)所面對(duì)的一些問(wèn)題和一些困惑。當(dāng)時(shí)因?yàn)槭鞘褂昧?openresty 這個(gè)框架,這個(gè)框架貌似是用在爬蟲(chóng)里的,我近期又研究了一下這個(gè)框架,這個(gè)框架貌似不太適合把比較復(fù)雜的業(yè)務(wù)放在里面,所以我仔細(xì)考慮之后,也沒(méi)太弄明白為什么非要讓我用這個(gè)框架去做。

          當(dāng)然這個(gè)抽取數(shù)據(jù)并放到 web 頁(yè)面中的功能本身也不復(fù)雜,放在 nginx 里,也不能說(shuō)不行,但是可用的替代方案實(shí)在是太多了,為什么偏要用 lua 這套東西呢?我到現(xiàn)在也沒(méi)有十分清楚,同時(shí)我的上級(jí)也不跟我講為什么,跟我對(duì)接的說(shuō)辭就是

          “我們公司現(xiàn)在在用的一個(gè)東西是 openresty,你看一下,之后你要用這個(gè)東西來(lái)寫代碼,這個(gè)是 lua 的,你看下 lua,今天就開(kāi)始寫吧”

          然后我就吭哧吭哧滿頭大汗的開(kāi)始搞了,我認(rèn)為不外乎幾點(diǎn)原因,但是都是我自己的推測(cè),除非我去問(wèn)一下我當(dāng)時(shí)的領(lǐng)導(dǎo)。首先就是公司技術(shù)棧的適應(yīng)問(wèn)題,現(xiàn)在公司的項(xiàng)目有一部分是基于 openresty 的,讓我用這個(gè)東西來(lái)寫業(yè)務(wù),可能也是出于適應(yīng)公司文化上的考慮。

          其次還有一個(gè)原因就是我面試的時(shí)候所面的職位是 “Python 程序員” 當(dāng)時(shí)不讓我做 python 方面的工作,可能是想在實(shí)習(xí)期,給我一個(gè)比較全面的測(cè)試,比如學(xué)習(xí)技術(shù)的速度,對(duì)業(yè)務(wù)的理解,抗壓能力等等。我認(rèn)為這個(gè)理由可能比較靠譜,當(dāng)然在一般情況下,面試的崗位和工作的崗位不同,是經(jīng)常有這種情況的,尤其是在不太成熟的小微企業(yè),這種情況沒(méi)必要過(guò)多解釋,因?yàn)椴还苊嬖囀裁绰毼欢际?“打雜職位”,和大型科技巨頭的 “一個(gè)蘿卜一個(gè)坑” 是非常不同的,純屬個(gè)人瞎猜,不用較真。

          因?yàn)楫?dāng)時(shí)有更快的方案去實(shí)現(xiàn)整個(gè)業(yè)務(wù),但是我不能用,沒(méi)有選擇權(quán),比如用 django 或者用 flask,都是我比較熟悉的 web 框架,用起來(lái)也是比較順手,同時(shí)我覺(jué)得 openresty 內(nèi)嵌的 lua,不太好用,比較適合做一些流量轉(zhuǎn)發(fā),權(quán)限校驗(yàn)等需要在網(wǎng)關(guān)層面做的業(yè)務(wù),增刪改查用這個(gè)東西來(lái)做,可能有些牽強(qiáng),我當(dāng)時(shí)其實(shí)就這么想的,只是苦于不敢跟領(lǐng)導(dǎo)說(shuō)。

          其實(shí)還是自己的心態(tài)不夠強(qiáng)大,其次也是多年所受的教育就叫我要 “逆來(lái)順受”,人家讓你干嘛你就干嘛,這也是老祖宗教我的,現(xiàn)在我不打算這么干了,所以我選擇成為一名藝術(shù)家,我現(xiàn)在行為基本是反過(guò)來(lái)的。不是 “人家讓你干嘛你干嘛” 而是 “我想干嘛就干嘛” 當(dāng)然僅限于在干活上。生活中我選擇多參加點(diǎn)娛樂(lè)活動(dòng),這樣可以身心放松一點(diǎn)。

          明白了業(yè)務(wù),明白了需要用的技術(shù),然后我就開(kāi)始工作了,費(fèi)盡千辛萬(wàn)苦把框架搭建起來(lái)之后,終于把 “Hello World” 跑通了,跑通之后我就需要去學(xué)習(xí)使用 lua 處理 http 請(qǐng)求了。

          關(guān)于 lua 我的印象很深刻,公司當(dāng)時(shí)給我扔過(guò)來(lái)一本很厚的書,叫做 “Lua 程序設(shè)計(jì)” 這本書是 lua 的作者寫的,現(xiàn)在已經(jīng)有了第四版,而我當(dāng)時(shí)看的不是第四版,而是黃色書皮的那個(gè)版本,因?yàn)橐M快開(kāi)始寫代碼,我也沒(méi)有去翻看這本書,而是打算晚上的時(shí)候帶回住處,慢慢看。

          而在公司里,肯定不能讓別人看到你整個(gè)下午抱著書看了,而是慢慢的一點(diǎn)一點(diǎn)從 demo 中復(fù)制代碼過(guò)來(lái),然后慢慢改著,測(cè)試運(yùn)行,雖然并不十分清楚每一行代碼的用處,但是比如處理字符串,處理 table,還有獲取 http 請(qǐng)求,從 http 請(qǐng)求中獲取參數(shù)等,都是一些 web 框架的常見(jiàn)的功能。

          不外乎使用什么技術(shù),什么語(yǔ)言,協(xié)議是如此的,那么就肯定要處理各種 http 中的參數(shù),比如 query string 之類的等等。當(dāng)時(shí)我比較著急,所以覺(jué)得心情有些焦躁,心態(tài)把控的不是很好,總覺(jué)得催命一樣的感覺(jué),總之就是很不舒服,也不知道該如何緩解,很郁悶。

          就這樣一邊琢磨,一邊研究,一邊心慌的終于把 http 請(qǐng)求處理這部分跑通了,然后成功的在網(wǎng)頁(yè)上打印出了 “Hello World” 不過(guò)我對(duì)其中的原理還是一知半解的。之后便很快又遇到了另一個(gè)問(wèn)題,那就是 lua 的模板語(yǔ)言我看不懂,不會(huì)用,這就更著急了。

          當(dāng)時(shí)的程序還不是前后端分離啥的,可能現(xiàn)在參加培訓(xùn)之后上崗的程序員朋友,沒(méi)聽(tīng)說(shuō)過(guò)模板渲染,原理和現(xiàn)在流行的 nodejs 里的那個(gè) server side render 差不多,都可以說(shuō)是一種服務(wù)端渲染,反正 html 代碼都是服務(wù)器上拼裝上去的,連同 js 代碼, css 代碼,有時(shí)候也是需要在服務(wù)器端拼裝的。

          但是拼裝的時(shí)候,比如需要把某個(gè)變量的值,直接傳輸?shù)侥硞€(gè)頁(yè)面里,如果沒(méi)有模板引擎,就只能自己去用讀文件的方法 fopen 這個(gè) html 文件,用字符串讀出來(lái),然后找到 token,最后將 token 替換成變量的值。

          而有了模板引擎就不需要這樣做了,因?yàn)槟0逡孀龅墓ぷ骶褪谴鷵Q變量值和進(jìn)行計(jì)算的工作,而公司大佬寫的這個(gè)框架,一開(kāi)始是沒(méi)有模板引擎的,讓我著急了好一陣子,因?yàn)槲易约号幻靼祝抑粫?huì)用 django 里的模板引擎。

          無(wú)論如何我都解決不了模板的問(wèn)題,而且前端頁(yè)面的代碼量也比較大,很多功能都得自己寫 html 和 js 才行,我跟領(lǐng)導(dǎo)說(shuō)了,領(lǐng)導(dǎo)說(shuō)自己研究研究,我跟寫框架的大佬說(shuō),他說(shuō)回頭給你整個(gè)模板引擎,不過(guò)我估計(jì)他給我整模板引擎整的就把我整下崗了。

          所以我很著急啊,接著我磨蹭了大佬好久,大佬終于把一個(gè)開(kāi)源的 lua 模板引擎加上去了,不過(guò)也是 bug 很多,其實(shí)他可以告訴我的,我可以自己搞搞試試,但是我不知道模板引擎還能用開(kāi)源的,我以為必須自己寫。

          這也算是我的一個(gè)經(jīng)驗(yàn)不足的問(wèn)題吧,現(xiàn)在代碼跑通了,模板引擎也有了,接下來(lái)就開(kāi)始開(kāi)發(fā)業(yè)務(wù)。今天就寫到這里,明天繼續(xù)吧。

          晚安!


          主站蜘蛛池模板: 亚洲av无码一区二区乱子伦as| 国产乱码精品一区二区三区 | 亚洲福利一区二区| 亚洲av成人一区二区三区| 综合激情区视频一区视频二区| 色偷偷av一区二区三区| 福利一区二区在线| 天堂Av无码Av一区二区三区| 亚洲av乱码一区二区三区| 久久一区二区精品综合| 国产激情一区二区三区| 日本一区二区三区在线视频观看免费| 国产精品揄拍一区二区久久| 一区二区免费视频| 国产精品熟女一区二区| 国产免费一区二区三区不卡 | 中文无码精品一区二区三区| 国产一区二区三区在线电影| 大帝AV在线一区二区三区| 国产精品久久久久一区二区三区 | 亚洲一区二区三区影院| 亚洲成人一区二区| 中文字幕在线一区二区三区| 精品一区二区三区高清免费观看| 亚洲国产高清在线一区二区三区| 国产一区视频在线免费观看| 精品一区二区三区视频在线观看| 加勒比精品久久一区二区三区| 激情爆乳一区二区三区| 精品国产香蕉伊思人在线在线亚洲一区二区 | 一区二区三区亚洲视频| 久久国产高清一区二区三区| 国产一区三区三区| 亚洲av无码一区二区乱子伦as| 日韩人妻不卡一区二区三区| 久久国产精品无码一区二区三区| 国产精品亚洲一区二区麻豆 | 国产激情无码一区二区| 亚洲影视一区二区| 国产成人AV区一区二区三| 在线观看精品一区|