file_get_contents();
读取文件内容,等于依次调用fopen(),fread(),fclose()
-语法
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = 0 [, int $maxlen ]]]] )
参数
- filename 文件名或者一个url路径
- use_include_path 是否在引入文件中搜索,默认为false,暂时没发现有什么用处。
- context 规定文件句柄环境,是一套可以修改流的行为选项。
- offset 规定从文件中开始读取的位置
- maxlen 规定读取的字节数
file_get_contents('php://input');
-
使用file_get_contents来接收客户端传过来的json数据。2. 客户端直接在请求参数里放一个json的话,使用$_POST是接收不到的,所以这是可以使用下面这种方法。
-
利用第三个参数设置file_get_contents函数超时时间和请求方式
// get 请求
$opts = array(
'http' => array(
'method' => "GET",
'timeout' => 0.001,
),
);
$content = stream_context_create($opts);
$html = file_get_contents('http://www.baidu.com',false,$content);
echo $html;
// post请求
$post_data = array(
'name' => 'zhangsan',
'age' => 20,
'set' => '男',
);
$opts = array(
'http' => array(
'method' => "POST",
'timeout' => 60,
'header' => 'Content-Type:application/x-www-form-urlencoded',
'content' => http_build_query($post_data, '', '&'),
),
);
$context = stream_context_create($opts);
$html = file_get_contents('http://localhost/test/post.php', false, $context);
echo $html;
file_put_contents();
写入文件内容,等于依次调用fopen(),fwrite(),fclose();
语法
file_put_contents(file,data,mode,context)
参数
- file 要写入的文件路径
- data 要写入的数据,一般为字符串,也可以是一维数组(可以是索引数组,也可以是键值数组),但不能是多维数组,也可以是stream资源。
- mode 文件的打开写入模式,可选值为:
FILE_USE_INCLUDE_PATH : 貌似没什么用处,也可能是默认值
FILE_APPEND : 可以把字符串添加到文件末尾,而不是覆盖文件内容
LOCK_EX : 貌似也没什么用处 - context 规定文件句柄环境,可以修改流的行为选项。
返回值 int类型,写入字符串的长度(字节长度)
fopen()
打开文件或URL,成功返回文件句柄,失败返回false
语法
fopen(filename,mode,include_path,context);
参数
- filename 文件地址或url
- mode 打开文件的模式,可能值如下
r : 只读方式打开,并将指针指向文件头
r+: 读写方式打开,并将指针指向文件头
w : 写方式打开,并将指针指向文件头,并清空文件内容。如果文件不存在,则尝试创建。
w+: 读写方式打开,并清空文件内容,将指针指向文件头哦,如果不存在,则尝试创建。
a : 写入方式打开,并将指针指向文件末尾,如果不存在,则尝试创建。
a+: 读写方式打开,并将指针指向文件末尾,如果不存在,则参数创建。
x : 创建并以写入的方式打开,并将指针指向文件头,如果文件已存在,则fopen调用失败,并返回false,并生成一条
E_WARNING级别的错误。如果文件不存在,则尝试创建。仅能用于本地文件。
x+: 创建并以读写的方式打开,并将指针指向文件头,如果文件已存在,则fopen调用失败,并返回false,并生成一条
E_WARNING级别的错误。如果文件不存在,则尝试创建。仅能用于本地文件。 - include_path 依旧不明白有什么用
- context 规定文件句柄的环境,可以修改流的一套行为
注意
不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 \n 、作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。
Windows 下提供了一个文本转换标记(“t”)可以透明地将 \n 转换为 \r\n。与此对应还可以使用 “b” 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 “b” 或者用 “t” 作为 mode 参数的最后一个字符。
默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了 \n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 “t”。在所有其它情况下使用 “b”。
在操作二进制文件时如果没有指定 “b” 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。
为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 “b” 标记。
再一次,为移植性考虑,强烈建议你重写那些依赖于 “t” 模式的代码使其使用正确的行结束符并改成 “b” 模式。
feof()
检查文件指针是否到文件尾部
语法
feof($fp);
参数
- $fp 使用fopen()或者fsocketopen()获得到的文件句柄。
返回值
如果文件指针到了文件尾部或者出错时则返回true,否则返回一个错误,其他情况返回true
示例
// 以只读方式打开文件,b代表可以操作二进制文件。以及防止文件尾部因结束符出错。
$fp = fopen('./text.txt','rb');
// 判断文件指针是否到达文件尾部,如果没有则读取文件内容
while(!feof($fp)){
echo fgets($fp); // 每次读取一行
}
fclose($fp); // 释放文件句柄。
pathinfo($path);
返回文件信息
参数
文件路径。
示例:
pathinfo('./text.txt');
/*
返回值
array(4) {
["dirname"]=>
string(1) "."
["basename"]=>
string(8) "text.txt"
["extension"]=>
string(3) "txt"
["filename"]=>
string(4) "text"
}
*/