您好我正在使用PHP Web服务上的函数readfile()将文件下载到iOS上的应用程序,我想知道文件是否正确下载但我不知道如何做到这一点。< / p>
所以我正在尝试的是做一些回声来知道文件是否已经像这样下载:
echo "before";
readfile($file);
echo "after";
但我得到的回应是:
beforePK¿¿¿
任何人都知道这意味着什么,或者我怎么知道文件是否正确下载?
更新: 是的,它是一个zip文件,这是我的标题
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$ticket");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: binary");
答案 0 :(得分:1)
你试图输出一个zip文件的内容不是吗?
readfile($file)
与echo file_get_contents($file)
的作用相同。如果您尝试向某人提供要下载的文件,不添加任何其他输出,否则您可能会破坏该文件。
我还建议您阅读header功能。这样,您就可以明确地告诉浏览器您正在发送文件,不是具有类似文件内容的HTML页面。 (参见涉及Content-Type
)
答案 1 :(得分:0)
PHP应该在readfile()
之前设置正确的标题 - 这个LITERALLY将文件读取到浏览器/应用程序......但浏览器/应用程序需要知道如何处理它...
答案 2 :(得分:0)
通常您只是假设一旦连接关闭,数据就完成了传输。如果要验证文件是否已完全传输,并且没有损坏,则需要使用XML或JSON等数据结构:
例如:
$file = 'myfile.zip';
$my_data = array(
'file' => base64_encode(file_get_contents($file)),
'hash' => md5_file($file)
)
//header calls
header(...)
echo json_encode($my_data);
exit;