搜尋
首頁php教程php手册PHP 檔案系統詳解_php基礎

文件处理函数
1.文件操作.
  打开文件:
    打开指定的文件时会返回相应的对象,若不存在指定的文件,那麽可能会自动创建这个文件。
    resource fopen(string filename,string mode [,int use_include_path][,resource context]);
      filename 可以是包含文件路径的文件名,也可以是某种协议给出的URL(打开远程文件).为了避免系统切换带来的麻烦,采用'/'作为路径分隔符.
      mode: 设置打开文件的方式,分别有:
           r:只读模式,文件指针位于文件头部.
           r :只读模式----读/写模式,文件指针位于头部文件.注意可能产生覆盖.
           w:只写模式,文件指针位于文件头部.如果文件存在,删除内容重写;否则,自行创建文件.
           w :只写模式----读写文件,读/写文件指针指向文件头部.如果文件存在,删除内容重写;否则,自行创建文件.
           x:谨慎写----写模式打开文件,从文件头部开始写如.如果文件存在,返回false,产生一个E_WARNING级别的错误信息
           x :谨慎写---读写模式代开文件.如果文件存在,返回false,产生一个E_WARNING级别的错误信息
           a:追加,文件指针指向文件尾部.如果文件存在,则直接在文件尾追加;否则,自行创建文件.
           a :追加,文件指针指向文件尾部.如果文件存在,则直接在文件尾追加或者读取;否则,自行创建文件.
           b:二进制模式.用于与其他模式进行链接.(windows 下的选项)
           t: 用于与其他模式进行结合.(windows 下的选项)
    请慎用fopen()函数,因为一不小心就有可能将文件删除掉.同时,不同的操作系统具有不同的行结束习惯(UNIX:\n Windows:\r\n Macinitosh:\r).如果错误的使用行结束符,那么当打开文件时,可能输出一堆乱码.以上可以通过"'t'","'b'"来避免.
读取文件:
  string fgetc(resource handle);//返回从handle指向的文件中的一个字符.如果遇到EOF,则返回false;
  string fgets(int handle[,int length]);//从文件指针指向的位置获取一行字符,并且返回最大为length-1个字节的字符串..文件指针必须有效,且指向一个由fopen()或fsockopen()成功打开的文件.length表示读取的数据的长度.在遇到换行,EOF,或者指定length时结束.忽略length将读到行结束.
  string fgetss(resource handle[,int length][,string allowable_tags]);//读取一行,且过滤掉html,php标记.
  string fread(int handle,int length);//从文件中读取任意长度的数据。,也可以用於讀取二進位檔案。 handle 為指向檔案的資源,length 讀取length個位元組或遇到EOF時停止執行。
範例:

複製程式碼 程式碼如下:

$filename="./files.text";
$fp=fopen($finename,"rb");
$encho fread($fp,100);
?>
div>
readfile(),file()和file_get_contents()函数.
readfile(),file()和file_get_contents()函数.
  int readfile(string filename[,bool use_include_path,resource context]);//读取一个文件并写入到缓冲区,如果成功,则返回读取的字节数,否则返回false。filename文件名。参数use_include_path控制是否支持在include_path中搜索文件,true为支持。使用readfile函数不需要打开/关闭文件。
  array file(string filename [,bool use_include_path[,resource context]]);//将整个文件的内容读取到数组中。如果成功,返回数组,数组中的每个元素都是文件中对应的一行,包活换行符在内;否则返回false;
  string file_get_contents(string filename[,bool use_include_path[,resource context[,int offset[,int maxlen]]]]);//context 为5.0新增的内容,可以用NULL来忽略。offset,maxlen为5.1的的内容。offset 用于标记文件啓始的位置,maxlen 设置文件读取的长度。该方法适用于二进制文件的读取。是将文件内容读入到一个字符串的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。如果打开有特殊字符的URL(例如存在空格),那麽要使用urlencode()来进行URL编码。

备注:readfile(),file()和file_get_contents()在读取整个文件夹中的内容时,不需要使用fopen()和fclose()函数,但是在读取一个字符,一行字符和任意长的字符时则必须使用。

