国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP文件處理

PHP 擁有的多種函數可供創(chuàng)建、讀取、上傳以及編輯文件。

注意:請謹慎操作文件!

當您操作文件時必須非常小心。如果您操作失誤,可能會造成非常嚴重的破壞。

常見的錯誤是:

? 1.編輯錯誤的文件

? 2.被垃圾數據填滿硬盤

? 3. 意外刪除文件內容


PHP readfile()函數

readfile($文件名)?

功能:傳入一個文件路徑,輸出一個文件


例如 有個名為file.txt 的文件,內容如下

??Welcome in the PHP Chinese learning PHP

?用readfile()函數讀取此文件并寫到輸出流的 PHP 代碼如下(如讀取成功則 readfile() 函數返回字節(jié)數):

?字節(jié)數:英文占一個字節(jié)? gbk編碼中文占2個? utf-8中文占3個? 空格和符號占1個

<?php
echo readfile("D:WWW/item/file.txt");
?>

程序運行結果:

Welcome in the PHP Chinese learning PHP39


file_get_contents打開文件

上面的是單純打文件就直接輸出了,有沒有打開文件后,能夠賦值給一個變量的操作方式呢。

PHP當然會提供這種方式。這個方式就是PHP打開文件并返回內容的方式之一,我們來看看函數:


file_get_contents ( string filename)

功能:傳入一個文件或文件路徑,打開這個文件返回文件的內容。文件的內容是一個字符串。

例如? 有個file.txt 的文件,內容如下:

?I use the file_get_contents open

使用 file_get_contents 打開

<?php
$fileName="file.txt";
$filestring = file_get_contents($fileName);
echo $filestring;
?>

程序運行結果:

?I use the file_get_contents open

?


fopen、fread、fclose操作讀取文件

fopen ($文件名, 模式)

fread ($操作資源, 讀取長度)

fclose ($操作資源 )

通過上面的函數我們來講解資源類型的通常操作方式:

1.? 打開資源

2.? 使用相關函數進行操作

3.? 關閉資源

fopen函數 fopen函數的功能是打開文件,參數主要有兩個:

1. ?文件打開的路徑

2. ?打開文件的模式
? ? ?資源類型需要其他的函數來操作這個資源。所有的資源有打開就要有關閉。

fread函數 函數的功能的功能是讀取打開的文件資源。讀取指定長度的文件資源,讀取一部份向后移動一部份。至到文件結尾。

fclose函數 fclose函數的功能是關閉資源。資源有打開就有關閉。

?fopen的模式(下表):

? ? ? ? ?模式? ? ? ? ? 說明
  r只讀。在文件的開頭開始。
  r+讀/寫。在文件的開頭開始。


  w

只寫。打開并清空文件的內容;如果文件不存在,則創(chuàng)建新文件。

? ??

  w+

讀/寫。打開并清空文件的內容;如果文件不存在,則創(chuàng)建新文件。

? ? ?

  a

追加。打開并向文件末尾進行寫操作,如果文件不存在,則創(chuàng)建新文件。
  a+讀/追加。通過向文件末尾寫內容,來保持文件內容。

? ?

  x

只寫。創(chuàng)建新文件。如果文件已存在,則返回 FALSE 和一個錯誤。

??

  x+

讀/寫。創(chuàng)建新文件。如果文件已存在,則返回 FALSE 和一個錯誤。
  twindows下將n轉為rn
? ? ?b二進制打開模式

1.打開文件

file.txt 文件的內容如下

You're welcome

<?php
//你可以創(chuàng)建一個file.txt,以只讀模式打開
$fp = fopen('file.txt', "r");
//var_dump()操作一下$fp看看效果,輸出的是不是只有類型提示的是resource
var_dump($fp);
?>

2.讀取文件

<?php
$fp = fopen('file.txt', "r");
//打開一個文件類型后,讀取12個字節(jié)
$contents = fread($fp, 12);
?>

?3,關閉文件

<?php
$fp = fopen('file.txt', 'r');
$contents = fread($fp, 1024);
fclose($fp);
echo $contents;
?>

程序運行結果:

?You're welcome


file_put_contents和fwrite寫入文件

