2015-08-14 46 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)的内容作为一个字符串返回。 谢谢大家的建议:)