在PHP中提供数字产品下载的最佳方式是什么?

客户为下载链接付费的数字商业产品.

我已将所有压缩文件(产品)放在web文档根目录之外,买家通过与paypal IPN集成的PHP脚本下载它们,以确保下载者是付费买家.

类似于:http://www.mysite.com/download.php?buyer_id=xxx

到目前为止,这一切只能解决一个问题.我通过上面的URL下载的zip文件已损坏,无法使用WinRAR正确打开.但是,直接下载的zip很好.

我的代码

$path = WAREHOUSE_PATH.'/products/'.$identifier.'.zip';
$mm_type="application/octet-stream";
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: " . $mm_type);
header("Content-Length: " .(string)(filesize($path)) );
header('Content-disposition: attachment; filename="'.basename($path).'"');
header("Content-transfer-encoding: binary\n");

$fp = @fopen($path,"rb");
if ($fp) {
  while(!feof($fp)) {
    print(fread($fp, 1024*8));
    flush();
    if (connection_status()!=0) {
      @fclose($fp);
      die();
    }
  }
  @fclose($fp);
}

可能有什么不对?谢谢!

问题解决了:谢谢大家的提示.事实证明,下载的软件包包含一些不应该存在的额外空白区域.愚蠢.

解决方法:

你最好只使用readfile().除非你打开ignore_user_abort,否则如果用户取消,脚本将自动终止.

如果您仍然遇到问题,请在十六进制编辑器中加载文件,并比较前几个字符和最后几个字符.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...