??file_put_contents ( string $文件路徑, string $寫入數據])

?功能:向指定的文件當中寫入一個字符串,如果文件不存在則創(chuàng)建文件。返回的是寫入的字節(jié)長度


實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$data = "我是一個兵,來自老百姓";
$numbytes = file_put_contents('binggege.txt', $data);
if($numbytes){
    echo '寫入成功,我們讀取看看結果試試:';
    echo file_get_contents('binggege.txt');
}else{
    echo '寫入失敗或者沒有權限,注意檢查';
}
?>

程序運行結果:

?寫入成功,我們讀取看看結果試試:我是一個兵,來自老百姓


fwrite ( resource $文件資源變量, string $寫入的字符串 [, int 長度])

?? :fwrite的別名函數是fputs

我們上面試了r模式,只道是讀取的時候使用,接下來我們用fwrite加上fopen中的w,寫入模式來進行文件寫入

實例

你可以試試新建個test.txt文件向里面寫入內容。然后,可以試試把test.txt刪除??纯从惺裁刺崾?。

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$filename = 'test.txt';
$fp= fopen($filename, "w");
$len = fwrite($fp, '我是一只來自南方的狼,一直在尋找心中的花姑娘');
fclose($fp);
print $len ."字節(jié)被寫入了\n";
?>

程序運行結果:

66字節(jié)被寫入了

總結:
1.不論有沒有新建都會打開文件重新寫入
2.原有的文件內容會被覆蓋掉
3.文件不存在會創(chuàng)建


對比一下以下幾個模式的不同:

  模式  說明
  r只能讀不能使用fwrite寫
  r+可操作讀、寫
  w只可以寫功能
  w+

即可讀又可以寫


實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$filename = 'test.txt';
$fp= fopen($filename, "r");
$len = fwrite($fp, '我是一只來自南方的狼,一直在尋找心中的花姑娘');
fclose($fp);
print $len .'字節(jié)被寫入了\n';
?>

程序運行結果:

?0字節(jié)被寫入了n

我們發(fā)現只用 r 的話 寫入是不成功的


創(chuàng)建臨時文件

我們之前創(chuàng)建的文件都是永久文件。

而創(chuàng)建臨時文件在我們平時的項目開發(fā)中也非常有用。創(chuàng)建臨時文件的幾個好處

1.??? 用完后即刪除

2.??? 不需要去維護這個文件的刪除狀態(tài)

例如:我需要把A的文件內容轉存B里面,把B的文件內容轉存到C里面。

就跟現實生活中一樣,我可以先用一個臨時的瓶子把B的水裝起來,然后把A的數據寫入到B里面。把臨時瓶子的水追加到C里面。

我們來學習一下這個函數:

resource tmpfile ( )

功能:創(chuàng)建一個臨時文件,返回資源類型。關閉文件即被刪除。

實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$handle = tmpfile();
//向里面寫入了數據
$numbytes = fwrite($handle, '寫入臨時文件的內容');
//關閉臨時文件,文件即被刪除
fclose($handle);
echo  '向臨時文件中寫入了'.$numbytes . '個字節(jié)';
?>

程序運行結果:

向臨時文件中寫入了27個字節(jié)


移動,拷貝,刪除文件

重命名文件

rename($舊名,$新名);

這個函數返回一個bool值,將舊的名字改為新的名字。

實例

<?php
$fileName1="text.txt";
$fileName2="text--1.txt";
rename($fileName1,$fileName2);
?>

上面的例子就是將一個text.txt的文件 改名為text--1.txt 的例子,你不妨可以試下


復制文件

?copy(源文件,目標文件)

功能:將指定路徑的源文件,復制一份到目標文件的位置。

實例

<?php
$filename = 'file.txt';  //舊文件名
$filename2 = 'copy-file.txt';  //新文件名
copy($filename, $filename2);    //修改名字。
?>

上面的例子是將一個文件名為 file.txt的文件,復制一份名為 copy-file.txt 的文件,內容一樣。


刪除文件

?unlink (指定路徑的文件)

實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$filename = 'test.txt';
unlink($filename);
?>

上面的例子是將一個文件名為 test.txt的文件刪除


