PHP學習筆記--文件目錄操做(文件上傳實例)

文件操做是每一個語言必須有的,不單單侷限於PHP,這裏咱們就僅用PHP進行講解php

php的文件高級操做和文件上傳實例我放在文章的最後部分。--之後我還會給你們寫一個PHP相似於網盤操做的例子html

注意:閱讀此文章,必須的備一個 《PHP中文手冊》或者其它能夠查詢PHP函數的手冊 由於文章有大量的示例,可是爲了節約篇幅和時間,因此請你們自行查閱PHP手冊,以明白函數的具體做用數組

一、php打開文件和關閉文件ide

  用到的函數 fopen() 、fclose()  注:打開的文件必定要關閉! 具體函數參數請查閱php手冊函數

 實例:post

<?php
            $fopen = fopen("fun.txt","rb");
            /* ...文件的其餘操做 */
            fclose($fopen);
        ?>
View Code

fopen()函數在php5中也支持url格式:學習

<?php
    $fopen = fopen("http://www.baidu.com","rb");
    while(!feof($fopen))
    {
        echo fgets($fopen);    
    }
    fclose($fopen);
?>
View Code

二、PHP的文件讀寫測試

  讀操做-ui

    用到的函數 readfile()、file()、file_get_contents()、fgets()、fgetss()、fgetc()編碼

    示例中的文件位置請根據本身的文件進行更改,不要糾結文件位置和文件名什麼的。重點在學習

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件測試</title>
</head>

<body>
<!--不須要打開文件讀取-->
<table width="500" border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td width="253" height="100" align="right" valign="middle" scope="col">使用 readfile()函數讀取文件內容:
        </td>
        <td width="241" height="100" align="center" valign="middle" scope="col">
        <!-- 使用readfile()函數讀取ee.txt文件內容 -->
        <?php readfile("ee.txt"); ?>
        </td>
    </tr>
    <tr>
        <td height="100" align="right" valign="middle">使用 file()函數讀取文件內容:
        </td>
        <td height="100" align="center" valign="middle">
        <!-- 使用file()函數讀取ee.txt文件內容 -->
        <?php
            $f_arr = file("ee.txt");
            foreach($f_arr as $cont)
            {
                echo $cont."<br />";
            }
        ?>
        </td>
    </tr>
    <tr>
        <td width="250" height="25" align="right" valign="middle" scope="col">使用 file_get_contents()函數讀取文件內容:
        </td>
        <td height="25" align="center" valign="middle" scope="col">
        <!-- 使用file_get_contents()函數讀取ee.txt文件內容 -->
        <?php
            $f_chr = file_get_contents("ee.txt");
            echo $f_chr;
        ?>
        </td>
    </tr>
</table>
<!--須要打開文件流讀取-->
<table border="1" cellpadding="0" cellspacing="0">
    <tr>
        <td align="right" valign="middle" scope="col">使用fgets()函數:</td>
        <td align="center" valign="middle" scope="col">
        <!--使用fgets()函數讀取-->
        <?php
            $fopen = fopen("fun.txt","rb");  //打開文件
            while(!feof($fopen))  //feof()函數測試指針是否到了文件結束的位置
            {
                echo fgets($fopen);        //輸出當前行    
            }
            fclose($fopen);  //關閉文件
        ?>
        </td>
    </tr>
    <tr>
        <td align="right" valign="middle" >使用fgetss()函數:</td>
        <td align="center" valign="middle">
        <!--使用fgetss()函數讀取-->
        <?php
            $fopen = fopen("fun.txt","rb");
            while(!feof($fopen))  //feof()函數測試指針是否到了文件結束的位置
            {
                echo fgetss($fopen); //輸出當前行
            }
            fclose($fopen);
        ?>
        </td>
    </tr>
    <tr>
        <td align="right" valign="middle" >使用fgetc()函數:</td>
        <td align="center" valign="middle">
        <!--使用fgetss()函數讀取-->
        <?php
            $fopen = fopen("ee.txt","rb");  //建立文件資源。打開文件流
            while(false !== ($chr = fgetc($fopen)))  //使用fgetc()函數取得一個字符串,判斷是否爲false
            {
                echo $chr;   //若是不是,輸出該字符
            }
            fclose($fopen); //關閉文件資源
        ?>
        </td>
    </tr>
</table>
</body>
</html>
View Code

     寫操做-

    用到的函數 fwrite()、 file_put_contents()

