【问题标题】:header("Content-Type: application/zip") and header("Content-Disposition: attachment; filename=$fileName") not working in wordpress?header("Content-Type: application/zip") 和 header("Content-Disposition: attachment; filename=$fileName") 在 wordpress 中不起作用?
【发布时间】:2016-06-29 06:20:04
【问题描述】:

以上两个函数在wordpress中不起作用。我想下载文件,我在 xampp 中运行 wordpress,我也在另一台在线服务器上尝试过,但 wordpress 框架仍然无法正常工作。

但这是在另一个我没有使用 wordpress 框架的在线服务器上工作。

wordpress使用以上两个功能有问题吗?

(下面的代码只接受获取请求,这是要从服务器下载的文件的路径,并且在验证令牌后,路径是从数据库中给出的)

<?php 
ini_set('display_errors', -1 );
require('wp-blog-header.php');
require('wp-config.php');
$token = ($_GET["token"]);
$platform = ($_GET["platform"]);
$resolution = ($_GET["resolution"]);
$assetName =($_GET["assetName"]);
$currentTime = date("ymdHi" , time());
if($wpdb->query("SELECT * FROM wp_token_table WHERE token='$token'")){
    $result = $wpdb->get_results("SELECT (path) FROM wp_path_table WHERE os='$platform' AND res = '$resolution' AND bundle_name= '$assetName'");
    if($result){
    $path = $result[0]->path;
    $fileName = basename($assetName);
    $filePath = $path;
        if(!empty($fileName) && file_exists($filePath)){
            header("Cache-Control: public");  
            header("Content-Description: File Transfer");
            header("Content-Type: application/zip");
            header("Content-Length:".filesize($filePath));
            header("Content-Disposition: attachment; filename=$fileName");
            header("Content-Transfer-Encoding: binary");   
            readfile($filePath);        
            exit;
        }

    }
}else echo "false";

?>

【问题讨论】:

  • 您不能在输出后更改标题,不幸的是,WordPress 所做的第一件事就是输出模板的标题部分。如果您打开显示错误,您可能会看到一个警告。
  • 您最好的选择是,完全在 wordpress 之外创建一个 php 文件,您可以通过将表单提交到 iframe 来链接到该文件。在此文件中,您将输出文件的标题和内容。
  • 那么我可以为这个@ArtisiticPhoenix 做些什么,但它正在其他在线服务器上工作。
  • 其他没有wordpress的在线服务器对吗?
  • 您可以尊重我发布的这个答案。 stackoverflow.com/questions/166221/…

标签: php wordpress server


【解决方案1】:

首先让我们验证我的假设是否正确。在 wordpress index.php 文件中,在顶部添加这个(显然在 &lt;?php 标签之后)

ini_set('display_errors', -1 );

当您尝试下载文件时,请告诉我内容。

SQL 注入会让我 用你的网址做这个

 $token="'; SELECT * FROM wp_token_table WHERE 1 LIMIT 1; --";

然后您的查询将是这样的

"SELECT * FROM wp_token_table WHERE token=''; SELECT * FROM wp_token_table WHERE 1 LIMIT 1; --'"

-- 是注释的开始以丢弃结尾' 然后我基本上会从该表中选择第一个条目。或者更糟。

防止这种情况非常重要。

对于错误,我会这样做

 <?php
  echo "hello";
  /* -- rest of code */

并确保页面首先工作。一旦您知道您可以排除 url 的问题,然后取消注释代码的位告诉它中断。这会告诉你错误在哪里。不幸的是,如果它在一个有语法错误的页面上,错误报告通常不会起作用,因为 php 甚至无法解析页面,所以它不能在上面运行任何东西。

【讨论】:

  • 在 index.php 或文件中我有那个头代码是 check.php?
  • 索引更好,但是在进行标头调用之前的任何地方都应该可以工作。这将显示来自 php.ini 的任何通知或警告。通常是隐藏的。
  • 它没有显示来自 php 的警告。只是说无法访问此站点localhost/wordpress/… 的网页可能暂时关闭,或者它可能已永久移动到新的网址。 ERR_INVALID_RESPONSE
  • 您没有收到此警告? Warning: "Headers already sent" or "Cannot modify header information"可以把代码放在下载文件的问题里。
  • 你现在可以查看@ArtisiticPhoenix
猜你喜欢
  • 2011-06-18
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 1970-01-01
  • 2013-04-07
  • 2022-01-20
相关资源
最近更新 更多