PHP -如何在WordPress中创建下载URL并避免直接的html链接

epggiuax  于 2023-03-01  发布在  WordPress
关注(0)|答案(1)|浏览(183)

我需要创建一个文件,然后将其作为一个WordPress插件中的html非直接下载链接。由于我还没有找到一个明确的解决方案,我发布了我所做的。也许它可以保存别人的时间。
在我的插件中,我创建了一个“脏的”自定义端点来服务于任何来自受限文件夹(在非公共位置)的现有文件。

define( 'RESTRICTED_DOWNLOAD_DIR', '/restricted-dir/' );

add_action( 'parse_request', 'parse_request_endpoint' );

function parse_request_endpoint($wp) {
        
        //endpoint url
        $endpoint="download";
        if ( $endpoint == $wp->request ) {
            @$filename=RESTRICTED_DOWNLOAD_DIR.$_GET["fn"];
            if(is_file($filename)){
                header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="' . basename($filename) . '"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($filename));
            readfile($filename);
                unlink($filename);//If served just once
                exit;
            }
        }
    }

shortcode函数或任何地方的html输出:

function my_file_link(){
   $filename="myfile.ext";
   create_my_file(RESTRICTED_DOWNLOAD_DIR.$filename);//Logic for file creation
   $html="<a href=\"/download?fn=$filename\">Download my file</a>";
   return $html;
}

这样,如果文件被找到得到下载,但如果网址是调用没有正确的参数WordPress将显示一个404页面。该解决方案可以得到改善,在下载端点添加一个阻止逻辑。
对我来说,这是一个可行的解决方案,我希望它可以保存别人的研究时间。任何改进都是受欢迎的。

yr9zkbsy

yr9zkbsy1#

**答案:**非常简单,在锚标记中添加download属性!

例如<a link="/pdfs/file.pdf" download>Download PDF File </a>
希望这对你有帮助!!

相关问题