2

我正在创建用户可以在其手机上下载 .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 手机)上做同样的事情时,它就不起作用了。

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

我不明白为什么它可以在计算机上工作,但不能在智能手机上工作。请帮忙。如果它在移动浏览器上不起作用,那么我的网站的整个想法就会丢失!谢谢!

编辑:

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

现在,当我删除 session_destroy() 时,它工作正常(在手机中也是如此)。

任何想法为什么控制回到顶部?

4

1 回答 1

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;
于 2013-03-29T13:48:13.403 回答