php文件读写实例程序

 更新时间:2016年11月25日 15:48  点击:1422
在php中读文件我们最常用的就是用fgets,readfile或直接使用file_get_contents() 函数把整个文件读入一个字符串中,写文件就比较单一了我们常用用fopen与fwrite来实现文件写入。

PHP如何读文件

file_get_contents() 函数把整个文件读入一个字符串中。

例子

 代码如下 复制代码

<?php
echo file_get_contents("test.txt");
?>

输出:

This is a test file with test text.

在PHP打开了文件之后就需要对文件进行读取,一般是使用fgets()函数。

该函数可以从文件中每次读取一行内容,其不断读入数据,值到遇到本行的换行符,或者全文的结束符号EOF。

介于fgets()函数只能读取一行数据,所以若需要读取文件的所有数据,须使用循环语句来完成。比如:

示例:
代码如下:

 代码如下 复制代码
<?php
$fp = fopen("test.txt", "r");
while(! feof($fp))
{
echo fgets($fp). "<br />";
}
fclose($fp);
?>

4.fgets(从文件指针中读取一行)
语法:

fgets(filepointer)
filepointer,要读取的文件指针。如果成功,从文件中读取一行并返回字符串,如果失败,返回 FALSE。
示例:

代码如下:

 代码如下 复制代码
<?php
$fp = fopen("test.txt", "r");
if($fp)
{
for($i=1;! feof($fp);$i++)
{
echo "行".$i." : ".fgets($fp). "<br />";
}
}
else
{
echo "打开文件失败";
}
fclose($fp);
?>

假设test.txt的内容为:

hello world
hello cnblogs
hello heihaozi
hello everyone
页面输出的结果为:

行1 : hello world
行2 : hello cnblogs
行3 : hello heihaozi
行4 : hello everyone

 

其中feof()函数是用来检测文件是否结束的。该函数唯一参数就是文件指针(即$fp对应打开的文件)。

当然,在PHP中还可以使用readfile()函数一次读取整个文件。该函数包括了打开文件、读取文件并输出到浏览器中和

关闭文件。比如:

 代码如下 复制代码


<?php
$bruce=readfile("http://www.111cn.net");
echo $bruce;
?>

 
3,PHP如何关闭文件

使用函数fclose()就可以将文件关闭。

二,PHP如何写数据到文件

与PHP读取文件一样,PHP写入文件也需要:打开文件、写入数据和关闭文件。打开和关闭文件的方法上面已经说明,

那PHP中写入数据到文件是怎样的呢。

使用fwrite()函数,比如fwrite(文件路径,写入内容):

 

 代码如下 复制代码
<?php
$bruce=fopen("http://www.111cn.net/","r");
if(!$bruce)
{
    echo'文件不存在';
    exit;
}
while (!feof($bruce))
{
    $rose=fgets($bruce);
        $james=fopen("index.htm","a");
        fwrite($james,$rose);
        fclose($james);
}
fclose($bruce);
?>

<a href="index.htm">将111cn.net的内容生成了本地文件</a>

 
了解了PHP的读写文件,就可以把最简单的数据存入文本保存了

无限级分类主要就是数据库中表的存储,一个是父ID,一个是子ID通过他们来查询父级关系,然后出来我们想要的

表结构:id字段为分类标识,name字段为分类名,father_id字段为所属父分类的id,path字段为分类路径(储存该分

类祖先的集合),isdir判断是否是目录(1为是,0为否)。

例1

 代码如下 复制代码

//$count为分类等级
sort_list($str,$fatherid,$count)
{
$rs = $this->sql->re_datas("select * from sort where father_id = fatherid");
$num = $this->sql->sql_numrows();
$i=0;
$n = 1;
while(isset($rs[$i]))
{
$name = "";
for($n = 1 ; $n < $count ; $n++)
{
$name.="│ ";
}
if($i+1==$num)
{
$name.="└─".$rs[$i][name];
}
else
{
$name.="├─".$rs[$i][name];
}
if($rs[$i][isdir])
{
$str.="<span style='color:#CCCCCC'>".$name."</span>";
}
else
{
$str.=$name";
}
$temp = $count+1;
$str = $this->sort_list($str,$rs[$i][id],$temp);
$i++;
}
return $str;
}

其中$this->sql对象为sql操作类对象,re_datas()函数返回查到的数组,sql_numrows()函数返回查询到的数目

调用方法:$sort_list = sort_list($sort_list,0,1);

实例上2


