搜尋
首頁後端開發php教程[开心学php100天]第三天:不羁的PHP文件操作_PHP教程

本期格言:

 
  在当年还没有数据库存在的时候,读写文件是我们程序员在空虚的夜晚唯一能干的事情之一(也许不一定哦~~~)。所以即使现在这项技术变的有多么的简单、快捷和普通,我们依然要保持细致的态度和严格的操守,千万不要忽视它的重要性和严谨性。
 
 正文开始:
 
   关于读文件我有个小故事。早年工作室开办初期,正是业务慌的时候,QQ上某好友介绍说他有个朋友单位要做网站,介绍给我做。我一听很激动,立马整理发型掐灭烟头,因为我朋友说那个客户等下要和我视频(这么潮?)。又据说他是大企业的IT主管,很正规,要我重视一下,不要太颓废。我特意拿出电动剃须刀刮了胡子。
 
    我当时很喜欢这种几千大洋的网站生意,基本上是排排界面做做css,不超过100句php代码。派个新手一个星期搞定即可,虽然可复用性和后续业务拓展根本谈不上,但是一个月的烟酒茶钱肯定到手了。当然谈肯定得我去谈,让新手去谈,我晚上基本上只能在大排档吃麻辣烫了。
 
     视频开,对面出现一个清秀男子,长相委婉,声带很细。互相很假的客套后,他骄傲的介绍了一下他所在的厂,很大,由于发展规模太快太快太快太快,现在想做一 个网站(我不知规模太快和想做网站有何太大联系)来贴合规模,末了发给我一个Excel,已经画好了网站首页结构图,以前公司的小软件都是他做的,由于他最近太忙太忙太忙太忙,所以这次想找个网络公司开发了,话末清秀男委婉的告诉我,他技术方面“很懂的哦~"。
 
       一阵冷风吹过~~~。
 
    我点开Excel,我佩服清秀男的“素描”功底,能在Excel把页面结构图画出来并且还能画的这么形象的实属少见。我表示认可,并说能按时交货,同时我已经把该Excel发给了我的美工兼程序员,让他照做,时间是3天。不过接下来清秀男的要求让我差点想把台式机显示屏给盖上,他的要求是把图片和文字直接贴在Excel里面,然后在该Excel里面建立多个工作簿(当时我已经蒙了,不知道该用$sheet还是shit来表达”工作簿“),首页只需一个 PHP页面,根据他的设定分别读取Excel里面的工作簿。这样就可以做到每隔一段时间用户打开的首页都是不同的。从而多角度展现了他们厂业务的”多元化 “和创新。
 
    清秀男在视频中得意的笑容让我很大限度上对我自己关于”可配置化、产品化“的设计思路有很大怀疑。我想拒绝这种外星人式的思维,可是清秀男坚持他的”理念“,他说他的设计已经得到他厂长充分的”高度评价“。
 
    由于清秀男”转账支票“的魔力,让我臣服了与他的这种”可配置化“思路。我只想说,他太牛了,我做不了大型企业的IT主管,是因为我真想不出用这种办法来实现CMS概念中的模板切换。
 
    当然我也不是傻子(读Office文件可不是很简单的事情),我用了一个很简单的办法解决此问题。并顺利的得到了转账支票。方法很简单,用html基本页面设计五个不同的清秀男要求的页面,然后另存为5个不同的Excel(注意:虽然保存的文件后缀是xls,但其实还是html文件),用php分别读取文件展示之。当时的代码如下:
 
     
      $fileIndex=rand(1,5); //取一个随机数,范围是1到5
 
      $fileName='index'.$fileIndex.'xls'; //拼凑一个文件名,注意:从index1.xls.....index5.xls都放在网站根目录下,和index.php同级
      $getIndex=file_get_contents($fileName); //读取文件,
       exit($getIndex); //输出读取文件的内容,并展示出来
   ?>
 
   这里有几个知识点:
 
   1、rand 函数
 
     取随机数,参数是范围rand(最小值,最大值)。例子中 就是从1到5 随机产生一个数字。然后拼凑一个文件名。如index1.xls,index2.xls,index3.xls,index4.xls,index5.xls,代表了我为清秀男设计了5个页面分别另存了5个xls文件。
 
    既然讲到了rand函数,就不得不扩展一下知识点: array_rand函数,(数组--array 我们在上一天已经唾沫横飞的讲过了,这里就不赘述了)
 
    上面随机拼凑文件的方式还可以用下面的方式
 
    $file=array("index1.xls","index2.xls","index3.xls","index4.xls","index5.xls");
    $fileName='index'.$file[array_rand($file,1)].'xls';
 
    这说明 array_rand返回的是传入的数组的键值,而第二个参数代表返回几个。如果是1则返回的是一个字符或数字变量,如果超过1,则会返回一个数组,该数组里面会包含2个随机键值。
 
   2、file_get_contents函数
 
   这个函数很重要,我们绝对要记住,也是我们非常常用的一个文件内容读取函数。它代表一次性把文件里面的内容读取出来,并读取成数组。
 
    记住:一次性。读的过程中你没法干涉它。你想让它读到一半停下来干点其他事情,两个字“不行”。
 
    记住:返回一定是一个字符串。
 
    如 $getFileContent=file_get_contents("index1.xls");  这说明 清秀男的要求我满足了。
 
     这个函数的原型是:file_get_contents(path,include_path,context,start,max_length)
 
     path:文件的路径,记住是从当前你“代码”最终执行的页面开始计算路径,这里"./"代表当前目录,"../"代表上一级目录,"http://www.cnblogs.com/http://www.cnblogs.com/http://www.cnblogs.com/" 这个代表上N级目录(麻烦自己数一下吧)
 
     include_path:很多教材和网上的文章都带了一句如果要用include_path就填1。其他没了。我想在这山寨横行的年代,大家抄的太厉害了。其实include_path 是一个可设置环境变量,你可以用set_include_path设置,也可以用get_include_path获得。作用是什么呢其实很简单,include_path就是你设置的一堆文件夹路径,为了引用或者索引方便。以上面这个例子,譬如你的网站部署在 D:/web/,里面有个index.php, 理论上你的index1..index5.xls 也会放在D:/web/,这样读取只需要用file_get_contents("index1.xls").就可以,但是假设清秀男一定要你放在其他目录也就是不放在网站目录下,
