PHP readfile下载当前页面代码,而不是指定给它的url
嗨,我已经在这方面工作了一段时间,似乎没有进展,所以我希望有人能帮助我,我已经阅读了多个不同的堆栈溢出答案,并尝试了多个不同的东西,但似乎没有进展 问题 我正在开发一个Wordpress插件,它在网站公共端的一个页面上显示多个按钮,所有这些按钮都是用来触发不同文件的下载。我自己也尝试过调试,并检查url是否被正确选择,然后是否被正确分解,为每个文件提供了所有正确的路径、文件名和文件格式。在回显了很多变量之后,检查内容是否正确(注释出标题) 以下斜体文本包含原始版本,但情况不再如此,以升华文本打开pdf文件显示pdf存在。在pdf文件之前,它似乎还包含了大量html(这在我的php中不存在,但看起来是由其他php文件和wordpress自身存在的)。由于@Marc B comment添加了PHP readfile下载当前页面代码,而不是指定给它的url,php,wordpress,download,Php,Wordpress,Download,嗨,我已经在这方面工作了一段时间,似乎没有进展,所以我希望有人能帮助我,我已经阅读了多个不同的堆栈溢出答案,并尝试了多个不同的东西,但似乎没有进展 问题 我正在开发一个Wordpress插件,它在网站公共端的一个页面上显示多个按钮,所有这些按钮都是用来触发不同文件的下载。我自己也尝试过调试,并检查url是否被正确选择,然后是否被正确分解,为每个文件提供了所有正确的路径、文件名和文件格式。在回显了很多变量之后,检查内容是否正确(注释出标题) 以下斜体文本包含原始版本,但情况不再如此,以升华文本打开
exit(),我还编辑了原始代码在readfile()之后的code>in代码>在pdf数据之后停止任何html。我现在需要知道的是如何在readfile()之前删除所有代码代码>在php中,我相信这将使下载只剩下pdf,并有望正确打开。
下面这行似乎没有得到它要下载的文件。我已经注释掉并在旁边写下了解析的_url变量的结果,以防我将错误的内容传递给readfile
当前,代码触发下载启动并创建附件,然后下载一个文件,该文件虽然名称正确,但包含当前页面的html,而不是正在下载的文件的数据
单击按钮,它会将urlid添加到顶部的url中,然后在该url上,代码会获取id并从url数组中找到要下载的文件url
这方面的任何帮助都会很好这是我的代码
PHP代码
if(isset($_GET['urlid'])){
/*
// Code is a modified version from
author: pixeline
website: http://www.pixeline.be
last updated: 14 January 2009
*/
$urlid = $_GET['urlid'];
$filename = urldecode(urls_array[$urlid]); /* http://example.co.uk/wp-content/uploads/2016/10/pdfdownload.pdf */
// converting url to local path so Apache can find the file.
// force download:
// required for IE, otherwise Content-disposition is ignored
if (ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
$parsed_url = parse_url($filename);
$fileinfo = pathinfo($filename);
$parsed_url['extension'] = $fileinfo['extension']; // .pdf
$parsed_url['filename'] = $fileinfo['basename']; // pdfdownload.pdf
$parsed_url['localpath'] = $_SERVER['DOCUMENT_ROOT'] . $parsed_url['path']; /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */
// just in case there is a double slash created when joining document_root and path
$parsed_url['localpath'] = preg_replace('/\/\//', '/', $parsed_url['localpath']);
if (!is_readable($parsed_url['localpath'])) {
die('File not found: ' . $parsed_url['localpath']);
}
$allowed_ext = array('pdf', 'png', 'jpg', 'jpeg', 'zip', 'doc', 'xls', 'gif', 'exe', 'ppt');
if (!in_array($parsed_url['extension'], $allowed_ext)) {
die('This file type is forbidden.');
}
switch ($parsed_url['extension']) {
case "pdf": $ctype = "application/pdf";
break;
case "exe": $ctype = "application/octet-stream";
break;
case "zip": $ctype = "application/zip";
break;
case "doc": $ctype = "application/msword";
break;
case "xls": $ctype = "application/vnd.ms-excel";
break;
case "ppt": $ctype = "application/vnd.ms-powerpoint";
break;
case "gif": $ctype = "image/gif";
break;
case "png": $ctype = "image/png";
break;
case "jpeg":
case "jpg": $ctype = "image/jpg";
break;
default: $ctype = "application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . $parsed_url['filename'] . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($parsed_url['localpath']));
flush();
readfile($parsed_url['localpath'] ); /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */
exit();
}
?>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity1) ?>">
<button type="button" value="Download1" class="button button-blue" >Download pdf one</button>
</a>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity2) ?>">
<button type="button" value="Download2" class="button button-blue" >Download pdf two</button>
</a>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity3) ?>">
<button type="button" value="Download3" class="button button-blue" >Download pdf three</button>
</a>
if(isset($\u GET['urlid']){
/*
//代码是来自的修改版本
作者:pixeline
网站:http://www.pixeline.be
最后更新日期:2009年1月14日
*/
$urlid=$_GET['urlid'];
$filename=urldecode(URL_数组[$urlid]);/*http://example.co.uk/wp-content/uploads/2016/10/pdfdownload.pdf */
//将url转换为本地路径,以便Apache可以找到该文件。
//强制下载:
//IE必需,否则将忽略内容配置
if(ini_get('zlib.output_compression'))
ini_集('zlib.output_compression','Off');
$parsed_url=parse_url($filename);
$fileinfo=pathinfo($filename);
$parsed_url['extension']=$fileinfo['extension'];/.pdf
$parsed_url['filename']=$fileinfo['basename'];//pdfdownload.pdf
$parsed_url['localpath']=$_SERVER['DOCUMENT_ROOT'].$parsed_url['path'];/*/var/www/web/wp content/uploads/2016/10/pdfdownload.pdf*/
//以防在连接文档根和路径时创建双斜杠
$parsed\u url['localpath']=preg\u replace('/\/\/','/',$parsed\u url['localpath']);
如果(!是可读的($parsed_url['localpath'])){
die('未找到文件:'.$parsed_url['localpath']);
}
$allowed_ext=array('pdf','png','jpg','jpeg','zip','doc','xls','gif','exe','ppt');
if(!in_数组($parsed_url['extension'],$allowed_ext)){
die('禁止使用此文件类型');
}
开关($parsed_url['extension'])){
案例“pdf”:$ctype=“application/pdf”;
打破
案例“exe”:$ctype=“应用程序/八位字节流”;
打破
案例“zip”:$ctype=“application/zip”;
打破
案例“doc”:$ctype=“application/msword”;
打破
案例“xls”:$ctype=“application/vnd.ms excel”;
打破
案例“ppt”:$ctype=“application/vnd.ms powerpoint”;
打破
大小写为“gif”:$ctype=“image/gif”;
打破
案例“png”:$ctype=“image/png”;
打破
案例“jpeg”:
案例“jpg”:$ctype=“image/jpg”;
打破
默认值:$ctype=“应用程序/强制下载”;
}
标题(“Pragma:public”);//必需
标题(“到期日:0”);
标头(“缓存控制:必须重新验证,后检查=0,前检查=0”);
header(“缓存控制:private”,false);//某些浏览器需要
标题(“内容类型:$ctype”);
标题(“内容处置:附件;文件名=\”.$parsed\uURL['filename']。\”;”;
标题(“内容传输编码:二进制”);
标题(“内容长度:”.filesize($parsed_url['localpath']);
冲洗();
readfile($parsed_url['localpath']);/*/var/www/web/wp content/uploads/2016/10/pdfdownload.pdf*/
退出();
}
?>
因为无法删除php文件中已经存在的html。我创建了一个单独的php文件来保存下载文件的php。然后回到原始文件中,我将按钮更改为submit按钮,并将它们放在一个表单中,在新的download.php文件中添加一个post操作
单击submit按钮后,它将发布到php文件并触发下载。这是我能找到的摆脱Wordpress在页面顶部添加的html的唯一方法,它会破坏下载的文件
感谢大家的帮助,现在问题已经解决。在readfile调用之后,您必须退出()。否则PHP将继续运行并输出所有下载后的HTML。
if(isset($_GET['urlid'])){
/*
// Code is a modified version from
author: pixeline
website: http://www.pixeline.be
last updated: 14 January 2009
*/
$urlid = $_GET['urlid'];
$filename = urldecode(urls_array[$urlid]); /* http://example.co.uk/wp-content/uploads/2016/10/pdfdownload.pdf */
// converting url to local path so Apache can find the file.
// force download:
// required for IE, otherwise Content-disposition is ignored
if (ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
$parsed_url = parse_url($filename);
$fileinfo = pathinfo($filename);
$parsed_url['extension'] = $fileinfo['extension']; // .pdf
$parsed_url['filename'] = $fileinfo['basename']; // pdfdownload.pdf
$parsed_url['localpath'] = $_SERVER['DOCUMENT_ROOT'] . $parsed_url['path']; /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */
// just in case there is a double slash created when joining document_root and path
$parsed_url['localpath'] = preg_replace('/\/\//', '/', $parsed_url['localpath']);
if (!is_readable($parsed_url['localpath'])) {
die('File not found: ' . $parsed_url['localpath']);
}
$allowed_ext = array('pdf', 'png', 'jpg', 'jpeg', 'zip', 'doc', 'xls', 'gif', 'exe', 'ppt');
if (!in_array($parsed_url['extension'], $allowed_ext)) {
die('This file type is forbidden.');
}
switch ($parsed_url['extension']) {
case "pdf": $ctype = "application/pdf";
break;
case "exe": $ctype = "application/octet-stream";
break;
case "zip": $ctype = "application/zip";
break;
case "doc": $ctype = "application/msword";
break;
case "xls": $ctype = "application/vnd.ms-excel";
break;
case "ppt": $ctype = "application/vnd.ms-powerpoint";
break;
case "gif": $ctype = "image/gif";
break;
case "png": $ctype = "image/png";
break;
case "jpeg":
case "jpg": $ctype = "image/jpg";
break;
default: $ctype = "application/force-download";
}
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"" . $parsed_url['filename'] . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($parsed_url['localpath']));
flush();
readfile($parsed_url['localpath'] ); /* /var/www/web/wp-content/uploads/2016/10/pdfdownload.pdf */
exit();
}
?>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity1) ?>">
<button type="button" value="Download1" class="button button-blue" >Download pdf one</button>
</a>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity2) ?>">
<button type="button" value="Download2" class="button button-blue" >Download pdf two</button>
</a>
<a href="http://<?php print($_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']) ?>&urlid=<?php print($downloadablepdf->urlidentity3) ?>">
<button type="button" value="Download3" class="button button-blue" >Download pdf three</button>
</a>