id 编号
fid 父分类编号
class_name 分类名
path 分类路径,以 id 为节点,组成类似 ,1,2,3,4, 这样的字符串
———————————————————————————-
可以假设有如下的数据
id fid class_name path
—————————————————-
1  0       分类1 ,       1,
2  0       分类2 ,       2,
3  1       分类1-1 ,    1,3,
4  1       分类1-2 ,    1,4,
5  2       分类2-1 ,    2,5,
6  4       分类1-2-1 , 1,4,6,
—————————————————-

 代码如下 复制代码
<?php    
$sql=”SELECT * FROM tree order by path”;  
$result=$nbs->Query($sql);  
while($rows=$nbs->fetch_array($result)){  
    if(substr_count($rows['path'],’,')>2){  
        for($i=0;$i<(substr_count($rows['path'],’,')-2);$i++)  
            echo ‘ ‘;  
    }  
    echo $rows['class_name'].’<br>’;  
}  
?>  

代码

 代码如下 复制代码

$conn = mysql_connect ( 'localhost', 'root', 'root' );
mysql_select_db ( 'wanggou123', $conn );
mysql_query ( 'set names UTF8' );
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath";
 
$query = mysql_query ( $sql );
while ( $row=mysql_fetch_array($query)) {

/**
   * 第一种展示方法
*/
/*$space = str_repeat ( '&nbsp;&nbsp;&nbsp;&nbsp;', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
echo $space . $row ['name'] . '
';*/
/**
 第二种展示方法
*/
$space = str_repeat ( '——', count ( explode ( '-', $row ['abspath'] ) ) - 1 );
$option .= '' . $space . $row ['name'] . '<Br>';
}
echo $option;
exit();
echo '<select name="opt">' . $option . '</select>';

在php中对目录操作不像asp中的fso我们可直接使用Rmdir、Mkdir、unlink对目录文件的创建与删除,下面我来一一介绍。

Rmdir删除空目录

 代码如下 复制代码

<?
//使用rmdir函数删除目录
$dirname="mydir"; //定义变量
rmdir($dirname);
?>

删除目录成功反应ture,反之就flase

 代码如下 复制代码

<?
//使用rmdir函数删除目录
$dirname="mydir"; //定义变量
if( rmdir($dirname))
{
删除目录制作
}
else
{
删除目录成功
}
?>

Mkdir创建空目录

 代码如下 复制代码
<?
//使用mkdir函数创建目录
$dirname="mydir"; //定义变量
mkdir($dirname,0700);
?>

mkdir如果创建成功就返回ture如果错误就返回false

 代码如下 复制代码

<?php
$dirname = 'testdir';
if (mkdir($dirname, 0700)) {
    echo "目录 $dirname 创建成功";
} else {
    echo "目录 $dirname 创建失败";
}
?>


unlink 删除单个文件

 代码如下 复制代码

<?

$filename="data.txt"; //定义变量
unlink($filename);
?>

上面无法知道我们文件是否删除成功,我们加个判断即可

 代码如下 复制代码

<?php
$file = "test.txt";
if (!unlink($file))
  {
  echo ("Error deleting $file");
  }
else
  {
  echo ("Deleted $file");
  }
?>

一个php 根据生日计算星座和生肖程序,有需要的朋友可参考参考。

魔羯座(12/22 – 1/19)、水瓶座(1/20 – 2/18)、双鱼座(2/19 – 3/20)、牡羊座(3/21 – 4/20)、
金牛座(4/21 – 5/20)、双子座(5/21 – 6/21)、巨蟹座(6/22 – 7/22)、狮子座(7/23 – 8/22)、
处女座(8/23 – 9/22)、天秤座(9/23 – 10/22)、天蝎座(10/23 – 11/21)、射手座(11/22 – 12/21)

 代码如下 复制代码

/**
*getConstellation 根据出生生日取得星座
*
*@param String $brithday 用于得到星座的日期 格式为yyyy-mm-dd
*
*@param Array $format 用于返回星座的名称
*
*@return String
*/
function getConstellation($birthday, $format=null)
{
$pattern = ‘/^d{4}-d{1,2}-d{1,2}$/’;
if (!preg_match($pattern, $birthday, $matchs))
{
    return null;
}
$date = explode(‘-’, $birthday);
$year = $date[0];
$month = $date[1];
$day   = $date[2];
if ($month <1 || $month>12 || $day < 1 || $day >31)
{
    return null;
}
//设定星座数组
$constellations = array(
      ‘摩羯座’, ‘水瓶座’, ‘双鱼座’, ‘白羊座’, ‘金牛座’, ‘双子座’,
      ‘巨蟹座’,'狮子座’, ‘处女座’, ‘天秤座’, ‘天蝎座’, ‘射手座’,);
//或 ‍‍$constellations = array(
      ‘Capricorn’, ‘Aquarius’, ‘Pisces’, ‘Aries’, ‘Taurus’, ‘Gemini’,
      ‘Cancer’,'Leo’, ‘Virgo’, ‘Libra’, ‘Scorpio’, ‘Sagittarius’,);
//设定星座结束日期的数组,用于判断
$enddays = array(19, 18, 20, 20, 20, 21, 22, 22, 22, 22, 21, 21,);
//如果参数format被设置,则返回值采用format提供的数组,否则使用默认的数组
if ($format != null)
{
    $values = $format;
}
else
{
    $values = $constellations;
}
//根据月份和日期判断星座
switch ($month)
{
    case 1:
      if ($day <= $enddays[0])
      {
        $constellation = $values[0];
      }
      else
      {
        $constellation = $values[1];
      }
      break;
    case 2:
      if ($day <= $enddays[1])
      {
        $constellation = $values[1];
      }
      else
      {
        $constellation = $values[2];
      }
      break;
    case 3:
      if ($day <= $enddays[2])
      {
        $constellation = $values[2];
      }
      else
      {
        $constellation = $values[3];
      }
      break;
    case 4:
      if ($day <= $enddays[3])
      {
        $constellation = $values[3];
      }
      else
      {
        $constellation = $values[4];
      }
      break;
    case 5:
      if ($day <= $enddays[4])
      {
        $constellation = $values[4];
      }
      else
      {
        $constellation = $values[5];
      }
      break;
    case 6:
      if ($day <= $enddays[5])
      {
        $constellation = $values[5];
      }
      else
      {
        $constellation = $values[6];
      }
      break;
    case 7:
      if ($day <= $enddays[6])
      {
        $constellation = $values[6];
      }
      else
      {
        $constellation = $values[7];
      }
      break;
    case 8:
      if ($day <= $enddays[7])
      {
        $constellation = $values[7];
      }
      else
      {
        $constellation = $values[8];
      }
      break;
    case 9:
      if ($day <= $enddays[8])
      {
        $constellation = $values[8];
      }
      else
      {
        $constellation = $values[9];
      }
      break;
    case 10:
      if ($day <= $enddays[9])
      {
        $constellation = $values[9];
      }
      else
      {
        $constellation = $values[10];
      }
      break;
    case 11:
      if ($day <= $enddays[10])
      {
        $constellation = $values[10];
      }
      else
      {
        $constellation = $values[11];
      }
      break;
    case 12:
      if ($day <= $enddays[11])
      {
        $constellation = $values[11];
      }
      else
      {
        $constellation = $values[0];
      }
      break;
}
return $constellation;
}
js格式的:
根据生日的月份和日期,计算星座的js小函数(最简)
// 根据生日的月份和日期,计算星座。  http://blog.111cn.net/cuixiping/
function getAstro(month,day){
    var s=”魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯”;
    var arr=[20,19,21,21,21,22,23,23,23,23,22,22];
    return s.substr(month*2-(day<arr[month-1]?2:0),2);
}
// 取星座, 参数分别是 月份和日期
function getxingzuo(month,day){
//by Go_Rush(阿舜) from http://ashun.cnblogs.com/
var d=new Date(1999,month-1,day,0,0,0);
var arr=[];
arr.push(["魔羯座",new Date(1999, 0, 1,0,0,0)])
arr.push(["水瓶座",new Date(1999, 0,20,0,0,0)])
arr.push(["双鱼座",new Date(1999, 1,19,0,0,0)])
arr.push(["牡羊座",new Date(1999, 2,21,0,0,0)])
arr.push(["金牛座",new Date(1999, 3,21,0,0,0)])
arr.push(["双子座",new Date(1999, 4,21,0,0,0)])
arr.push(["巨蟹座",new Date(1999, 5,22,0,0,0)])
arr.push(["狮子座",new Date(1999, 6,23,0,0,0)])
arr.push(["处女座",new Date(1999, 7,23,0,0,0)])
arr.push(["天秤座",new Date(1999, 8,23,0,0,0)])
arr.push(["天蝎座",new Date(1999, 9,23,0,0,0)])
arr.push(["射手座",new Date(1999,10,22,0,0,0)])
arr.push(["魔羯座",new Date(1999,11,22,0,0,0)])
for(var i=arr.length-1;i>=0;i–){
if (d>=arr[i][1]) return arr[i][0];
}
}
function getxingzuo(month,day){
var s=”魔羯水瓶双鱼牡羊金牛双子巨蟹狮子处女天秤天蝎射手魔羯”;
var arr=[19,50,84,116,148,181,214,246,278,310,341,373,383];
for(var i=0;i<arr.length;i++){
if ((((month-1)<<5)+day) <= arr[i]) return s.substr(i*2,2);
}
return “error”;
}
计算生肖的:
function birthday2BornTag($birthday){
$year = substr($birthday,0,4);
$bornTagarray = array(“猴”, “鸡”, “狗”, “猪”, “鼠”, “牛”, “虎”, “兔”, “龙”, “蛇”,

“马”, “羊”);
$index = $year%12;
$bornTag = $bornTagarray[$index];
return $bornTag;
}
echo birthday2BornTag(’1983-12-19′);

以前讲述的都是利用js来防止用户重复提交数据,但是如果用户利用机器你的js就没有一点办法防止用户重复提交数据了,下面我来介绍php防止重复提交数据程序。

利用session来操作

 代码如下 复制代码

<?php
 session_start();
 $_SESSION['num'] = 0;
 if(isset($_POST['action'] && $_POST['action']=='submit')){
  if($_SESSION['num'] == 0){
   echo '<a href="'.$_SERVER['PHP_SELF'].'">'请再次尝试</a>;'
   $_SESSION['num'] = 1;
  }else{
   echo '您已经提交过了,请不要重复提交';
  }
 }
?>

利用cookie来解决

提交页面代码如下a.php代码如下:

 代码如下 复制代码

<form id="form1" name="form1" method="post" action="t2.php">
<p>说明
<input type="text" name="titile" />
</p>
<p>
<input type="submit" name="Submit" value="提交" />
</p>
</form>

php

 代码如下 复制代码

<?php

setcookie("onlypost", 't');        

//设置cookie,可以带上时间值。像有些论坛防止灌水就可以将你的一些基本信息存放到里面。

?>

处理页面b.php代码如下:

 代码如下 复制代码

<?php

if($_COOKIE['onlypost'] == 't'){

    print_r($_COOKIE);

    //处理提交的内容           如果验证成功则处理

    print "ok";

    setcookie("onlypost", 'f'); //改变cooike值删除也可以了
}
?>

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • AI源文件转photoshop图像变模糊问题解决教程

    今天小编在这里就来给photoshop的这一款软件的使用者们来说下AI源文件转photoshop图像变模糊问题的解决教程,各位想知道具体解决方法的使用者们,那么下面就快来跟着小编...2016-09-14
  • C++万能库头文件在vs中的安装步骤(图文)

    这篇文章主要介绍了C++万能库头文件在vs中的安装步骤(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-23
  • Zend studio文件注释模板设置方法

    步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04
  • php文件上传你必须知道的几点

    本篇文章主要说明的是与php文件上传的相关配置的知识点。PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir、upload_max_filesize、post_max_size等选项,下面一一说明。打开php.ini配置文件找到File Upl...2015-10-21
  • ant design中upload组件上传大文件,显示进度条进度的实例

    这篇文章主要介绍了ant design中upload组件上传大文件,显示进度条进度的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-10-29
  • C#使用StreamWriter写入文件的方法

    这篇文章主要介绍了C#使用StreamWriter写入文件的方法,涉及C#中StreamWriter类操作文件的相关技巧,需要的朋友可以参考下...2020-06-25
  • php实现文件下载实例分享

    举一个案例:复制代码 代码如下:<?phpclass Downfile { function downserver($file_name){$file_path = "./img/".$file_name;//转码,文件名转为gb2312解决中文乱码$file_name = iconv("utf-8","gb2312",$file_name...2014-06-07
  • C#路径,文件,目录及IO常见操作汇总

    这篇文章主要介绍了C#路径,文件,目录及IO常见操作,较为详细的分析并汇总了C#关于路径,文件,目录及IO常见操作,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 查找php配置文件php.ini所在路径的二种方法

    通常php.ini的位置在:复制代码 代码如下:/etc目录下或/usr/local/lib目录下。如果你还是找不到php.ini或者找到了php.ini修改后不生效(其实是没找对),请使用如下办法:1.新建php文件,写入如下代码复制代码 代码如下:<?phpe...2014-05-31
  • PHP判断上传文件类型的解决办法

    分享给大家php判断上传文件类型的方法,大家一起学习学习。/** * 读取文件前几个字节 判断文件类型 * @return String */ function checkTitle($filename){ $file=fopen($filename, "rb"); $bin=fread($file, 2); /...2015-10-21