譬如是 c:/清秀男的BT文件/ ,我们千万不能写 file_get_contents("c:/清秀男的BT文件/index1.xls"); 原因很简单:在纯洁的程序中出现"清秀男“三个字是多么的猥琐,再一个将来网站移植到Linux中就运行不起来了。
正确的方式是修改 php.ini   
   include_path = .:c:/清秀男的BT文件:./其他文件夹。移植到Linux中改配置文件即可。
 
   这样的话 上面的程序 依然可以写成 file_get_contents("index1.xls",1); 尽管同级文件夹没有index1.xls,但是系统会在c:/清秀男的BT文件/下去寻找index1.xls。
 
    context:这是一个神一样的参数。很多教材都是这么说的:"一套可以修改流的行为的选项"。这句话比教科书上"资本主义”的概念以及另外一个同类某“主义”的概念解释还要难懂。
 
    实际上这个参数是这样的。file_get_contents不光可以读取本地文件,还能读取web文件。如我们要读取www.shenyisyn.org(注:作者简陋的工作室网站)首页源码,这时我们会需要设定一些参数,如http参数:
 
$options = array(
  'http'=>array(
    'method'=>'GET',//代表使用GET模式访问
    'header'=>'Content-Type:text/html;charset=gb2312'.PHP_EOL.//代表编码是中文gb2312
              'Cookie:xxxxx'.PHP_EOL  //带cookie,假如你要攻击我的网站 很可能会用到哦
  )
);
 