<?php
/*
    $filename = "ee.txt"; //要讀取的文件
    $fp = fopen($filename,"rb"); //打開文件
    echo fread($fp,6);  //使用 fread() 函數讀取文件內容的前32個字節
    echo "<p>";
    echo fread($fp,filesize($filename)); //輸出其他的文件內容
    */
    $filepath = "05.txt";
    $str = "此情可待成追憶   只是當時已惘然<br />";
    echo "用 fwrite() 函數寫入文件: ";
    $fopen = fopen($filepath,"wb") or die("文件不存在");
    fwrite($fopen,$str);
    fclose($fopen);
    readfile($filepath);
    echo "<p>用 file_put_contents() 函數寫入文件: ";
    file_put_contents($filepath,$str);
    readfile($filepath);
?>
View Code

 三、php文件自己的操做

       本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改

<?php
    date_default_timezone_set('Asia/Shanghai');  //PHP5以上版本支持 --時區的設置,一下子會有涉及到時間
    //php文件操做 --本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改
    
    /*用rename()函數文件重命名*/
    rename("123.txt","321.txt");
    
    /*用copy()函數 複製文件*/
    copy("ee.txt","upfile/ee.txt");
    
    /*用unlink()函數 刪除文件*/
    unlink("321.txt");
    
    /*用fileatime()函數 返回文件最後一次訪問的時間 --默認是以unix時間戳來訪問的*/
    echo "Last access time: ".date("Y-m-d H:i:s",fileatime("ee.txt"));
    
    /*用filemtime()函數 返回文件最後一次被修改的時間 --默認是以unix時間戳來訪問的*/
    echo "Last modified time: ".date("Y-m-d H:i:s",filemtime("ee.txt"));
    
    /*用filesize() 函數取得文件大小 以字節數顯示*/
    echo filesize("ee.txt");
    
    /*用pathinfo() 函數獲取文件信息 包括路徑、類型、名字等*/
    print_r(pathinfo("ee.txt"));
    
    /*用realpath() 函數返回文件的絕對路徑*/
    echo realpath("ee.txt");
    
    /*用stat() 函數返回文件的相關信息。如大小、最後修改時間等等*/
    print_r(stat("ee.txt"));
?>
View Code

 ===================================================================

1、php目錄操做

     和文件操做相似,也要打開關閉目錄 用opendir()、和closedir()函數進行打開和關閉目錄

<?php
    $path = "D:/user/test";    //路徑應爲 "/" 而不是 "\"
    if(is_dir($path))        //檢測是不是一個目錄
    {
        if($dire = opendir($path))  //判斷打開目錄是否成功
        {
            echo $dire;            //輸出目錄指針
        }
    }
    else
    {
        echo '路勁錯誤';
        exit();
    }
    closedir($dire);    //關閉目錄
?>
View Code

2、php目錄的遊覽

     核心函數 scandir()

<?php
    $path = "D:/user";   //要遊覽的目錄
    if(is_dir($path))
    {
        $dir = scandir($path);        //使用scandir() 函數取得全部文件及目錄
        foreach($dir as $value)        //使用foreach循環遍歷
        {
            echo iconv("gbk","utf-8",$value);  //轉換編碼。
            echo "<br />";
        }
    }
    else
    {
        echo "目錄路徑錯誤!";    
    }
?>
View Code

3、php目錄的其餘操做,獲取磁盤目錄大小,新建刪除目錄等等

本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改

<?php
    /*本示例只是列舉函數,請不要直接運行。運行前請根據本身的需求更改*/
    /*用mkdir() 函數新建一個指定目錄*/
    mkdir("tt");
    
    /*用rmdir()函數 刪除一個指定的目錄,前提是目錄必須是空的*/
    rmdir("tt");
    
    /*用getcwd()函數 獲取當前工做的目錄*/
    echo getcwd();
    
    /*用chdir() 函數更改當前目錄爲工做目錄*/
    echo getcwd();
    echo "<br />";
    chdir("../");  //更改成返回上一級
    echo getcwd(); //從新獲取當前目錄
    
    /*用disk_free_space()函數 返回目錄中的可用空間*/
    echo disk_free_space("D:/")/pow(1024,3);  //這裏換算成了G、默認是以字節顯示的
    
    /*用disk_total_space()函數 返回目錄中的可用空間*/
    echo disk_total_space("D:/")/pow(1024,3);  //這裏換算成了G、默認是以字節顯示的
    
    /*關於PHP5之前的老遊覽目錄的方法 我就不列舉了,這裏僅僅給出函數名: readdir()、rewinddir()*/
?>
View Code

====================================================================

文件的高級運用

文件指針:

