有趣的文件編程

【PHP5函數】
https://segmentfault.com/a/11...
本次要實現與上篇文章中同樣效果的案例,即'百度一下'變爲'Lin一下'.php

但這次使用的是php5的新增函數,較爲推薦的:html

file_get_contents()    //獲取文件或遠程地址的所有內容:本質fopen(),fread(),fclose()
file_put_contents()    //把數據存儲爲文件,但任意類型的數據存儲後再次讀取,都將是字符串:本質fopen(),fwrite(),fclose()

如上是我拎出來的方法,以下是手冊中的詳細說明(太詳細,有點duo,儘可能講白話。。。)segmentfault

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )

代碼實現瀏覽器

<?php
header('content-type:text/html;charset=utf-8');
echo str_replace('百度','Lin',file_get_contents('http://www.baidu.com'));

效果展現app

clipboard.png

不想展現,本地存儲怎麼破?函數

<?php
    header('content-type:text/html;charset=utf-8');
    $dataStr =   str_replace('百度','Lin',file_get_contents('http://www.baidu.com')); //獲取數據,查找替換
    $savePath = './baiduIndex.txt';                                                   //存儲路徑
    file_put_contents($savePath,$dataStr);                                            //數據存儲爲文件

效果展現:當前目錄下,會生成一個baiduIndex.txt存放查找替換後的http://www.baidu.com首頁google

【文件遍歷】
直接上函數編碼

/**
 * 讀取文件夾下的全部文件
 * @param string $dir   目錄名
 */
function readAllFile($dir = ''){
    if(!is_dir($dir)) die('非法的目錄');
    echo '<ul>';                                            //html標籤在這裏是爲了目錄輸出的層次感
    $r = opendir($dir);                                     //文件讀寫三部曲:打開得到引用->讀寫->關閉資源
    while(false !== ($file =  readdir($r))){                //必須全等判斷,以排除文件名爲0,false的狀況
        if($file == '.' || $file=='..') continue;           //無心義的輸出,幹掉
        $file = iconv('gbk','utf-8',$file);                 //本地ansi是gbk的存儲(chcp命令可查),輸出到瀏覽器要轉爲utf-8,纔不至亂碼
        echo '<li>'.$file.'</li>';
        $file = iconv('utf-8','gbk',$file);                 //判斷路徑時,要還原編碼
        $path = $dir.'/'.$file;
        if(is_dir($path)) readAllFile($path);               //若是子文件是個目錄,就遞歸調用
    }
    echo '</ul>';
    closedir($r);                                           //關閉資源
}
//調用
readAllFile('./php/fileTest');

效果實現spa

clipboard.png

【文件下載】
瀏覽器會盡量的解析,能解析的就直接輸出,不能解析的就會如下載的方式來處理.firefox

header('content-type:text/html;charset=utf-8');    //旨在告訴瀏覽器,以html方式解析Dom

那麼咱們能夠利用http協議(header函數和響應頭),告訴瀏覽器以怎樣的方式來處理返回的數據。
這裏,咱們以下載爲例:

<?php
    header('content-type:application/octet-stream');                //1.返回:以二進制
    $filename = 'down.php';         
    header("content-disposition:attachment;filename=$filename");    //2.處理:附件形式存儲在down.php中
    echo file_get_contents('one.php');                              //3.輸出:到瀏覽器

如何調用

做爲一個請求地址,放到a標籤,點擊便可實現下載。
但若是直接運行呢?

效果實現
google

clipboard.png

firefox

clipboard.png

相關文章
相關標籤/搜索