찾다
백엔드 개발PHP 튜토리얼[开心学php100天]第三天:不羁的PHP文件操作_PHP教程

[开心学php100天]第三天:不羁的PHP文件操作_PHP教程

Jul 14, 2016 am 10:09 AM
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으로 문의하세요.
과대 광고 : 오늘 PHP의 역할을 평가합니다과대 광고 : 오늘 PHP의 역할을 평가합니다Apr 12, 2025 am 12:17 AM

PHP는 현대적인 프로그래밍, 특히 웹 개발 분야에서 강력하고 널리 사용되는 도구로 남아 있습니다. 1) PHP는 사용하기 쉽고 데이터베이스와 완벽하게 통합되며 많은 개발자에게 가장 먼저 선택됩니다. 2) 동적 컨텐츠 생성 및 객체 지향 프로그래밍을 지원하여 웹 사이트를 신속하게 작성하고 유지 관리하는 데 적합합니다. 3) 데이터베이스 쿼리를 캐싱하고 최적화함으로써 PHP의 성능을 향상시킬 수 있으며, 광범위한 커뮤니티와 풍부한 생태계는 오늘날의 기술 스택에 여전히 중요합니다.

PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?PHP의 약한 참고 자료는 무엇이며 언제 유용합니까?Apr 12, 2025 am 12:13 AM

PHP에서는 약한 참조가 약한 회의 클래스를 통해 구현되며 쓰레기 수집가가 물체를 되 찾는 것을 방해하지 않습니다. 약한 참조는 캐싱 시스템 및 이벤트 리스너와 같은 시나리오에 적합합니다. 물체의 생존을 보장 할 수 없으며 쓰레기 수집이 지연 될 수 있음에 주목해야합니다.

PHP의 __invoke 마법 방법을 설명하십시오.PHP의 __invoke 마법 방법을 설명하십시오.Apr 12, 2025 am 12:07 AM

\ _ \ _ 호출 메소드를 사용하면 객체를 함수처럼 호출 할 수 있습니다. 1. 객체를 호출 할 수 있도록 메소드를 호출하는 \ _ \ _ 정의하십시오. 2. $ obj (...) 구문을 사용할 때 PHP는 \ _ \ _ invoke 메소드를 실행합니다. 3. 로깅 및 계산기, 코드 유연성 및 가독성 향상과 같은 시나리오에 적합합니다.

동시성에 대해 PHP 8.1의 섬유를 설명하십시오.동시성에 대해 PHP 8.1의 섬유를 설명하십시오.Apr 12, 2025 am 12:05 AM

섬유는 PHP8.1에 도입되어 동시 처리 기능을 향상시켰다. 1) 섬유는 코 루틴과 유사한 가벼운 동시성 모델입니다. 2) 개발자는 작업의 실행 흐름을 수동으로 제어 할 수 있으며 I/O 집약적 작업을 처리하는 데 적합합니다. 3) 섬유를 사용하면보다 효율적이고 반응이 좋은 코드를 작성할 수 있습니다.

PHP 커뮤니티 : 자원, 지원 및 개발PHP 커뮤니티 : 자원, 지원 및 개발Apr 12, 2025 am 12:04 AM

PHP 커뮤니티는 개발자 성장을 돕기 위해 풍부한 자원과 지원을 제공합니다. 1) 자료에는 공식 문서, 튜토리얼, 블로그 및 Laravel 및 Symfony와 같은 오픈 소스 프로젝트가 포함됩니다. 2) 지원은 StackoverFlow, Reddit 및 Slack 채널을 통해 얻을 수 있습니다. 3) RFC에 따라 개발 동향을 배울 수 있습니다. 4) 적극적인 참여, 코드에 대한 기여 및 학습 공유를 통해 커뮤니티에 통합 될 수 있습니다.

PHP vs. Python : 차이점 이해PHP vs. Python : 차이점 이해Apr 11, 2025 am 12:15 AM

PHP와 Python은 각각 고유 한 장점이 있으며 선택은 프로젝트 요구 사항을 기반으로해야합니다. 1.PHP는 간단한 구문과 높은 실행 효율로 웹 개발에 적합합니다. 2. Python은 간결한 구문 및 풍부한 라이브러리를 갖춘 데이터 과학 및 기계 학습에 적합합니다.

PHP : 죽어 가거나 단순히 적응하고 있습니까?PHP : 죽어 가거나 단순히 적응하고 있습니까?Apr 11, 2025 am 12:13 AM

PHP는 죽지 않고 끊임없이 적응하고 진화합니다. 1) PHP는 1994 년부터 새로운 기술 트렌드에 적응하기 위해 여러 버전 반복을 겪었습니다. 2) 현재 전자 상거래, 컨텐츠 관리 시스템 및 기타 분야에서 널리 사용됩니다. 3) PHP8은 성능과 현대화를 개선하기 위해 JIT 컴파일러 및 기타 기능을 소개합니다. 4) Opcache를 사용하고 PSR-12 표준을 따라 성능 및 코드 품질을 최적화하십시오.

PHP의 미래 : 적응 및 혁신PHP의 미래 : 적응 및 혁신Apr 11, 2025 am 12:01 AM

PHP의 미래는 새로운 기술 트렌드에 적응하고 혁신적인 기능을 도입함으로써 달성 될 것입니다. 1) 클라우드 컴퓨팅, 컨테이너화 및 마이크로 서비스 아키텍처에 적응, Docker 및 Kubernetes 지원; 2) 성능 및 데이터 처리 효율을 향상시키기 위해 JIT 컴파일러 및 열거 유형을 도입합니다. 3) 지속적으로 성능을 최적화하고 모범 사례를 홍보합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전