2.写入文件:
    int fwrite(resource handle,string[,int length]);//执行文件的写入操作,它还有一个别名fputs().该方法用于把string的内容写入文件指针handle处。如果设置length,那麽写入length个字节或者完成string写入后,操作就会停止。成功写入则返回true,否则返回false。
备注:若给出length参数,那麽php.ini文件中的magic_quotes_runtime选项将会被忽略,而string中的斜线将不会被抽去。区分二进制文件和文本文件系统则在打开文件时fopen()函数的mode参数要加上‘b'。
   int file_put_contents(string filename,string data[.int flags[,resource context]]);//将一个字符串写入文件中,如果成功则返回字节数,否则返回false。flags:实现对文件的锁定(选项有 file_use_include_path,file_append:追加,lock_ex:独佔锁定)。context一个context资源。
备注:fwrite()虽然具备写入文件的功能,但是必须有fopen()和fclose()函数的支持。file_put_contents()整合了fopen(),fwrite(),fclose()功能,可以单独完成文件的写入。
3.关闭文件
  文件有打开就应该有关闭功能,对文件的操作结束后,应该关闭这个文件,否则可能引起错误。
  bool fclose(resouce handle);//将参数handle指向的文件关闭,如果成功则返回true,否则返回false。

锁定文件
  在向一个文本文件中写入数据的时候,需要先锁定文件,已防止其他用户同时也修改此文件的内容。php中通过flock()函数实现文件的锁定。
   bool flock(int handle ,int operation);//参数operation控制锁定权限。包括:lock_sh:取得共享锁定(读取程序)。lock_ex:取得独佔锁定(写入)。lock_un:释放锁定。lock_nb:防止flock()函数在锁定时堵塞。

目录处理函数
  目录是一种特殊的文件。既然是文件,如果对其进行操作,同样必须先打开,然后才可以进行浏览操作,最后还要记得关闭。

1.打开目录

  打开指定的目录文件,若果成功,则返回目录的句柄。否则返回false。与打开文件不同的是,若目录不存在,它并不会自动创建目录,而是抛出一个错误信息。通过在opendir()函数前加“@”符号,可以屏蔽错误信息的输出。
  resource opendir(string path[,resource context]);//path指定要打开的目录文件。如果path指定的不是一个有效的目录,或者因为权限问题,文件系统错误不能打开,那麽该函数将会返回false,并且产生一个E_WARNING级别的错误信息。

2.浏览目录


 利用opendir函数返回的句柄配合scandir函数实现浏览操作。
  array scandir(string directory[,int sorting_ordering[,resource context]]);//用于浏览指定路径下的目录和文件。如果成功则返回包含文件名的array,否则返回false。directory指定要浏览的目录,如果不是目录,那麽将返回false,并且产生一个E_WARNING级别的错误信息。sorting_order设置排列顺序,默认为字母升序排列。如果带上该参数,则变为降序排列。
备注:is_dir()函数,判断指定文件名是否一个目录。如果文件名存在且为目录,则返回true,否则返回false。如果是相对目录,则按照当前工作目录检查其相对路径。

3.关闭目录。

  void closedir(resource handle);//handle,要关闭的工作目录的句柄。

备注:前面已经了解到,若打开的目录不存在,系统并不会帮我们创建目录。那麽我们可以自行创建想要的目录。可以应用以下函数:
    mkdir()函数:新建一个目录,成功则返回true,否则false。
    rmdir()函数:删除目录。目录必须为空(目录中无文件或者子目录),且要有操作的权限。
    unlink()函数:删除文件,成功则返回true,失败返回false。

文件上传、下载原理 
       
步骤内容:
  步骤1:控制上传文件,通过php.ini文件配置。
  步骤2:对上传文件进行判断。上傳文件的大小,格式等。
  步驟3:執行上傳檔案的操作方法。

