如何在wp-load.php文件中使用头函数

时间:2016-06-13 作者:Kumar

我正在制作一个文件,用于下载存储在我的网站中的文件。但是,当我尝试单击按钮下载文件时,它不会加载文件。我正在使用header函数来做这件事。有人能回答我为什么在使用wp-load.php 还是我做错了什么。这是我的代码:

  <?php
  require_once(dirname(__FILE__) . \'/wp-load.php\');
  function lastlink($str){
  $regexp = "<a\\s[^>]*href=(\\"??)([^\\" >]*?)\\\\1[^>]*>(.*)<\\/a>";
  if(preg_match_all("/$regexp/siU", $str, $matches)) {
   $str= end($matches[2]);
  }
  return $str;
   }
 $url=$_POST[\'url\'];
 $id=url_to_postid($url);
 $content_post = get_post($id);
 $content = $content_post->post_content;
 $content = apply_filters(\'the_content\', $content);
 $content = str_replace(\']]>\', \']]&gt;\', $content);
 $ur=loadd(lastlink($content));
 $name = \'gameofthrones.mp4\';
 if(isset($_POST["downloadfile"])) {
 $url=str_replace(" ","%20",$ur);
 header(\'Expires: 0\'); // no cache
 header(\'Cache-Control: must-revalidate, post-check=0, pre-check=0\');
 header(\'Last-Modified: \' . gmdate(\'D, d M Y H:i:s\', time()) . \' GMT\');
 header(\'Cache-Control: private\', false);
 header(\'Content-Type: application/force-download\');
 header(\'Content-Disposition: attachment; filename="\' . $name . \'"\');
  header(\'Content-Transfer-Encoding: binary\');
 header(\'Content-Length: \' . get_remote_size($url)); // provide file size
 header(\'Connection: close\');
  readfile($url);
  }
 ?>
<form method="POST">
  <input type="submit" value="DOWNLOAD FILE" name="downloadfile"/>
</form>
看一看,纠正我。

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

您不应该创建独立的文件来执行类似的操作。这就是timthumb成为安全噩梦的原因之一,它极其脆弱和危险。WordPress是一个CMS,它应该处理所有请求。

相反,可以在URL中使用GET或POST变量在WordPress中完成工作,方法是向URL中添加部分,例如example.com/?download=1

E、 g.创建如下下载链接:

<a href="<?php echo home_url(\'/?downloadthing=1\'); ?>">Download</a>
然后钩住init 触发下载的事件:

add_action( \'init\', \'do_the_download\' );
function do_the_download() {
    if ( empty( $_GET[\'downloadthing\'] ) {
        return;
    }
    // the download code goes here
}
同样的技巧也可以用于表单处理程序。对于AJAX,请查看REST API或WP AJAX API

我还想记住,您所做的几乎肯定会让您的主机在PHP中代理巨大文件以供下载时遇到麻烦。这将是一个性能猪,你的主人会注意到。别介意你在《权力的游戏》视频中使用它。通过网站下载共享这些东西是最危险、最不安全的方式,只是乞求被抓到,如果你是这个脚本的宿主,更是如此。