<?php
    $filename = "ee.txt";    //指定文件路徑及文件名
    if(is_file($filename))    //判斷文件是否存在
    { 
        echo "文件總字節數: ".filesize($filename)."<br />";   //輸出總字節數
        $fopen = fopen($filename,"rb");    //打開文件 , 以只讀的二進制文件格式的去
        echo "初始指針位置是: ".ftell($fopen)."<br />";  //輸出指針位置
        fseek($fopen,3);  //移動指針
        echo "使用 fseek() 函數後指針位置: ".ftell($fopen)."<br />"; //輸出移動後的指針位置
        echo "輸出當前指針後面的內容: ".fgets($fopen)."<br />"; //輸出從當前指針到行尾的內容
        if(feof($fopen))   //判斷指針是否指向文件末尾
        {
            echo "當前指針指向文件末尾: ".ftell($fopen)."<br />";  //若是指向了文件尾,則輸出指針位置
        }
        //使用rewind() 函數返回文檔流的開頭  --一旦流讀到末尾再度就讀不到數據了,
        //因此這裏要從新指向一個文件的指針
        rewind($fopen);  
        //查看使用 rewind() 函數後指針的位置
        echo "使用 rewind() 函數後指針的位置: ".ftell($fopen)."<br />";  
        echo "輸出前 6 個字節的內容: ".fgets($fopen,6);  //輸出前6個字節的內容
        fclose($fopen);  //關閉文件
    }
    else
    {
        echo "文件不存在!";    
    }
?>
View Code

文件鎖定:

<?php
    $filename = '05.txt';   //聲明要打開文件名稱
    $fopen = fopen($filename,'w');   //以w 只寫的形式打開文件
    flock($fopen,LOCK_EX);   //鎖定文件 (獨佔共享)
    fwrite($fopen,"hightman1");  //向文件中寫入數據
    flock($fopen,LOCK_UN);  //解除鎖定
    fclose($fopen);  //關閉文件指針
    readfile($filename);   //輸出文件內容
?>
View Code

====================================================================

文件的上傳

獲取上傳文件的信息:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
    <table width="500" border="0" cellpadding="0" cellspacing="0">
        <!-- 上傳文件的form表單,必須有 enctype 屬性 -->
        <form enctype="multipart/form-data" action="" method="post">
            <tr>
                <td width="150" height="30" align="right" valign="middle">請選擇上傳文件: </td>
                <!-- 上傳文件域,type類型爲file -->
                <td width="250"><input type="file" style="border:1px solid #000" name="upfile" /></td>
                <!-- 提交按鈕 -->
                <td width="100"><input type="submit" name="submit" value="上傳" /></td>
            </tr>
        </form>
    </table>
    <?php
        if(!empty($_FILES))  //檢查變量是否爲空
        {
            foreach($_FILES['upfile'] as $name=>$value)  //使用foreach循環輸出上傳文件信息的名稱和值
            {
                echo $name.'='.$value."<br />";
            }
        }
    ?>
</body>
</html>
View Code

真正的文件上傳(從臨時到指定位置):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
    <form action="" method="post" enctype="multipart/form-data" name="form">
        <input name="up_file" type="file" />
        <input type="submit" name="submit" value="上傳" />
      </form>
    <?php
        if(!empty($_FILES['up_file']['name']))  //判斷是否有上傳文件
        {
            $fileinfo = $_FILES['up_file'];  //將文件信息賦給fileinfo
            if($fileinfo['size'] < 901 && $fileinfo['size'] > 0)  //判斷文件大小
            {
                //上傳文件
                move_uploaded_file($fileinfo['tmp_name'],"upfile/".$fileinfo['name']);
                echo "文件上傳成功!";
            }
            else
            {
                echo "文件太大或者未知";    
            }
        }
    ?>
</body>
</html>
View Code

多文件上傳:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>無標題文檔</title>
</head>

<body>
    <form action="" method="post" enctype="multipart/form-data">
        <table id="up_table" border="1" bgcolor="#f0f0f0">
            <tbody id="auto">
                <tr id="show">
                    <td>上傳文件</td>
                    <td><input type="file" name="u_file[]" /></td>
                </tr>
                <tr>
                    <td>上傳文件</td>
                    <td><input type="file" name="u_file[]" /></td>
                </tr>
                <tr>
                    <td colspan="4"><input type="submit" value="上傳" /></td>
                </tr>
            </tbody>
        </table>
    </form>
    <?php
        if(!empty($_FILES['u_file']['name']))  //判斷$FILES變量是否爲空
        {
            $file_name = $_FILES['u_file']['name']; //將上傳的臨時文件名存放在數組裏
            $file_tmp_name = $_FILES['u_file']['tmp_name']; //將上傳的臨時文件路徑存放數組
            for($i = 0; $i<count($file_name); $i++)  //循環上傳文件
            {
                if($file_name[$i] != '')   //判斷上傳文件名是否爲空
                {
                    move_uploaded_file($file_tmp_name[$i],"upfile/".$i.$file_name[$i]);
                    echo "文件".$file_name[$i]."上傳成功, --改名爲".$i.$file_name[$i]."<br />";
                }
            }
        }
    ?>
</body>
</html>
View Code
相關文章
相關標籤/搜索