2013-03-29 47 views
2

我正在創建網站,用戶可以在其中下載.vcf文件的手機。該文件沒有存儲在我的瀏覽器中,而是使用我的數據庫中存儲的數據生成的。PHP:強制下載不能在手機上工作

假設我有一個文件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,鉻等),但是當我試圖從移動瀏覽器做同樣的事情(機器人,Windows手機),它不起作用。

有時它會創建一個文件abc.html(abc是我的php文件的名稱),其內容爲「不正常」,或者有時會創建一個文件contact.vcf/contact.html,內容爲「不好」。 (其中「不好」是我打印時,會話變量不等於某個值的行)

我不明白爲什麼它在計算機中工作,但不是在智能手機中。請幫忙。如果它不適用於手機瀏覽器,那麼我的網站的整個想法就會丟失! 謝謝!

編輯:

我莫名其妙地解決了這個問題partially.Just退出()在我的循環之前,我用session_destroy(); 現在,我不知道爲什麼,但在完成所有事情後,控制權再次進入最高點,檢查「如果」情況,並且從現在開始會話被破壞,條件變得真實,並且我越來越「不好」作爲我的文件中的輸出。

現在當我刪除session_destroy(),它工作正常(也在手機)。

任何想法爲什麼控制回到頂部?

+0

智能手機是否接受.vcf文件? – H2ONOCK

回答

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; 
+0

非常感謝您的幫助! – nfsleo07

+0

我已經做到了。我仍然不能理解它是怎麼工作的,但我從最後刪除了session_destroy(),現在它正在工作。 – nfsleo07

+0

這個答案不完整,缺乏解釋。只適用於Android和iOS7。缺少這些:'$ length = filesize('contact.vcf'); $ content = file_get_content('contact.vcf');' – Raptor