如何在浏览器中回显文本而不是下载垃圾文件?

时间:2016-01-28 作者:Blake Miller

我有一个为我开发的自定义插件,我正在尝试调整它的操作并修复一个小错误。

根据特定条件,该插件向用户提供一个自定义url/链接,指向要下载的zip文件。它在下载之前屏蔽文件位置,以向用户隐藏位置。它在正常情况下工作正常:如果用户分配了文件,则会显示下载文件的链接,并通过浏览器fine下载zip文件。但如果该文件不存在,则会下载一个垃圾/格式错误的zip/html文件。

我希望屏幕上只显示“抱歉,找不到文件”-没有其他内容。

这是下载掩码文件中当前提供的代码。

<?php
/**
*
**/
$file = base64_decode($_GET[\'file\']);
if($file === \'\' || !isset($file)){
  echo "Sorry, file not found.";
  die();
}else{
    header(\'Content-Description: File Transfer\');
    header(\'Content-Type: application/octet-stream\');
    header(\'Content-Disposition: attachment; filename="\'.basename($file).\'"\');
    header(\'Expires: 0\');
    header(\'Cache-Control: must-revalidate\');
    header(\'Pragma: public\');
    readfile($file);
    exit;
}
这是下载的格式错误的文件的内容。

<br />
<b>Warning</b>:  readfile(http://{domain(dot)com/{somedirectory}/{somefilename}.zip): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found
 in <b>/home/{account}/public_html/wp-content/plugins/{customplugin}/downloadmask.php</b> on line <b>18</b><br />
有人说这是因为我启用了PHP警告和通知?不知道,在PHP方面,我是个不折不扣的黑客——只知道可能会给自己带来麻烦。但我想学习:)

谢谢

1 个回复
SO网友:vancoder

此更改未经测试:

if( $file === \'\' || ! isset( $file ) || ! file_exists( $file ) ) {