Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP readfile下载当前页面代码,而不是指定给它的url_Php_Wordpress_Download - Fatal编程技术网

PHP readfile下载当前页面代码,而不是指定给它的url

PHP readfile下载当前页面代码,而不是指定给它的url,php,wordpress,download,Php,Wordpress,Download,嗨,我已经在这方面工作了一段时间,似乎没有进展,所以我希望有人能帮助我,我已经阅读了多个不同的堆栈溢出答案,并尝试了多个不同的东西,但似乎没有进展 问题 我正在开发一个Wordpress插件,它在网站公共端的一个页面上显示多个按钮,所有这些按钮都是用来触发不同文件的下载。我自己也尝试过调试,并检查url是否被正确选择,然后是否被正确分解,为每个文件提供了所有正确的路径、文件名和文件格式。在回显了很多变量之后,检查内容是否正确(注释出标题) 以下斜体文本包含原始版本,但情况不再如此,以升华文本打开

嗨,我已经在这方面工作了一段时间,似乎没有进展,所以我希望有人能帮助我,我已经阅读了多个不同的堆栈溢出答案,并尝试了多个不同的东西,但似乎没有进展

问题

我正在开发一个Wordpress插件,它在网站公共端的一个页面上显示多个按钮,所有这些按钮都是用来触发不同文件的下载。我自己也尝试过调试,并检查url是否被正确选择,然后是否被正确分解,为每个文件提供了所有正确的路径、文件名和文件格式。在回显了很多变量之后,检查内容是否正确(注释出标题)

以下斜体文本包含原始版本,但情况不再如此,以升华文本打开pdf文件显示pdf存在。在pdf文件之前,它似乎还包含了大量html(这在我的php中不存在,但看起来是由其他php文件和wordpress自身存在的)。由于@Marc B comment添加了
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>