【问题标题】:Forcing Download via Iframe on mobile在移动设备上通过 iframe 强制下载
【发布时间】:2012-03-13 01:03:21
【问题描述】:

我知道这方面有很多问题,但我没有发现任何特定于移动设备的问题。

由于某些原因,我不能在“主”页面上使用 php,所以我通过 jQuery $.get 完成了

它工作正常,除了下载时,我使用 1x1 iframe 开始下载,工作正常.. 除了在 iphone + Galaxy s2 上(我在 atm 上测试过的唯一 2 个)

我在页面上的代码被 iframe 调用:

<?

$email = mysql_escape_string($_GET['email']);
$code = mysql_escape_string($_GET['code']);

include('xxxxx.php');
mysql_select_db($xxxxx);
$now = strtotime(date('c'));

$sql = mysql_query("SELECT * FROM `xxxxx` WHERE `email` = '$email' AND `code` = '$code'");
if(mysql_num_rows($sql) == 0) { echo "<script>alert('Incorrect Code');</script>"; die; }
$query = mysql_fetch_object($sql);
if(strtotime($query->expires) > $now) {

    $filename = "theused.wav";

    header('Content-type: audio/x-wav');
    header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
    header('Content-Transfer-Encoding: binary');
    readfile('http://www.something.co.uk/xxx/' . $filename);
} else {
    echo "<script>alert('Code Expired');</script>"; die;
}
?>

直接访问此页面时下载工作正常,但在 iFrame 上打开时就不行

变得更奇怪...只是尝试做一个 window.location 代替,当连接到 wifi 时它失败并说下载不成功,在 3g 上似乎工作正常。

【问题讨论】:

  • $filename 是您的网络服务器本地的吗?在这种情况下不要使用完整的 url - 当只需要一个简单的本地文件 i/o 操作时,你会强制完成另一个 hTTP 请求。
  • 我必须使用最愚蠢的店面组合之一。我必须绝对路径几乎所有东西。无论如何,这并不能解决我的问题

标签: php iframe mobile download


【解决方案1】:

也许您可以先尝试检查 if(file_exists($path_to_file)),以确保您的绝对路径符合您的期望。如果一切正常,这也意味着它可以找到文件,但标题似乎不适用于手机。这可能表明它不允许在移动浏览器中设置这些标头。

如果是这种情况,您可能需要寻找不同的方法。

【讨论】:

  • 当我直接进入页面时,它似乎可以工作,更奇怪的是,它只会弄乱通过 wifi 下载的内容(下载时显示 下载不成功)但超过 3g获取文件名等
  • 我不认为这个问题是由连接类型(3G 或 WiFi)引起的,我认为这是由您的网站范围和您尝试访问它的不同方式引起的你的手机。我的意思是您可能会尝试使用本地 IP 而不是您正在使用的 3G 地址(例如域名),这会影响您的代码解释相对路径的方式。
猜你喜欢
  • 1970-01-01
  • 2020-11-18
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
相关资源
最近更新 更多