什么是“PK¿¿¿”响应在PHP中意味着什么

时间:2013-06-27 21:27:58

标签: php ios

您好我正在使用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");

3 个答案:

答案 0 :(得分:1)

你试图输出一个zip文件的内容不是吗?

readfile($file)echo file_get_contents($file)的作用相同。如果您尝试向某人提供要下载的文件,不添加任何其他输出,否则您可能会破坏该文件。

我还建议您阅读header功能。这样,您就可以明确地告诉浏览器您正在发送文件,不是具有类似文件内容的HTML页面。 (参见涉及Content-Type

的示例

答案 1 :(得分:0)

PHP应该在readfile()之前设置正确的标题 - 这个LITERALLY将文件读取到浏览器/应用程序......但浏览器/应用程序需要知道如何处理它...

答案 2 :(得分:0)

通常您只是假设一旦连接关闭,数据就完成了传输。如果要验证文件是否已完全传输,并且没有损坏,则需要使用XML或JSON等数据结构:

  1. 分隔数据字段并导致XML / JSON解析器抛出错误(如果省略了一个,也就是说传输在完成之前被切断了。)
  2. 允许您在响应中嵌入多个数据,例如:文件的MD5哈希,可以在客户端重新计算,以验证数据是否完整。
  3. 例如:

    $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;