文件流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