文件常用的函數

filesize 檢測文件的大小

實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$filename = 'file.txt';
echo $filename . '文件大小為: ' . filesize($filename) . ' bytes';
?>

程序運行結果:

file.txt文件大小為: 14 bytes

其他操作文件的函數,讀取文件

  函數名  功能
  file把整個文件讀入一個數組中
  fgets從文件指針中讀取一行,讀到最后返回false
  fgetc從文件指針中讀取一個字符,讀到最后返回false
  ftruncate將文件截斷到給定的長度


我們通過一個實例來把上面幾個函數都用到。

我們在text.txt文件中寫入一批文件:

abcdeefghijklk
opqrst
uvwxyz
12345678

fgetc每次讀取一個

<?php
//以增加的r模式打開
$fp = fopen('text.txt','r+');
//你分發(fā)現每次只讀一個字符
echo  fgetc($fp) ."<br>";
//我要全部讀取可以,讀取一次將結果賦值一次給$string
while($string = fgetc($fp)){
    echo $string;
}
?>

程序運行結果:

?a
bcdeefghijklk opqrst uvwxyz 12345678

fgets每次打開一行:

<?php
//以增加的r模式打開
$fp = fopen('text.txt','r+');
//你分發(fā)現每次只讀一個字符
echo  fgets($fp)."<br>";
echo  fgets($fp)."<br>";
echo  fgets($fp)."<br>";
echo  fgets($fp);
?>

程序運行結果:

abcdeefghijklk
opqrst
uvwxyz
12345678


文件截取函數

<?php
//打開我們上面的text.txt文件
$file = fopen("text.txt", "a+");
//你可以數數20個字有多長,看看是不是達到效果了
echo ftruncate($file,10);
fclose($file);
?>

運行一下程序,可以打開text.txt 文件,看一下是不是有20的字節(jié)


文件的時間函數

? ? 函數? ?功能說明
? ? filectime??文件創(chuàng)建時間
? ??filemtime? 文件修改時間
? ??fileatime??文件上次訪問時間

實例

<?php
header("Content-type:text/html;charset=utf-8");    //設置編碼
$filename = 'text.txt';

if (file_exists($filename)) {
    echo "$filename"."文件的上次訪問時間是: " . date("Y-m-d H:i:s", fileatime($filename))."<br>";

    echo "$filename"."文件的創(chuàng)建時間是: " . date("Y-m-d H:i:s", filectime($filename))."<br>";

    echo "$filename"."文件的修改時間是: " . date("Y-m-d H:i:s", filemtime($filename));
}

?>

程序運行結果:

text.txt文件的上次訪問時間是: 2016-09-13 17:44:40
text.txt文件的創(chuàng)建時間是: 2016-09-13 17:32:16
text.txt文件的修改時間是: 2016-09-13 17:44:55


目錄處理函數

之前我們處理的全都是文件,那目錄和文件夾怎么處理呢?

我們就來學習目錄或者稱為文件夾的處理相關函數。

處理文件夾的基本思想如下:

1.??? 讀取某個路徑的時候判斷是否是文件夾

2.??? 是文件夾的話,打開指定文件夾,返回文件目錄的資源變量

3.??? 使用readdir讀取一次目錄中的文件,目錄指針向后偏移一次

4.??? 使用readdir讀取到最后,沒有可讀的文件返回false

5.??? 關閉文件目錄

我們來學習一下比較常用函數:


? ? ? 函數名? ? ? ?功能
  opendir打開文件夾,返回操作資源
  readdir讀取文件夾資源
  is_dir判斷是否是文件夾
  closedir關閉文件夾操作資源
  filetype顯示是文件夾還是文件,文件顯示file,文件夾顯示dir


實例

<?php
//設置打開的目錄是D盤
$dir = "D:/";
//判斷是否是文件夾,是文件夾
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        //讀取一次向后移動一次文件夾指針
        echo readdir($dh).'<br />';
        echo readdir($dh).'<br />';
        echo readdir($dh).'<br />';
        echo readdir($dh).'<br />';
        echo readdir($dh).'<br />';
        echo readdir($dh).'<br />';
        //讀取到最后返回false
        //關閉文件夾資源
        closedir($dh);
    }
}
?>

