我正在创建一个用户可以在手机上下载.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()时,它运行正常(在手机中)。
为什么控制权重新回到顶端?
答案 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;