PHP:强制下载不能在手机上运行

时间:2013-03-29 13:04:25

标签: php android internet-explorer download

我正在创建一个用户可以在手机上下载.vcf文件的网站。该文件不存储在我的浏览器中,而是使用我数据库中存储的数据生成的。

假设我有一个文件abc.php:

<?php session_start();
?>
<?php
 if($_SESSION[abc] != some_value)
 {
  echo "not ok";
  exit();
  }
else
 {
   header("Content-Description: File Transfer");
   header("Content-Type: text/vcard");
   header("Content-Disposition: attachment; filename=contact.vcf");
   echo "All vcard details in the standard vCard format......
   .......
   .....";
   session_destroy();
   exit();
 }

现在,这在计算机浏览器(IE,Chrome等)上运行得非常好,但是当我尝试从移动浏览器(android,windows phone)做同样的事情时,它不起作用。

有时它会创建一个文件abc.html(abc是我的php文件的名称),内容为“not ok”,或者有时会创建一个文件contact.vcf / contact.html,内容为“not ok”。(其中“不正常”是当会话变量不等于某个值时打印的行)

我无法理解为什么它在电脑上工作但不在智能手机上工作。请帮忙。如果它不能通过移动浏览器工作,那么我的网站的整个想法都会丢失! 谢谢!

修改

我已经以某种方式部分地解决了这个问题。就在我的循环中的exit()之前,我正在使用session_destroy(); 现在,我不知道为什么,但是一切都完成之后,控制再次进入顶部,检查“如果”条件,并且从现在会议被破坏,条件成真,我得到了“不行“作为我文件中的输出。

现在当我删除session_destroy()时,它运行正常(在手机中)。

为什么控制权重新回到顶端?

1 个答案:

答案 0 :(得分:0)

看起来您没有设置正确的标头。在PHP中试试这个

header('Content-Description: File Transfer');
header('Content-Type: text/vcard');
header('Content-Disposition: attachment; filename=contact.vcf');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $length); //Set content length here
ob_clean();
flush();
echo $content; //echo the content
exit;