$context = stream_context_create($options);  
 
 然后就可以使用file_get_contents("www.shenyisyn.org",0,$context"); 来直接获取了。
 由于真正要获取网页内容不推荐使用这个函数,并且也没有真正的爬虫或者索引软件会使用php来干,因此这里就不多扩展解释这个函数在获取远程地址时的用法。php应该让它干它最适合的事情,尤其我看到有些大牛用php桌面运行库来做桌面软件,Jesus Christ,钻研精神值得赞扬,但是绝不推荐大家花过多精力去研究。有多余的时间带带孩子骗骗老婆吧,或者大家一起讨论讨论如何“更进一步深化和发扬”精神文明建设来的更实际和高尚。
 
 start,max_length:开始索引和获取最大字节数。很好理解但也没啥太大用。
 
  3、PHP_EOL
 
   这个知识点还是有点小重要的。
        \n 软回车:在Windows 中表示换行且回到下一行的最开始位置。在Linux、unix 中只表示换行,但不会回到下一行的开始位置。
        \r 软空格:
        在Linux、unix 中表示返回到当行的最开始位置。在Mac OS 中表示换行且返回到下一行的最开始位置,相当于Windows 里的 \n 的效果。
        \t 跳格(移至下一列)
          它们在双引号或定界符表示的字符串中有效,在单引号表示的字符串中无效。
\r\n 一般一起用,用来表示键盘上的回车键(Linux,Unix中),也可只用 \n(Windwos中),在Mac OS中用\r表示回车!\t表示键盘上的“TAB”键。
文件中的换行符号:windows : \n      linux,unix: \r\n
 
    废话了很久了,总结一下就是为了保证将来移植到不同平台方便。大家应该用 PHP_EOL来代替 \r或者\n或者\r\n. PHP会在不同平台中帮你自动解析。程序员一定要学会把繁琐的事情交给系统来做。不要去记这些很有可能会搞混的东西。
 
    4、PHP中文件处理的其他函数,这里简单列举一下,因为一般真实项目中很少会对文件做过多的操作,所以有的函数用的真心不是很多。因此下面只是列举一下:
 
       file(path,include_path,context) ---把文件读取,并读取成数组,根据换行符分割。上一天交过,这个函数真心不错,对于txt文件,直接可以读取成数组,省的我们还要根据换行符进行分隔。
       fopen(filename,mode,include_path,context).打开文件并返回句柄。有人会问 什么叫句柄,
      $file=fopen("文件名");  这个$file就是句柄。譬如,我的名字叫沈逸,我就是这个文件,而我的名字就是句柄。没有特殊含义,不要过于纠结,否则太纠结晚上容易起夜次数太多。
 
       fwrite(file,string,length) .写文件函数。大家可以通过度娘 看一下  file_put_contents和这个函数的区别。
       readfile(filename,include_path,context) 该函数读入一个文件并写入到输出缓冲.这个函数的特点是还会输出 读取文件的字节数。我很少用,因为以前很菜的时候把它当成了file_get_contents这个函数,结果在页面中始终出现了一个诡异的数字,经过我日夜反思才发现了端倪,懊恼无比。
      filesize 返回文件大小(字节数).  这个函数有用,但是它会有缓存。为啥呢?譬如按照清秀男的要求,测算了index1.xls的文件大小是12306KB,不小心我吃顿饭的时间,清秀男手工把index1.xls加了点数据或者删了,我如果吃完饭再来执行filesize('index1.xls')会发现还是12306KB。这就是缓存,清楚缓存需要使用clearstatcache();函数如
   $size=filesize('index1.xls');
 
    echo $size;
 
     .....这里清秀男悄悄的来修改了,修改完后,很不负责任的回家洗洗睡了。。。。
 
    clearstatcache();//我必须清一下缓存。
 
     echo filesize('index1.xls'); //这样就对了,
 
     feof(file) 函数检测是否已到达文件末尾。不常用,官方教材上说对于未知长度文件的遍历很有用,有误导。用php绝对不应该去操作一些“未知长度”的文件,这不是php该干的事情。
      unlink(filename,context)  删除文件   。不说了,我不懂你都会懂的。
      copy(source,destination) 拷贝文件。记住一点就好:文件没有就没有,有就有,反正一句话“果断的会覆盖”。
      mkdir(path,mode,recursive,context) 创建目录。这个很好理解 ,主要要注意mode:默认全部权限。还有是recursive:是否递归。譬如你要创建 1/2/3/4/5 这样层级的文件夹,其实最关键的是你要创建“5”这个文件夹,如果这个参数是false,那么如果前面的1/2/3/4没有那么会创建失败,如果设置了true,系统会自动帮你把1/2/3/4/一起给创建了。
      rmdir(path). 删除文件夹 。话说这个函数还是安全。文件夹假如不是空的,它鸟都不会鸟你。
 
 
    先写这么多,这里包含了大部分php文件的操作,当然还有很多,由于篇幅不全部列举,欢迎大家补充有故事、有特点、需谨慎使用的文件操作函数。若上文中有不到、不当、不足、胡扯的部分请谅解和指正。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/477564.htmlTechArticle本期格言: 在当年还没有数据库存在的时候,读写文件是我们程序员在空虚的夜晚唯一能干的事情之一(也许不一定哦~~~)。所以即使现在...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)如何在技嘉主板上设置键盘启动功能 (技嘉主板启用键盘开机方式)Dec 31, 2023 pm 05:15 PM