可以運行一下程序,看看是不是你電腦D盤的目錄


判斷文件的類型

<?php
//設置打開的目錄是D盤
$dir = "D:/";
//判斷是否是文件夾,是文件夾
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        //讀取到最后返回false,停止循環(huán)
        while (($file = readdir($dh)) !== false) {
            echo "文件名為: $file : 文件的類型是: " . filetype($dir . $file) . "<br />";
        }
        closedir($dh);
    }
}
?>

運行程序看看


文件路徑函數

我們經常會遇到處理文件路徑的情況。

例如:

1.??? 文件后綴需要取出來

2.??? 路徑需要取出名字不取目錄

3.??? 只需要取出路徑名中的目錄路徑

4.??? 或者把網址中的各個部份進行解析取得獨立值

5. ? ?甚至是自己組成一個url出來

很多地方都需要用路徑處理類的函數。

我們把常用的路徑處理函數為大家做了標注,大家對著這個路徑處理函數進行處理即可:

? ? ?函數名? ? ? 功能
 pathinfo返回文件的各個組成部份
 basename返回文件名
? ? dirname文件目錄部份
? ? parse_url?網址拆解成各部份
? ?http_build_query生成url 中的query字符串
? ?http_build_url生成一個url

pathinfo

?pathinfo ( string $路徑)
功能:傳入文件路徑返回文件的各個組成部份

實例

<?php
header("Content-type:text/html;charset=utf-8");
$path_parts = pathinfo('D:/www/a.html');
echo '文件目錄名:'.$path_parts['dirname']."<br />";
echo '文件全名:'.$path_parts['basename']."<br />";
echo '文件擴展名:'.$path_parts['extension']."<br />";
echo '不包含擴展的文件名:'.$path_parts['filename']."<br />";
?>

程序運行結果:

文件目錄名:D:/www
文件全名:a.html
文件擴展名:html
不包含擴展的文件名:a


basename

basename ( string $路徑[, string $suffix ])
功能:傳入路徑返回文件名
第一個參數傳入路徑。
第二個參數,指定我文件名到了指定字符停止。

實例

<?php
echo "1: ".basename("d:/www/a.html", ".d")."<br>";
echo "2: ".basename("d:/www/include")."<br>";
echo "3: ".basename("d:/www/text.txt")."<br>";
?>

程序運行結果:

?1: a.html
?2: include
?3: text.txt


dirname

dirname(string $路徑)?
功能:返回文件路徑的文件目錄部份

實例

<?php
$a=dirname(__FILE__);
echo$a;
?>

運行一下你的程序


parse_url

?parse_url ( string $路徑 )
功能:將網址拆解成各個部份

實例

<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
?>

程序運行結果:

?array(8) {
? ["scheme"]=>
? string(4) "http"
? ["host"]=>
? string(8) "hostname"
? ["port"]=>
? int(9090)
? ["user"]=>
? string(8) "username"
? ["pass"]=>
? string(8) "password"
? ["path"]=>
? string(5) "/path"
? ["query"]=>
? string(9) "arg=value"
? ["fragment"]=>
? string(6) "anchor"
}


http_build_query

http_build_query ( mixed $需要處理的數據)
功能:生成url 中的query字符串

實例

<?php
//定義一個關聯(lián)數組
$data = [
    'username'=>'liwenkai',
    'area'=>'hubei',
    'pwd'=>'123'
];
//生成query內容
echo http_build_query($data);
?>

程序運行結果:

username=liwenkai&area=hubei&pwd=123


PHP Filesystem 參考手冊

如需查看 PHP 文件系統(tǒng)函數的完整參考手冊,請訪問我們的PHP Filesystem 參考手冊。


繼續(xù)學習
||
<?php header("Content-type:text/html;charset=utf-8"); $data = "我是一個兵,來自老百姓"; $numbytes = file_put_contents('binggege.txt', $data); if($numbytes){ echo '寫入成功,我們讀取看看結果試試:'; echo file_get_contents('binggege.txt'); }else{ echo '寫入失敗或者沒有權限,注意檢查'; } ?>
提交重置代碼