1.控制上傳檔案:

  php透過對php.ini對上傳檔案進行控制,包括:是否支援上傳、上傳檔案的暫存目錄、上傳檔案的大小、指令執行的時間與指令分配的記憶體空間。
    在php.ini檔案中定位到file uploads選項,完成上述選項的設定。選項意義如下:
    file_uploads:如果是on,表示伺服器支援檔案上傳,如果為off,則不支援。一般預設是支援的,此選項不必修改。
    upload_tem_dir:上傳檔案的暫存目錄。在檔案上傳成功之前,檔案首先保存在伺服器的暫存目錄中。多數使用系統預設目錄,但是也可以自行設定。
    upload_max_filesize:伺服器允許上傳檔案的最大值,以MB為單位。系統預設為2MB,若超過則須修改其值。
    max_execution_time:php中一個指令所能執行的最長時間,單位是秒。該指令在執行上傳超大檔案時必須修改,否則及時上傳檔案在伺服器允許的範圍內,但是超過指令所能執行的最長時間,仍然無法實現上傳。
    memory_limit:php中一個指令所分配的記憶體空間,單位時MB。它的大小同樣會影響超大檔案的上傳。

備註:在客戶端控制上傳檔案應用的時form表單中的enctype和method屬性,以及隱藏域MAX_FILE_SIZE.
    enctype="multipart/form-data":指定表單編碼資料方式。
    method="post":指定資料傳輸的方式。
    :透過隱藏域控制上傳檔案的大小,單位為位元組。該值不能超過php.ini設定檔中的upload_max_filesize選項設定的值。它不能完全控制上傳檔案的大小,只能避免一些不必要的麻煩。

2.判斷上傳檔案

  對上傳檔案進行判斷應用的是全域變數$_FILES,$_FILES是一個數組,它包含所有上傳檔案的信息。陣列中各元素意義如下:
    $_FILES[filename][name]:儲存上傳檔案的檔案名,如text.txt,title.jpg等。
    $_FILES[filename][size]:儲存檔案的大小,單位為位元組。
    $_FILES[filename][tem_name]:儲存檔案在暫存目錄中使用的檔案名,因為檔案在上傳時首先要將其以暫存檔案的身分儲存在暫存目錄中。
    $_FILES[filename][type]:儲存上傳檔案的MIME類型。 MIME規定各種文件格式的類型,每種MIME類型都時由「/」分隔的主類型和子類型組成。例如:"image/gif"的主類型為圖像,子類型為GIF格式的檔案。 "text/html"代表文字的HTML檔案。
    $_FILES[filename][error]:儲存檔案上傳的錯誤代碼:此項目為PHP4.2.0版本新增內容。它的回傳值由5種:
      0:表示沒有任何錯誤。文件上傳成功。
      1:表示上傳檔案的大小超出設定檔指令upload_max_filesize選項的限定值。
      2:表示上傳檔案的大小超出HTML表單中max_file_size選項所指定的值。
      3:表示文件只上傳了一部分。
      4:表示沒有上傳任何文件。
範例:
複製程式碼 程式碼如下:

/*判斷是否由上傳圖片*/
if(!empty($_FILES['up_picture'][name])){
/*將圖片資訊賦值給變數*/
$type=strtolower (strstr($_FILES['up_picture'][name],"."));
if($type != '.jpg' && $type != '.gif') echo "你上傳的檔案格式不對";
else{
if($_FILES['up_picture'][size]0){
echo "上傳檔案名稱:" .$_FILES['up_picture'][name]."
";
echo "上傳檔案類型:".$type."
";
echo "上傳檔案大小:" .$_FILES['up_picture'][size]."
";
}else echo "圖片大小不符合要求。";
}
}
?>


3.檔案上傳。

  php中應用move_uploaded_file()函數實作檔案上傳。但在執行之前,為了防止潛在的攻擊對原本無法透過腳本互動的檔案進行非法管理,可以先應用is_uploaded_file()函數判斷指定的檔案是否透過HTTP POST上傳的,如果是則傳回true。透過該函數,可以確保惡意的使用者無法欺騙腳本去存取不能存取的檔案。
   bool is_uploaded_file(string name);//用來判斷指定的檔案是否透過HTTP POST上傳的。 filename必須類似$_FILES[‘filename'][‘temp_name']的變量,不可以使用從客戶端上傳的檔案名稱$_FILES[‘filename'][‘name']。

   move_upload_file(string filename,string destination);//此函數用於將檔案上傳到伺服器中指定的位置。如果成功,則傳回true,否則傳回false。 filename指定上傳檔案的暫存檔案名,即$_FILES['tmp_name'],參數destination指定檔案上傳後儲存的新路徑和名稱。如果參數不是合法的上傳文件,則不會出現任何操作,則函數將傳回false。如果是合法的上傳操作,但是由於某些原因無法移動,則不會出現任何操作,返回false的同時將會發出警告。