技嘉的主板怎么设置键盘开机首先,要支持键盘开机,一定是PS2键盘!!设置步骤如下:第一步:开机按Del或者F2进入bios,到bios的Advanced(高级)模式普通主板默认进入主板的EZ(简易)模式,需要按F7切换到高级模式,ROG系列主板默认进入bios的高级模式(我们用简体中文来示范)第二步:选择到——【高级】——【高级电源管理(APM)】第三步:找到选项【由PS2键盘唤醒】第四步:这个选项默认是Disabled(关闭)的,下拉之后可以看到三种不同的设置选择,分别是按【空格键】开机、按组

php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

CS玩家的首选:推荐的电脑配置CS玩家的首选:推荐的电脑配置Jan 02, 2024 pm 04:26 PM

1.处理器在选择电脑配置时,处理器是至关重要的组件之一。对于玩CS这样的游戏来说,处理器的性能直接影响游戏的流畅度和反应速度。推荐选择IntelCorei5或i7系列的处理器,因为它们具有强大的多核处理能力和高频率,可以轻松应对CS的高要求。2.显卡显卡是游戏性能的重要因素之一。对于射击游戏如CS而言,显卡的性能直接影响游戏画面的清晰度和流畅度。建议选择NVIDIAGeForceGTX系列或AMDRadeonRX系列的显卡,它们具备出色的图形处理能力和高帧率输出,能够提供更好的游戏体验3.内存电

广联达软件电脑配置推荐;广联达软件对电脑的配置要求广联达软件电脑配置推荐;广联达软件对电脑的配置要求Jan 01, 2024 pm 12:52 PM

广联达软件是一家专注于建筑信息化领域的软件公司,其产品被广泛应用于建筑设计、施工、运营等各个环节。由于广联达软件功能复杂、数据量大,对电脑的配置要求较高。本文将从多个方面详细阐述广联达软件的电脑配置推荐,以帮助读者选择适合的电脑配置处理器广联达软件在进行建筑设计、模拟等操作时,需要进行大量的数据计算和处理,因此对处理器的要求较高。推荐选择多核心、高主频的处理器,如英特尔i7系列或AMDRyzen系列。这些处理器具有较强的计算能力和多线程处理能力,能够更好地满足广联达软件的需求。内存内存是影响计算

主板上的数字音频输出接口-SPDIF OUT主板上的数字音频输出接口-SPDIF OUTJan 14, 2024 pm 04:42 PM

主板上SPDIFOUT连接线序最近我遇到了一个问题,就是关于电线的接线顺序。我上网查了一下,有些资料说1、2、4对应的是out、+5V、接地;而另一些资料则说1、2、4对应的是out、接地、+5V。最好的办法是查看你的主板说明书,如果找不到说明书,你可以使用万用表进行测量。首先找到接地,然后就可以确定其他的接线顺序了。主板vdg怎么接线连接主板的VDG接线时,您需要将VGA连接线的一端插入显示器的VGA接口,另一端插入电脑的显卡VGA接口。请注意,不要将其插入主板的VGA接口。完成连接后,您可以

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

神舟炫龙m7e8s3如何启用独立显卡直连?神舟炫龙m7e8s3如何启用独立显卡直连?Jan 04, 2024 am 09:24 AM

神舟炫龙m7独显直连怎么开要开启神舟炫龙m7的独立显卡直连功能,您可以按照以下步骤进行操作:1.首先,确保您已经安装好了独立显卡的驱动程序。您可以前往神舟官方网站或独立显卡厂商官网下载并安装适合您显卡型号的最新驱动程序。2.在电脑桌面上,右键单击空白处,在弹出的菜单中选择“NVIDIA控制面板”(如果是AMD显卡,则选择“AMDRadeon设置”)。3.在控制面板中,找到“3D设置”或类似命名的选项,点击进入。4.在“3D设置”中,您需要找到“全局设置”或类似命名的选项。在这里,您可以指定使用独

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),