2015-08-14 44 views
0

我想要讀取PUT請求中的文件。正如在PHP文檔中所建議的:無法讀取少於1024個字節(1KB)與PHP中的fread

<?php 
/* PUT data comes in on the stdin stream */ 
$putdata = fopen("php://input", "r"); 

/* Open a file for writing */ 
$fp = fopen("myputfile.ext", "w"); 

/* Read the data 1 KB at a time 
    and write to the file */ 
while ($data = fread($putdata, 1024)) 
    fwrite($fp, $data); 

/* Close the streams */ 
fclose($fp); 
fclose($putdata); 
?> 

但是,當發送的文件小於1 KB,那麼它不會讀取。有誰知道在PHP中fread的這種特定行爲? 謝謝!

即使當條件改變爲 while($data=fread($putdata, 512)),它也不會進入循環。我不知道它的具體行爲,但它是否像fread不支持小於1024的塊?只是好奇!

+0

如果數據等於0,則循環會中斷,如果您嘗試讀取並且它只讀取字母0,則$ data將被解析爲false並中斷,這是唯一原因出現在我的腦海裏 –

+0

是的,我同意。但是當我像while($ data = fread($ putdata,512))那樣編輯該條件時,它就不會進入該循環。對不完整的信息抱歉。 – MindMingle

+0

我真的不能重現錯誤。但可能試試'while(!feof($ putdata)){$ data = fread($ putdata,1024); fwrite($ fp,$ data); }' – Timmetje

回答

0

stream_get_contents($ fp)工作!它將一個已打開的流(本例中爲$ fp)的內容作爲一個字符串返回。 謝謝大家的建議:)