多数大学生出来选择的工作和专业无关
首页 > 专业知识

PHP编程中八种常见的文件操作方式

时间:2018-12-13 17:59:23 [来源]:郑州PHP培训学校

   PHP编程中八种常见的文件操作方式

  PHP处理本地服务器上的文件和目录是非常方便的,但有时候会出现权限和路径相关的问题1.打开文件
  resource fopen ( string filename, string mode [, bool use_include_path [, resource zcontext]] )$handle = fopen(filename,mode)//打开文件,返回代表此文件的资源的句柄文件名称可以使用相对路径或者绝对路径也可以使用网络协议模式,打开模式具有r\r+\w\w+\a\a+\x\x+\b在操作二进制文件时如果没有指定 'b' 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。
  为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 'b' 标记。
  以下是几种打开文件的方式
  $fp = @fopen('log.txt',"rb");
  $fp = @fopen('../log.txt',"rb");
  $fp = @fopen("http://www.runer.com.cn/default.htm","rb");//还可以使用ftp和ghoper等协议,必须启用php.ini文件中的allow_url_fopen选项////////////////////////////代码部分////////////////////////////////////////$filename1 = "userinfo.txt";//目录下或include_path中存在这个文件$filename2 = "test.txt";//目录下或include_path并不存在这个文件$resource1 = fopen($filename1,"rb");
  @$resource2 = fopen($filename2,"rb");//因为目录中不存在这个文件,并且并未使用或include_path寻找包含文件所在路径则此操作会报错,使用错误抑制符@可以迫使浏览器不输出错误信息if($resource1)
  echo "打开文件{$filename1}成功";
  if(!@fopen($filename2,"r"))
  echo "打开文件{$filename2}不成功";
  //////////////////////////////////////////////////////////////////////////---------------------输出结果----------------------------------------打开文件userinfo.txt成功
  ---------------------------------------------------------------------2.使用完毕文件后,要显式的告诉PHP已经使用完文件,让操作系统确保将文件的所有内容正确地从缓冲区刷新到硬盘使用fclose()关闭文件,
  bool fclose ( resource handle )//关闭一个已打开的文件指针3.读取文件,fopen函数的mode参数允许读取,PHP提供了几个函数从文件读取数据string fgets ( int handle [, int length] )从文件指针中读取一行,在二进制文件上尝试fgets会产生不可预测的结果如果不指定长度,默认读取1K数据,碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止string fgetss ( resource handle [, int length [, string allowable_tags]] )从文件指针中读取一行并过滤掉 HTML 标记fgetc()读取单个字符
  fread()读取任意二进制数据
  ////////////////////////////代码部分////////////////////////////////////////$handle = fopen ("test.jpg", "rb");
  $c;
  while (!feof($handle)) {
  $contents .= @fread($handle, 8192);//循环读取并将其合并为一个大块文件}
  fclose($handle);
  //////////////////////////////////////////////////////////////////////////---------------------输出结果-------------------------------------------------------------------------------------------------------------4.判断文件读取的状态
  每个文件句柄都有一个文件指针,或者一个指出下一个操作将在文件中哪里发生的游标,根据fopen函数的mode参数文件指针最初位于文件的开头(0),或者文件的末尾feof()可以判断文件是否已经到末尾(到末尾后函数返回TRUE)filesize()函数返回文件的大小 5.写入文件
  fwrite()函数执行文件写入
  ////////////////////////////代码部分////////////////////////////////////////$filename = 'test.txt';
  $somec;
  // 首先我们要确定文件存在并且可写。
  if (is_writable($filename)) {
  // 在这个例子里,我们将使用添加模式打开$filename,// 因此,文件指针将会在文件的开头,
  // 那就是当我们使用fwrite()的时候,$somecontent将要写入的地方。
  if (!$handle = fopen($filename, 'a')) {
  echo "不能打开文件 $filename";
  exit;
  }
  // 将$somecontent写入到我们打开的文件中。
  if (fwrite($handle, $somecontent) === FALSE) {echo "不能写入到文件 $filename";
  exit;
  }
  echo "成功地将 $somecontent 写入到文件$filename";fclose($handle);
  } else {
  }
  echo "文件 $filename 不可写";
  //////////////////////////////////////////////////////////////////////////---------------------输出结果----------------------------------------成功地将 添加这些文字到文件 写入到文件test.txt---------------------------------------------------------------------对于二进制数据,必须指定第三个参数,它包含写入到磁盘的数据字节数$result = @fwrite($fp,$binary_data,mb_strlen($binary_data,'8bit'));6.文件权限和其他信息
  is_readable()//判断文件是否可读
  is_writeable()//判断文件是否可写
  is_writable()//判断文件是否可写
  fileperms()//判断文件的权限(UNIX风格的文件权限测试函数)file_exists()//是否存在这个文件
  fileowner()//判断文件所属用户
  filegroup()//判断文件所属组
  7.删除和重命名文件
  unlink()//删除文件
  rename()//重命名文件
  8.访问目录
  目录访问建议使用前向斜线"/",兼容windows和unix系统basename()//返回不包括路径信息的文件名
  dirname()//返回文件名的目录部分
  realpath()//接受相对路径,返回文件的绝对路径pathinfo()//提取给定路径的目录名,基本文件名和扩展名opendir()//打开目录,返回资源句柄
  readdir()//读取目录项
  rewinddir()//将读取指针返回开头
  closedir()//关闭读取句柄
  chdir()//改变当前脚本执行期间的当前工作目录mkdir()//创建目录
  rmdir()删除目录
  ////////////////////////////代码部分//////////////////////////////////////////////////////////////////////////////////////////////////////////////////---------------------输出结果----------------------------------------filename: web : filetype: dir
  filename: study : filetype: dir
  PHP配置心得包含MYSQL5乱码解决
  经过最近一段时间狂热的PHP编程,对WINDOWS平台下PHP的配置可算是深有感触,一开始我用的是一键安装的傻瓜包,但是考虑傻瓜包的安装版本已经落后,在真正手动配置PHP环境时遇到许多问题,在查阅了许多资料和尝试后,终于配置成功。现在,我将我的配置经验和大家分享一下,相信可以解决大家配置PHP环境的迷惑。
  首先说一下我用的软件版本。
  PHP 5.1.6
  APACHE 2.0.59(注意:APACHE 2.2.X版本以上是不支持PHP 5的)MYSQL 5.0.24a
  好了,现在开始安装,我先装的php5,直接解压文件到C:\php(安装到哪里并不会有影响,凭个人喜号,本文中的所有路径都以我的安装路径,请大家在自己的机器上安装的时候注意修改为自己的路径),接着安装APACHE,我直接把它装到C盘根目录下,在安装过程中,会出现3个文本框,上面两个输入你的本机IP,最下面的输入你的EMAIL,好的。安装完毕。现在编辑..\Apache Group\Apache2\conf\下的httpd.conf文件。用记事本打开该文件,在最后添上这两行代码:
  LoadModule php5_module "C:/php/php5apache2.dll"AddType application/x-httpd-php .php
  我在C:\目录下建立了一个www的目录用于存放我的站点文件,在httpd.conf里找到这样一句话:DocumentRoot "C:/Apache2/htdocs"改成了DocumentRoot "C:/www"。这样,就将主目录设置成了C:\www。如果你不想更改主目录位置,可以不更改此项。
  修改目录的默认首页:
  找到DirectoryIndex 后面写上你想设置为首页的文件名,如:index.html index.php等。
  语言优先级,找到下列语句
  LanguagePriority zh-CN zh-TW en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv把中文(zh-CN zh-TW)的部分剪切放到前面(也就是将原来文件中的相应部分改成如上的。
  其他也没什么好改动的。APACH的配置就到这里。接着讲PHP的配置。
  把php.ini-dist复制到C:\windows 下改名为 php.ini(装过php的都做过吧)然后修改了几个地方:
  在Data Handling下找到post_max_size = 8M
  这是PHP将接受的POST数据最大大小,可更改为20M。
  在Paths and Directories下找到extension_dir=这里设置的是PHP搜索扩展库的位置,将其路径设为extensions文件夹的位置,即改成:
  extension_dir= "C:\php\ext"
  在File Uploads下找到upload_max_filesize = 2M,允许上传的的最大文件大小可更改为20M。
  Dynamic Extensions
  这里是PHP扩展设置部分,列出了PHP所有的可支持扩展,前面都加了分号注释,表示目前PHP配置不支持扩展,我们可以将分号去掉让PHP支持该扩展下面列出的是几个常用且较实用的PHP扩展
  把下面几句前面的分号去掉
  ;extension=php_mbstring.dll
  ;extension=php_dba.dll
  ;extension=php_dbase.dll
  ;extension=php_filepro.dll
  ;extension=php_gd2.dll
  ;extension=php_imap.dll
  ;extension=php_mysql.dll
  到这里php.ini就配置结束。接着很重要的一点将C:\PHP\libmysql.dll,C:\PHP\ext\php_mysql.dll,C:\PHP\ext\php_mysqli.dll拷贝到C:\Windows\system32下,这样PHP5才能支持MYSQL。
  重起APACHE,在主目录下新建一个记事本文件test在里面输入<?php
  phpinfo();
  ?>
  保存后修改后缀名为PHP。
  PHP5新特性: 更加面向对象化的PHP
  PHP处理对象部分的内核完全重新开发过,提供更多功能的同时也提高了性能。在以前版本的php中,处理对象和处理基本类型(数字,字符串)的方式是一样的。这种方式的缺陷是:当将对象赋值给一个变量时,或者通过参数传递对象时,对象将被完全拷贝一份。在新的版本里,上述操作将传递引用(可以把引用理解成对象的标识符),而非值。
  很多PHP程序员可能甚至没有察觉到老的对象处理方式。事实上,大多数的php应用都可以很好地运行。或者仅仅需要很少的改动。
  私有和受保护成员
  PHP5引入了私有和受保护成员变量的概念。我们可以用它来定义类成员的可见性。
  例子
  受保护成员可以被子类访问, 而私有成员只能被类本身访问。
  <?php
  class MyClass {
  private $Hello = "Hello, World!\n";
  protected $Bar = "Hello, Foo!\n";
  protected $Foo = "Hello, Bar!\n";
  function printHello() {
  print "MyClass::printHello() " . $this->Hello;print "MyClass::printHello() " . $this->Bar;print "MyClass::printHello() " . $this->Foo;}
  }
  class MyClass2 extends MyClass {
  protected $Foo;
  function printHello() {
  MyClass::printHello();                          /* Should print */print "MyClass2::printHello() " . $this->Hello; /* Shouldn't print out anything */print "MyClass2::printHello() " . $this->Bar;  /* Shouldn't print (not declared)*/print "MyClass2::printHello() " . $this->Foo;  /* Should print */}
  }
  $obj = new MyClass();
  print $obj->Hello;  /* Shouldn't print out anything */print $obj->Bar;    /* Shouldn't print out anything */print $obj->Foo;    /* Shouldn't print out anything */$obj->printHello(); /* Should print */
  $obj = new MyClass2();
  print $obj->Hello;  /* Shouldn't print out anything */print $obj->Bar;    /* Shouldn't print out anything */print $obj->Foo;    /* Shouldn't print out anything */$obj->printHello();
  ?>
  私有方法和受保护方法
  PHP5也引入了私有方法和受保护方法的概念。
  例子:
  <?php
  class Foo {
  private function aPrivateMethod() {
  echo "Foo::aPrivateMethod() called.\n";
  }
  protected function aProtectedMethod() {
  echo "Foo::aProtectedMethod() called.\n";$this->aPrivateMethod();
  }
  }
  class Bar extends Foo {
  public function aPublicMethod() {
  echo "Bar::aPublicMethod() called.\n";
  $this->aProtectedMethod();
  }
  }
  $o = new Bar;
  $o->aPublicMethod();
  ?>
  以前的不使用类的老代码,没有访问修饰符(public, protected, private)的代码可以不经改动运行。
  抽象类和抽象方法
  Php5也引入了抽象类和抽象方法的概念。抽象方法只是声明了方法的签名并不提供它的实现。包含抽象方法的类必须被声明成抽象类。
  例子:
  <?php
  abstract class AbstractClass {
  abstract public function test();
  }
  class ImplementedClass extends AbstractClass {public function test() {
  echo "ImplementedClass::test() called.\n";}
  }
  $o = new ImplementedClass;
  $o->test();
  ?>
  抽象类不能被实例化。以前的不使用抽象类的老代码可以不经改动运行。
  接口
  Php5引入了接口。一个类可以实现多个接口。
  例子:
  <?php
  interface Throwable {
  public function getMessage();
  }
  class MyException implements Throwable {
  public function getMessage() {
  // ...
  }
  }
  ?>
  以前的不使用接口的老代码可以不经改动运行
  类的型别提示
  PHP5依然是弱类型的,不过在定义函数参数时,可以使用类的型别提示来声明期望传入的对象类型Example
  <?php
  interface Foo {
  function a(Foo $foo);
  }
  interface Bar {
  function b(Bar $bar);
  }
 

上一篇:php数组转换为字符串的两种方法详解

下一篇:PHP怎么实现字符串全排列组合?