我正在制作一个文件,用于下载存储在我的网站中的文件。但是,当我尝试单击按钮下载文件时,它不会加载文件。我正在使用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(\']]>\', \']]>\', $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>
看一看,纠正我。
最合适的回答,由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中代理巨大文件以供下载时遇到麻烦。这将是一个性能猪,你的主人会注意到。别介意你在《权力的游戏》视频中使用它。通过网站下载共享这些东西是最危险、最不安全的方式,只是乞求被抓到,如果你是这个脚本的宿主,更是如此。