【问题标题】:Chrome has “Failed to load PDF document” error message when call pdf from url in PHP. But works in Firefox and Edge在 PHP 中从 url 调用 pdf 时,Chrome 出现“加载 PDF 文档失败”错误消息。但适用于 Firefox 和 Edge
【发布时间】:2018-02-06 01:58:36
【问题描述】:

我想使用 PHP 从浏览器中的 REST 服务的 URL 打开一个 pdf 文件,但该文件没有打开。 Chrome 说,“无法加载 PDF 文档”。但在 Firefox 和 Edge 中可以正常工作。

这是我的 print.php

<?php

header("Pragma: public"); // required
header('Content-Type: application/pdf');
header('Accept-Ranges: bytes');
header('Content-Transfer-Encoding: binary');

$data = ...; //definition of my json object

$baseUrl = 'http://www.website.com:8080/report/api/something/';
$newUrl = $baseUrl .'path';

$additional_headers = array(
    'Content-Type: application/json',
);

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

$server_output = curl_exec($ch);

echo  $server_output;

?>

更新

我注意到,当我的报告中的记录数量超过一定数量时会发生这种情况(始终在 chrome 中,其他浏览器可以正常工作)。但是我还是解决不了问题。

【问题讨论】:

    标签: php google-chrome pdf


    【解决方案1】:

    终于找到了解决办法!!!

    首先,我更改了我的 CURL 调用,将 CURLOPT_RETURNTRANSFER 更改为 true 然后,使用 Postman 调用我的 PHP 页面,我注意到结果的内容是这样的:

    <br />
    <b>Deprecated</b>:  Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in
    <b>Unknown</b> on line
    <b>0</b>
    <br />
    <br />
    <b>Warning</b>:  Cannot modify header information - headers already sent in
    <b>Unknown</b> on line
    <b>0</b>
    <br />
    <br />
    <b>Warning</b>:  session_start(): Cannot send session cookie - headers already sent in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>4</b>
    <br />
    <br />
    <b>Warning</b>:  session_start(): Cannot send session cache limiter - headers already sent in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>4</b>
    <br />
    <br />
    <b>Warning</b>:  Cannot modify header information - headers already sent in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>5</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>24</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    <br />
    <b>Warning</b>:  Creating default object from empty value in
    <b>C:\xampp\htdocs\project\print.php</b> on line
    <b>77</b>
    <br />
    %PDF-1.5
    %����
    3 0 obj<
    </ColorSpace/DeviceRGB/Subtype/Image/Height 515/Filter/DCTDecode/Type/XObject/Width 545/BitsPerComponent 8/Length 47996>>stream
    ���� ........................................... 
    

    它是从 REST 服务正确下载的 PDF,但 PHP 显示太多错误,因此 Chrome 无法打开 PDF 文件(也是因为这个原因,当我的 PDF 文件的数据计数 error_reporting(0) 放在我的 PHP 文件顶部(显然更好地修复警告):

    <?php
    
    error_reporting(0); // to prevent show warning or errors, use carefully
    
    header("Pragma: public"); // required
    header('Content-Type: application/pdf');
    ...
    

    然后,当我再次执行我的 PHP 页面时,页面的内容(如果只有 PDF 文件)

    %PDF-1.5
    %����
    3 0 obj<
    </ColorSpace/DeviceRGB/Subtype/Image/Height 515/Filter/DCTDecode/Type/XObject/Width 545/BitsPerComponent 8/Length 47996>>stream
    ���� ........................................... 
    

    【讨论】:

    • 这样做的目的是向其他人展示在哪里寻找问题。不是什么是最佳实践。我知道我的建议不是最好的解决方案,而是最糟糕的做法。
    猜你喜欢
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2019-08-17
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多