複製程式碼 程式碼如下:

if( !empty($_FILES[ 'up_picture' ][ 'name' ])){
if( $_FILES['up_picture']['error'] > 0){
echo "上传错误!";
switch($_FILES['up_picture']['error']){
case 1:
echo "上传文件超出配置文件规定值";
break;
case 2:
echo "上传文件超出表单规定值";
break;
case 3:
echo "上传文件不全";
break;
case 4:
echo "没有上传文件";
break;
}
}else{
if( ! is_dir('./upfile/') ) mkdir('./upfile/');
$path='./upfile/'.time().$_FILES['up_picture' ][ 'name' ];
if( is_uploaded_filed( $_FILES['up_picture' ][ 'tmp_name' ] )){
if(!move_uploaded_file( $_FILES['up_picture' ][ 'tmp_name' ] ,$path )){
echo "上传失败!";
}else{
echo "文件".time().$_FILES['up_picture' ][ 'name' ] ."上传成功,大小为:".$_FILES['up_picture' ][ 'size' ] ;
}
}else{
echo "上传文件".$_FILES['up_picture' ][ 'name' ]."不合法";
}
}
}
?>


4.文件下载

这裡介绍通过http方式下载文件,主要用到header()函数。header()函数属于HTTP函数,其作用是以HTTP将HTML文档的表头送到浏览器,并告诉浏览器具体怎麽处理这个页面。
void header(string string[,bool replace[,int http_respone_code]]);//参数string 指定发送的标头。参数replace控制如果一次发送多个标头,对于相似的标头是替换还是添加。如果是false,则强制发送多个同类型的标头,默认为true。参数http_respone_code强制将HTTP响应代码设置为指定值:
下载步骤如下:
    a):通过"Content-Type" 指定文件的MIME类型。
    b):通过"Content-Disposition" 对文件进行描述,值"attachment;filename="test.jpg"" 说明是一个福建,同时指定下载文件的名称。
    c):通过"Content-Length" 设置下载文件的大小。
d):通过readfile()函数读取文件内容。
例如:
复制代码 代码如下:

header('Content-Type:image/jpg');
header(' Content-Disposition:attachment;filename="test.jpg" ');
header('Content-Length:'.filesize('test.jpg') );
readfile('test.jpg');


5.访问远程文件

  步骤1:配置 php.ini 文件选项 allow_url_fopen设置为on。参数默认是开啓的,允许打开http和ftp指定的远程文件。如果 allow_url_fopen设置为off,则不允许打开远程文件。
  步骤2:使用fopen()函数读取文件内容。根据内容创建你想要的资源,保存到本地。
        
ps:更多php.ini配置文件中的文件操作 和 目录操作的扩展方法请参考官方php指南。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何应对Linux系统中的文件系统崩溃问题如何应对Linux系统中的文件系统崩溃问题Jun 29, 2023 pm 04:05 PM

如何应对Linux系统中的文件系统崩溃问题引言:随着计算机技术的不断发展,操作系统的稳定性和可靠性也变得越来越重要。然而,尽管Linux系统被广泛认为是一个稳定和可靠的操作系统,但仍然存在文件系统崩溃的可能性。文件系统崩溃可能会导致数据丢失和系统异常等严重后果。因此,本文将介绍如何应对Linux系统中的文件系统崩溃问题,以帮助用户更好地保护自己的数据和系统。

fstab(File System Table)fstab(File System Table)Feb 19, 2024 pm 06:30 PM

fstab(FileSystemTable)是Linux系统中的一个配置文件,用于定义系统启动时挂载文件系统的规则。fstab文件位于/etc目录下,可通过手动创建或编辑器修改。每行规定一个要挂载的文件系统。每一行有六个字段,它们的意义如下:文件系统设备文件或UUID可用于指定要挂载的文件系统的设备,UUID是一个独特的标识符,可通过blkid命令获取设备的UUID。2.挂载点:指定文件系统要挂载到的目录,可以是绝对路径(例如/mnt/data)或者相对路径(例如../data)。3.文件系统类

