[愉快学php100天]第三天:不羁的PHP文件操作
[开心学php100天]第三天:不羁的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文件的操作,当然还有很多,由于篇幅不全部列举,欢迎大家补充有故事、有特点、需谨慎使用的文件操作函数。若上文中有不到、不当、不足、胡扯的部分请谅解和指正。
- 1楼Ivan_hy昨天 09:53
- 终于等到更了,支持你哦~沙发~~~

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

로그인 화면에 "귀하의 조직에서 PIN 변경을 요구합니다"라는 메시지가 나타납니다. 이는 개인 장치를 제어할 수 있는 조직 기반 계정 설정을 사용하는 컴퓨터에서 PIN 만료 제한에 도달한 경우 발생합니다. 그러나 개인 계정을 사용하여 Windows를 설정하는 경우 이상적으로는 오류 메시지가 나타나지 않습니다. 항상 그런 것은 아니지만. 오류가 발생한 대부분의 사용자는 개인 계정을 사용하여 신고합니다. 조직에서 Windows 11에서 PIN을 변경하도록 요청하는 이유는 무엇입니까? 귀하의 계정이 조직과 연결되어 있을 수 있으므로 이를 확인하는 것이 기본 접근 방식입니다. 도메인 관리자에게 문의하면 도움이 될 수 있습니다! 또한 잘못 구성된 로컬 정책 설정이나 잘못된 레지스트리 키로 인해 오류가 발생할 수 있습니다. 지금 바로

Windows 11은 신선하고 우아한 디자인을 전면에 내세웠습니다. 현대적인 인터페이스를 통해 창 테두리와 같은 미세한 세부 사항을 개인화하고 변경할 수 있습니다. 이 가이드에서는 Windows 운영 체제에서 자신의 스타일을 반영하는 환경을 만드는 데 도움이 되는 단계별 지침을 설명합니다. 창 테두리 설정을 변경하는 방법은 무엇입니까? +를 눌러 설정 앱을 엽니다. Windows개인 설정으로 이동하여 색상 설정을 클릭합니다. 색상 변경 창 테두리 설정 창 11" Width="643" Height="500" > 제목 표시줄 및 창 테두리에 강조 색상 표시 옵션을 찾아 옆에 있는 스위치를 토글합니다. 시작 메뉴 및 작업 표시줄에 강조 색상을 표시하려면 시작 메뉴와 작업 표시줄에 테마 색상을 표시하려면 시작 메뉴와 작업 표시줄에 테마 표시를 켭니다.

index.html은 웹 페이지의 홈 페이지 파일을 나타내며 웹 사이트의 기본 페이지입니다. 사용자가 웹사이트를 방문하면 일반적으로 index.html 페이지가 먼저 로드됩니다. HTML(HypertextMarkupLanguage)은 웹 페이지를 만드는 데 사용되는 마크업 언어이며 index.html도 HTML 파일입니다. 여기에는 웹페이지의 구조와 콘텐츠는 물론 서식 지정과 레이아웃에 사용되는 태그와 요소도 포함됩니다. 다음은 index.html 코드의 예입니다. <

기본적으로 Windows 11의 제목 표시줄 색상은 선택한 어두운/밝은 테마에 따라 다릅니다. 그러나 원하는 색상으로 변경할 수 있습니다. 이 가이드에서는 이를 변경하고 데스크톱 환경을 개인화하여 시각적으로 매력적으로 만드는 세 가지 방법에 대한 단계별 지침을 논의합니다. 활성 창과 비활성 창의 제목 표시줄 색상을 변경할 수 있습니까? 예, 설정 앱을 사용하여 활성 창의 제목 표시줄 색상을 변경하거나 레지스트리 편집기를 사용하여 비활성 창의 제목 표시줄 색상을 변경할 수 있습니다. 이러한 단계를 알아보려면 다음 섹션으로 이동하세요. Windows 11에서 제목 표시줄 색상을 변경하는 방법은 무엇입니까? 1. 설정 앱을 사용하여 +를 눌러 설정 창을 엽니다. Windows"개인 설정"으로 이동한 다음

