正在尝试通过 PHP 强制下载

Attempting to force download via PHP

我有一个 PDF 文件存储在 Wordpress 堆栈的上传目录中。我试图强制浏览器通过 AJAX.

下载 PDF
    function get_pdf(){
    
      $file_path = realpath(WP_CONTENT_DIR).'/uploads/pdfs/12345.pdf';
    
        if (file_exists($file_path)) {
      
            header('Content-Description: File Transfer');
            header('Content-Type: application/octet-stream');
            header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file_path));
            readfile($file_path, true);
                    
            exit;
           
        }
    
    }

当我运行这个函数没有任何反应。我也尝试过这种触发下载的方法:

    if (file_exists($file_path)) {


      $handle = fopen($file_path, 'rb');
      $buffer = '';

      while (!feof($handle)) {
        $buffer = fread($handle, 4096);
        echo $buffer;
        ob_flush();
        flush();
      }

      fclose($handle);
        

    }

关于如何调试它以使其正常工作有什么建议吗?

当浏览器导航到URL时,响应将内联显示(即在浏览器window中)或保存。其中哪一个发生由文件类型和 Content-Disposition header.

的组合决定

当浏览器使用 Ajax 请求数据时,响应 将由发出请求的 JavaScript 处理

响应 header(或有关响应的任何其他内容)无法使 JavaScript 保存文件而不是将其传递给 JavaScript 进行处理。

JavaScript可以写成注意Content-Dispositionheader但是,一般来说,JS的作者赢了不需要像那样使用 header 来决定如何处理文件。