>php教程 >php手册 >PHP 파일 시스템_php 기본에 대한 자세한 설명

PHP 파일 시스템_php 기본에 대한 자세한 설명

WBOY
WBOY원래의
2016-05-16 09:00:221706검색

파일 처리 기능
1. 파일 작업
파일 열기:
지정한 파일이 열릴 경우 해당 객체가 반환될 수 있습니다. 문서가 자동으로 생성됩니다.
Resource fopen(string filename, string mode [,int use_include_path][,resource context])
파일 이름은 파일 경로를 포함하는 파일 이름이거나 특정 프로토콜에서 제공하는 URL일 수 있습니다. 원격 파일 열기) 시스템 전환으로 인한 문제를 피하기 위해 '/'를 경로 구분자로 사용합니다.
모드: 파일을 여는 방법을 각각 설정합니다.
r: 읽기 전용입니다. 모드에서는 파일 포인터가 파일의 헤드에 위치합니다.
r+: 읽기 전용 모드 - 읽기/쓰기 모드에서는 파일 포인터가 파일의 헤드에 위치합니다.
w: 쓰기 전용 모드, 파일 포인터는 파일의 선두에 위치합니다. 파일이 있으면 삭제하고, 그렇지 않으면 직접 파일을 만듭니다.
    w+: 쓰기 전용 모드--- -파일을 읽고 쓰기, 읽기/쓰기 파일 포인터는 파일의 헤드를 가리킵니다. 파일이 있으면 내용을 삭제하고 다시 씁니다. 그렇지 않으면 직접 파일을 만듭니다.
쓰기 모드에서 파일을 엽니다. 존재하면 false를 반환하고 E_WARNING 수준 오류 메시지를 생성합니다.
a: 추가, 파일 포인터가 파일의 끝을 가리킵니다. 파일이 있으면 파일의 끝 부분에 직접 추가하고, 그렇지 않으면 직접 파일을 만듭니다. .
a+: 파일 포인터가 파일의 끝을 가리킵니다. 파일이 있으면 파일 끝에서 직접 추가하거나 읽습니다.
b: 바이너리 모드입니다. 다른 모드와 연결하는데 사용됩니다.(윈도우에서는 옵션)
t: 다른 모드와 결합하는데 사용됩니다.(윈도우에서는 옵션)
실수로 파일이 삭제될 수 있으므로 주의해서 사용하세요. 동시에, 운영 체제마다 줄 끝 습관이 다릅니다(UNIX:n Windows:rn Macinitosh:r). 줄 종결자를 잘못 사용하면 파일을 열 때 잘못된 문자가 잔뜩 출력될 수 있습니다. 피하기 위해 "'t'", "'b'"를 전달할 수 있습니다.

파일 읽기:
String fgetc(resource handler);//다음이 가리키는 파일에서 문자를 반환합니다. EOF가 발견되면 false를 반환합니다.
String fgets(int handler[,int length]);//파일 포인터가 가리키는 위치에서 문자 줄을 가져오고 최대 문자열을 반환합니다. 길이-1바이트. 파일 포인터는 유효해야 하며 fopen() 또는 fsockopen()에 의해 성공적으로 열린 파일을 가리킵니다. 길이는 읽은 데이터의 길이를 나타냅니다. . 길이를 무시하면 줄 끝까지 읽혀집니다.
 string fgetss(resource handler[,int length][,string allowed_tags]);//줄을 읽고 html 및 php 태그를 필터링합니다.
 string fread. (int 핸들, int 길이);//모든 길이의 파일 데이터를 읽습니다. , 바이너리 파일을 읽는 데에도 사용할 수 있습니다. 핸들은 파일을 가리키는 리소스이고, 길이는 길이 바이트를 읽거나 EOF가 발견되면 실행을 중지합니다.
예:

코드 복사 코드는 다음과 같습니다.
$filename="./files.text";
$fp=fopen($finename,"rb")
$encho fread($fp,100)?> 🎜>

readfile(), file() 및 file_get_contents() 함수
readfile(), file() 및 file_get_contents() 함수
 int readfile(string filename[,bool use_include_path,resource context]); //파일을 읽고 버퍼에 씁니다. 성공하면 읽은 바이트 수를 반환하고, 그렇지 않으면 false를 반환합니다. 파일명 파일명. 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[,int offset; [,int maxlen]]]]);//context는 5.0의 새로운 내용이며 NULL로 무시할 수 있습니다. 오프셋, maxlen은 5.1의 내용입니다. offset은 파일의 시작 위치를 표시하는 데 사용되며 maxlen은 읽은 파일의 길이를 설정합니다. 이 방법은 바이너리 파일을 읽는 데 적합합니다. 파일 내용을 문자열로 읽는 데 선호되는 방법입니다. 운영 체제에서 지원하는 경우 성능 향상을 위해 메모리 매핑 기술도 사용됩니다. 특수 문자(예: 공백)가 포함된 URL을 여는 경우 urlencode()를 사용하여 URL을 인코딩하세요.