Go语言中如何处理并发文件的文件系统文件锁和进程间文件共享问题?Go语言中如何处理并发文件的文件系统文件锁和进程间文件共享问题?Oct 09, 2023 pm 05:53 PM

Go语言中处理并发文件的文件系统文件锁和进程间文件共享问题引言:在Go语言中,我们常常需要处理并发访问文件的情况,包括文件系统文件锁和进程间文件共享。本文将介绍如何使用Go语言处理这些问题,并提供具体的代码示例。一、文件系统文件锁在多个并发程序同时访问同一个文件时,为了避免出现竞争条件和数据不一致的问题,我们可以使用文件系统文件锁来进行同步。Go语言提供了s

不同之处:NTFS与FAT32不同之处:NTFS与FAT32Feb 18, 2024 pm 10:18 PM

NTFS和FAT32是两种常见的文件系统,用于组织和管理计算机硬盘上的数据。虽然它们都具有一些共同的功能和特点,但在许多方面也有一些重要的区别。本文将探讨NTFS和FAT32之间的几个主要区别。功能和性能:NTFS(NewTechnologyFileSystem)是微软Windows操作系统中较新的文件系统,它具备许多先进的功能,如数据压缩、文件加密、

深入了解Linux的标准文件系统(Ext2/Ext3/Ext4)深入了解Linux的标准文件系统(Ext2/Ext3/Ext4)Dec 31, 2023 pm 10:18 PM

Ext全称Linuxextendedfilesystem,extfs,即Linux扩展文件系统,Ext2就代表第二代文件扩展系统,Ext3/Ext4以此类推,它们都是Ext2的升级版,只不过增加了日志功能,且彼此向下兼容,所以Ext2被称为索引式文件系统,而Ext3/Ext4被称为日志式文件系统。备注:Linux支持很多文件系统,包括网络文件系统(NFS)、Windows的Fat文件系统。查看Linux支持的文件系统:ls-l/lib/modules/$(uname-r)/kernel/fs查看

Linux系统命令大全。Linux系统命令大全。Feb 19, 2024 pm 10:54 PM

以下是常见的Linux系统命令大全(按字母顺序排列):alias:设置命令别名awk:文本处理工具,用于提取和操作文本数据cat:连接文件并打印到标准输出cd:改变当前工作目录chmod:修改文件或目录的权限chown:修改文件或目录的所有者和所属组chroot:改变根文件系统目录cp:复制文件或目录cron:定时任务管理工具curl:用于下载或上传文件的命令行工具cut:按列提取文本数据date:显示或设置系统日期和时间dd:复制和转换文件df:显示文件系统的磁盘使用情况diff:比较文件或目

CentOS文件系统常见问题解答CentOS文件系统常见问题解答Feb 23, 2024 pm 12:45 PM

CentOS文件系统常见问题解答在使用CentOS操作系统过程中,文件系统是一个至关重要的组成部分。它负责存储、组织和管理文件和目录,对系统的稳定运行和数据安全起着至关重要的作用。然而,不可避免地,在使用文件系统的过程中会遇到一些常见问题。本文将针对CentOS文件系统常见问题进行解答,希望能帮助读者更好地理解和处理这些问题。问题一:如何查看文件系统的使用情

Go语言中如何处理并发文件的文件系统文件切割和文件合并问题?Go语言中如何处理并发文件的文件系统文件切割和文件合并问题?Oct 08, 2023 am 11:13 AM

Go语言中如何处理并发文件的文件系统文件切割和文件合并问题?在处理大文件时,我们常常需要将文件切割成小块进行处理,并在处理完成后将小块文件合并成一个完整的文件。在并发处理大文件时,我们希望能够充分利用多个处理器核心来提高处理速度。Go语言提供了丰富的并发处理机制和文件操作函数,可以很方便地实现文件系统文件切割和文件合并。首先,我们需要确定文件切割的大小。可以

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。