작업 표시줄 축소판은 재미있을 수도 있지만 주의를 산만하게 하거나 짜증나게 할 수도 있습니다. 이 영역 위로 얼마나 자주 마우스를 가져가는지 고려하면 실수로 중요한 창을 몇 번 닫았을 수도 있습니다. 또 다른 단점은 더 많은 시스템 리소스를 사용한다는 것입니다. 따라서 리소스 효율성을 높일 수 있는 방법을 찾고 있다면 비활성화하는 방법을 알려드리겠습니다. 그러나 하드웨어 사양이 이를 처리할 수 있고 미리 보기가 마음에 들면 활성화할 수 있습니다. Windows 11에서 작업 표시줄 축소판 미리 보기를 활성화하는 방법은 무엇입니까? 1. 설정 앱을 사용하여 키를 탭하고 설정을 클릭합니다. Windows에서는 시스템을 클릭하고 정보를 선택합니다. 고급 시스템 설정을 클릭합니다. 고급 탭으로 이동하여 성능 아래에서 설정을 선택합니다. "시각 효과"를 선택하세요.

Windows Installer 페이지에 "OOBELANGUAGE" 문과 함께 "문제가 발생했습니다."가 표시됩니까? 이러한 오류로 인해 Windows 설치가 중단되는 경우가 있습니다. OOBE는 즉시 사용 가능한 경험을 의미합니다. 오류 메시지에서 알 수 있듯이 이는 OOBE 언어 선택과 관련된 문제입니다. 걱정할 필요가 없습니다. OOBE 화면 자체에서 레지스트리를 편집하면 이 문제를 해결할 수 있습니다. 빠른 수정 – 1. OOBE 앱 하단에 있는 “다시 시도” 버튼을 클릭하세요. 그러면 더 이상의 문제 없이 프로세스가 계속됩니다. 2. 전원 버튼을 사용하여 시스템을 강제 종료합니다. 시스템이 다시 시작된 후 OOBE가 계속되어야 합니다. 3. 인터넷에서 시스템 연결을 끊습니다. 오프라인 모드에서 OOBE의 모든 측면을 완료하세요.

Windows 11의 디스플레이 크기 조정과 관련하여 우리 모두는 서로 다른 선호도를 가지고 있습니다. 큰 아이콘을 좋아하는 사람도 있고, 작은 아이콘을 좋아하는 사람도 있습니다. 그러나 올바른 크기 조정이 중요하다는 점에는 모두가 동의합니다. 잘못된 글꼴 크기 조정이나 이미지의 과도한 크기 조정은 작업 시 생산성을 저하시킬 수 있으므로 시스템 기능을 최대한 활용하려면 이를 사용자 정의하는 방법을 알아야 합니다. Custom Zoom의 장점: 화면의 텍스트를 읽기 어려운 사람들에게 유용한 기능입니다. 한 번에 화면에서 더 많은 것을 볼 수 있도록 도와줍니다. 특정 모니터 및 응용 프로그램에만 적용되는 사용자 정의 확장 프로필을 생성할 수 있습니다. 저사양 하드웨어의 성능을 향상시키는 데 도움이 될 수 있습니다. 이를 통해 화면의 내용을 더 효과적으로 제어할 수 있습니다. 윈도우 11을 사용하는 방법

화면 밝기는 최신 컴퓨팅 장치를 사용할 때 필수적인 부분이며, 특히 화면을 장시간 볼 때 더욱 그렇습니다. 눈의 피로를 줄이고, 가독성을 높이며, 콘텐츠를 쉽고 효율적으로 보는 데 도움이 됩니다. 그러나 설정에 따라 밝기 관리가 어려울 수 있으며, 특히 새로운 UI 변경이 적용된 Windows 11에서는 더욱 그렇습니다. 밝기를 조정하는 데 문제가 있는 경우 Windows 11에서 밝기를 관리하는 모든 방법은 다음과 같습니다. Windows 11에서 밝기를 변경하는 방법 [10가지 설명] 단일 모니터 사용자는 다음 방법을 사용하여 Windows 11에서 밝기를 조정할 수 있습니다. 여기에는 단일 모니터를 사용하는 데스크탑 시스템과 노트북이 포함됩니다. 시작하자. 방법 1: 알림 센터 사용 알림 센터에 액세스할 수 있습니다.