참고: readfile(), file() 및 file_get_contents()는 폴더 전체의 내용을 읽을 때 fopen() 및 fclose() 함수를 사용할 필요가 없지만, 한 문자, 한 줄을 읽을 때는 문자 및 모든 길이의 문자.

2. 파일에 쓰기:
 int fwrite(resource handler,string[,int length]);//파일 쓰기 작업을 수행합니다. fputs() 별칭도 있습니다. . 이 메서드는 문자열의 내용을 파일 포인터 핸들에 쓰는 데 사용됩니다. length가 설정된 경우 length 바이트가 기록되거나 문자열이 기록된 후 작업이 중지됩니다. 쓰기가 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
참고: 길이 매개변수가 제공되면 php.ini 파일의 Magic_quotes_runtime 옵션이 무시되고 문자열의 슬래시가 제거되지 않습니다. 바이너리 파일과 텍스트 파일 시스템을 구별하려면 파일을 열 때 fopen() 함수의 모드 매개변수에 'b'를 추가해야 합니다.
  int file_put_contents(string filename,string data[.int flags[,resource context]]);//파일에 문자열을 쓰고, 성공하면 바이트 수를 반환하고, 그렇지 않으면 false를 반환합니다. 플래그: 파일 잠금을 구현합니다(옵션에는 file_use_include_path, file_append: 추가, lock_ex: 배타적 잠금 포함). 컨텍스트 리소스를 컨텍스트화합니다.
참고: fwrite()에는 파일 쓰기 기능이 있지만 fopen() 및 fclose() 함수에서 지원해야 합니다. file_put_contents()는 fopen(), fwrite(), fclose()의 기능을 통합하고 독립적으로 파일 쓰기를 완료할 수 있습니다.
3. 파일 닫기
파일이 열리면 파일 작업이 완료된 후 파일을 닫아야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다. .
bool fclose(resouce handler);//매개변수 핸들이 가리키는 파일을 닫고, 성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

파일 잠금
텍스트 파일에 데이터를 쓸 때는 먼저 파일을 잠가야 다른 사용자가 동시에 파일 내용을 수정할 수 없습니다. 파일 잠금은 Flock() 함수를 통해 PHP에서 구현됩니다.
 bool Flock(int handler,int Operation);//매개변수 연산으로 잠금 권한을 제어합니다. 포함: lock_sh: 공유 잠금을 얻습니다(리더). lock_ex: 배타적 잠금(쓰기)을 얻습니다. lock_un: 잠금을 해제합니다. lock_nb: 잠금 시 Flock() 함수가 차단되는 것을 방지합니다.

디렉터리 처리 기능
  디렉토리는 특별한 종류의 파일입니다. 파일이기 때문에 조작하려면 먼저 열어야 하고, 그 다음 찾아볼 수 있고, 마지막으로 닫아야 한다는 것을 기억하세요.

1. 디렉터리 열기

지정된 디렉터리 파일을 엽니다. 성공하면 디렉터리 핸들을 반환합니다. 그렇지 않으면 false를 반환합니다. 파일을 여는 것과 달리 디렉토리가 존재하지 않으면 자동으로 디렉토리를 생성하지 않고 오류 메시지를 표시합니다. opendir() 함수 앞에 "@" 기호를 추가하면 오류 메시지 출력을 차단할 수 있습니다.
Resource opendir(string path[,resource context]);//path는 열려는 디렉터리 파일을 지정합니다. 지정된 경로가 유효한 디렉터리가 아니거나 권한 문제로 인해 파일 시스템 오류를 열 수 없는 경우 이 함수는 false를 반환하고 E_WARNING 수준 오류 메시지를 생성합니다.

2. 디렉터리 찾아보기


opendir 함수와 scandir 함수에서 반환된 핸들을 사용하여 찾아보기 작업을 구현합니다.
 array scandir(string Directory[,int sorting_ordering[,resource context]]);//지정된 경로 아래의 디렉터리와 파일을 찾는 데 사용됩니다. 성공하면 파일 이름이 포함된 배열을 반환하고, 그렇지 않으면 false를 반환합니다. 디렉터리는 탐색할 디렉터리를 지정합니다. 디렉터리가 아닌 경우 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]<2000000 && $_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으로 문의하세요.