文件流php
Ⅰ 求教php如何接收文件流,,ios android上传的图片
请问你的客户端是将数据流编码了之后传递的么?
客户端可以直接使用流上传,不需要进行编码,然后php获取后直接保存就可以了,如:
$byte = file_get_contents('php://input');
file_put_contents($filename,$byte);
这样客户端不用进行处理,直接向服务器端写入数据流就可以了。
Ⅱ Apache需要将php文件交给PHP解释器处理后再 返回给浏览器,那PHP如何运行的呢
1.我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的;
2.PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口);
3.PHP总共有三个模块:内核、Zend引擎、以及扩展层;
4.PHP内核用来处理请求、文件流、错误处理等相关操作;
5.Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它;
6.扩展层是一组函数、类库和流,PHP使用它们来执行一些特定的操作。比如,我们需要mysql扩展来连接MySQL数据库;
7.当ZE执行程序时可能会需要连接若干扩展,这时ZE将控制权交给扩展,等处理完特定任务后再返还;
8.最后,ZE将程序运行结果返回给PHP内核,它再将结果传送给SAPI层,最终输出到浏览器上。
Ⅲ php远端pdf转文件流
Able2Extract是一款文件转换工具。可以将PDF、HTML和Text格式的文件中的数据转换为格式化的Excel表、空早Word文档、PPT文档、HTML文档和text文件。内置有PDF文件浏览器。支持多种文字,包括中文、日斗碧雀文、俄文、希腊文等。不需要安装AdobeAcrobat。专业版除了提供标准版的所有功能,还可以对扫描的或者图片格式的PDF文件进慧余行转换。
Ⅳ PHP如何将已经读取的字节流文件上传到指定服务器
第一种:使用html自带的file控件,然后后台通过php提交到服务器
第二种:使用php自带的ftp函数上传到服务器~
Ⅳ php怎么发送和接收流文件
<?php
/**php发送流文件
*@paramString$url接收的路径
*@paramString$file要发送的文件
*@returnboolean
*/
functionsendStreamFile($url,$file){
if(file_exists($file)){
$opts=array(
'http'=>array(
'method'=>'POST',
'header'=>'content-type:application/x-www-form-urlencoded',
'content'=>file_get_contents($file)
)
);
$context=stream_context_create($opts);
$response=file_get_contents($url,false,$context);
$ret=json_decode($response,true);
return$ret['success'];
}else{
returnfalse;
}
}
$ret=sendStreamFile('http://localhost/fdipzone/receiveStreamFile.php','send.txt');
var_mp($ret);
?>
<?php
/**php接收流文件
*@paramString$file接收后保存的文件名
*@returnboolean
*/
functionreceiveStreamFile($receiveFile){
$streamData=isset($GLOBALS['HTTP_RAW_POST_DATA'])?$GLOBALS['HTTP_RAW_POST_DATA']:'';
if(empty($streamData)){
$streamData=file_get_contents('php://input');
}
if($streamData!=''){
$ret=file_put_contents($receiveFile,$streamData,true);
}else{
$ret=false;
}
return$ret;
}
$receiveFile='receive.txt';
$ret=receiveStreamFile($receiveFile);
echojson_encode(array('success'=>(bool)$ret));
?>
Ⅵ 请问通过接口返回的pdf的文件流,怎么用php把这些文件流转为pdf文件
直接将文件流内容写入文件,而文件的后缀名设为 pdf 格式就可以了;PHP 不管保存文件流还是文本,都是用这种方式;
$path="demo.pdf";
$ret=file_put_contents($path,$arr['data']);
if($ret){
echo'保存成功';//然后可以取查看文件
}
Ⅶ php 获得当前文件输出流
首先你要了解几个php函数,下面我列出来
ob_start()函数:打开输出缓冲区.
函数格式 void ob_start(void)
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用ob_end_flush()或flush()输出缓冲区的内容。
Flush:刷新缓冲区的内容,输出。
函数格式:flush()
说明:这个函数经常使用,效率很高。
ob_get_contents :返回内部缓冲区的内容。
函数格式:string ob_get_contents(void)
说明:这个函数会返回当前缓冲区中的内容,如果输出缓冲区没有激活,则返回 FALSE.
ob_get_length:返回内部缓冲区的长度。
函数格式:int ob_get_length(void)
说明:这个函数会返回当前缓冲区中的长度;和ob_get_contents一样,如果输出缓冲区没有激活,则返回 FALSE.
ob_end_clean:删除内部缓冲区的内容,并且关闭内部缓冲区
函数格式:void ob_end_clean(void)
说明:这个函数不会输出内部缓冲区的内容而是把它删除
ob_end_flush:发送内部缓冲区的内容到浏览器,并且关闭输出缓冲区
函数格式:void ob_end_flush(void)
说明:这个函数发送输出缓冲区的内容(如果有的话)
ob_implicit_flush:打开或关闭绝对刷新
函数格式:void ob_implicit_flush ([int flag])
说明:默认为关闭缓冲区,打开绝对输出后,每个脚本输出都直接发送到浏览器,不再需要调用 flush()
是的,正如你看到的,就是利用php缓冲区,当你用ob_start()打开缓冲区的话,则你接下来的输出,在不会输出到浏览器,而是被缓存到内存上,知道内存被通知输出获取处理是,才会有所行动,这样的话,你完全可以
Ⅷ 接口如何通过PHP将文件以流的方式发送客户端
1、在有模板的基础上,针对客户的定制下载。
2、一些浏览器本身能够表示的文件类型(如txt文件),可以通过将头信息Content-Type改为header("Content-Type:application/force-download");进行强制下载。
3、对于一些动态生成文件,比如TXT/CSV等文件,将临时文件及时删除<?php
/**
*本程序实现了将测试文件[test.pdf]创建副本,并将副本读入
*内存,以流的方式发送给客户端浏览器,最终删除副本的操作。
*
*本文可以实现的需求:
*1、在有模板的基础上,针对客户的定制下载。
*2、一些浏览器本身能够表示的文件类型(如txt文件),可以通过将头信息Content-Type
*改为header("Content-Type:application/force-download");进行强制下载。
*3、对于一些动态生成文件,比如TXT/CSV等文件,可以将临时文件及时删除
*@authorDensin.Tian@CisternData2015/05/05
*/
//文件名扩展名
$fileExName=".pdf";
//原始文件文件名
$oldFileMainName="testfile";
//获得时间戳YYYYMMDDHHMISS
$timestamp=date("YmdHis",time());
//新文件名
$newFileName=$oldFileMainName.$timestamp;
//复制文件
if(!($oldFileMainName.$fileExName,$newFileName.$fileExName)){
die("failedto");
}
//设置下载头信息
header("Content-Type:application/pdf");
header("Content-Disposition:attachment;filename=20150505.pdf");
//文件流输出到浏览器
readfile($newFileName.$fileExName);
//删除文件
@unlink($newFileFullName);
---------------------
Ⅸ PHP典型模块与项目实战大全:PHP文件下载的原理及实现
PHP文件下载的原理及实现
通常文件下载过程是十分简单的 建立一个链接指向到目标文件就可以了 例如下面的链接
<a href=// xxx /xxx rar>点击下载文件</a>
但是 实际情况可能会稍复杂 比如需要用户填写完整注册信息后才可以下载该文件 这时最先想到的是使用Redirect的方式 下面介绍两种方式
( )用Redirect方式 先检查表格是否已经填写完毕和完整 然后将链接指到该文件 这样用户就可以下载 请看下面的示例代码
<?php
/*文件功能 检查变量form是否完整*/
if($form){
//重新定向浏览器指向
Header( Location: // // xxx /xxx rar )
exit;
}
?>
( )根据下载文件的序号来查找 链接的形式如下
<a href= // xxx /download php?id= >点击下载文件</a>
上面的链接使用ID方式接收要下载文件的编号 然后再用Redirect的方式连接到真实的文件链接
以上这两种方法虽然实现了文件的下载功能 但是缺点是直接暴露了文件所属的路径 而且没有防盗链的功能 所以上面的方式是简单直接但存在安全隐患的文件下载方式 在PHP中 通常是利用header()函数和fread()函数来实现安全的文件下载
例如 需要下载的是一个文件名为xxx rar的文件 首先创建文件是download php的PHP文件 通过前面的例子很容易通过文件的ID号从数据库中得到待下载文件的真实位置 在获得文件的真实存储位置后 可缺培悉以通过header()函数的location参数直接重定向到这个文件 但是这样仍然是不安全的 因为某些下载软件还是可以通过重定向分析获得该文件的位置信息 因此需要用另外一种方法 就是PHP的文件处理API函数 它是通过fread()函数把文件直接输出到浏览器提示用户下载 这样所有的处理都是在服务器端完成的 因此用户就无法获得文件具体存储位置信息的 示例代码如下
<?
$file_name = xxx rar ; //下载文件名
$file_dir = /up/ ;中纤 //下载文件存放目录
//检查文件是否存在
if (! file_exists ( $file_dir $file_name )) {
echo 文件找不到 ;
exit ()
} else {
//打开文件
$file = fopen ( $file_dir $file_name r )
//输入文件标签
Header ( Content type: application/octet stream )
Header ( Accept Ranges: bytes )
Header ( Accept Length: filesize ( $file_dir $file_name ) )
Header ( Content Disposition: attachment; filename= $file_name )
//输出文件内容
//读取文件内容并直接输出到浏览器
echo fread ( $file filesize ( $file_dir $file_name ) )
fclose ( $file )
exit ()
}
?>
【代码解读】
上述代码中 程序发送Header信息是用来告诉Apache和浏览器下载文件的相关信息的 content type的含义代表文件MIME类型是文件流格式 如果在Apache配置里面把文件的MIME类型设为application/octet stream(如add application/octet stream xxx rar) 那么浏览器(客户端伏乎)就会知道 这是一个文件流格式的文件并提示用户下载 Accept Ranges是一个响应头标 它允许服务器指明将在给定的偏移和长度处 为资源组成部分的接受请求 该头标的值被理解为请求范围的度量单位 Content Length是指定包含于请求或响应中数据的字节长度 例如 Content Length: Content Disposition:attachment是用来告诉浏览器 文件是可以当做附件被下载 下载后的文件名称为$file_name该变量的值
运行download php文件 效果如图 所示 从图中可以看到文件按照预想的方式被提示下载 单击 保存 按钮将文件保存在本地
图 PHP文件安全下载
返回目录 PHP典型模块与项目实战大全
编辑推荐
Java Web开发详解
PHP Web开发学习实录
lishixin/Article/program/PHP/201311/21519