2

ユーザーが携帯電話に .vcf ファイルをダウンロードできる Web サイトを作成しています。ファイルはブラウザーには保存されませんが、データベースに保存されたデータを使用して生成されます。

ファイル 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) から同じことをしようとすると、動作しません。

コンテンツが「not ok」のファイル abc.html (abc は私の php ファイルの名前) を作成することもあれば、コンテンツが「not ok」のファイル contact.vcf/contact.html を作成することもあります。 ok」は、セッション変数が何らかの値と等しくない場合に出力する行です)

パソコンでは動くのにスマホでは動かない理由がわかりません。助けてください。モバイル ブラウザから機能しない場合、私の Web サイトの全体的なアイデアが失われます。ありがとう!

編集:

私はどういうわけか問題を部分的に解決しました.ループの 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 に答える