fread与file_get_contents读取函数文件

关于这两个函数的官方解释是这样的:

fread() 函数读取文件(可安全用于二进制文件)。

语法

fread(file,length)
参数描述
file 必需。规定要读取打开文件。
length 必需。规定要读取的最大字节数。

说明

fread() 从文件指针 file 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

返回所读取的字符串,如果出错返回 false。

file_get_contents()

定义和用法

file_get_contents() 函数把整个文件读入一个字符串中。

和 file() 一样,不同的是 file_get_contents() 把文件读入一个字符串。

file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。

语法

file_get_contents(path,include_path,context,start,max_length)
参数描述
path 必需。规定要读取的文件。
include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。
context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

start 可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 新加的。
max_length 可选。规定读取的字节数。该参数是 PHP 5.1 新加的。

说明

对 context 参数的支持是 PHP 5.0.0 添加的。

提示和注释

注释:本函数可安全用于二进制对象。

首先,我不知道这两个函数读出来的数据有什么区别,我在网上找的读取图片为二进制的信息都是用到fread(),所以我不知道file_get_contents读出来的是不是二进制,网上读取图片为二进制的代码:

php读取图片成二进制流输出

header( "Content-type: image/jpeg");
$PSize = filesize('1.jpg');
$picturedata = fread(fopen('1.jpg', "r"), $PSize);
echo $picturedata;

这几行代码表示已二进制读出并显示图片,可惜我使用了读出成功了但是没有显示成功,原因未知。

因为最近要做的项目的一个功能就是要把图片已二进制的方式发送到手机端,之前对手机与服务器的交互有个很小白的观念,以为服务器总是要返回json数据手机端才能接到(ノへ ̄、)所以我用fread()或者file_get_contents()取出数据后,怎么也不能以json的格式数据输出,原因是json格式是要求utf8的编码,而读出来的是二进制,所以不行,这个问题大半天才搞明白Orz。。。而且服务器直接echo数据,手机端也能接受到,只不过有对象的时候用json封装一下数据手机端好处理。

原文地址:https://www.cnblogs.com/cyn126/p/3290352.html