"HTTP/1.1 406 Not Acceptable" 使用 "file_get_contents()" - 相同的域

"HTTP/1.1 406 Not Acceptable" using "file_get_contents()" - Same domain

我正在使用 file_get_contents() 获取一个 PHP 文件,我将其用作创建 PDF 的模板。

我需要向它传递一些 POST 值,以便填充模板并将生成的 HTML 返回到 PHP 变量中。然后与 mPDF.

一起使用

这在我的服务器上完美运行(VPS 使用 PHP 5.6.24)...
现在,我正在客户端的实时站点上安装经过全面测试的脚本 (PHP 5.6.29),
我收到此错误:

PHP Warning: file_get_contents(http://www.example.com/wp-content/calculator/pdf_page1.php): failed to open stream: HTTP request failed! HTTP/1.1 406 Not Acceptable

所以我想这可以在 php.ini 或一些配置文件中修复。
我可以要求 (我想要!!) 我的客户联系他的房东来修复它...

但是因为我知道托管商通常不倾向于更改服务器配置...
我想确切地知道要在哪个文件中更改什么以允许下面的代码工作。

就我个人所知...显然。
还要使主机 (和我的客户!!) 看起来 "easy" 有效地更改它。 ;)

我很确定这只是一个 PHP 配置参数,名字很奇怪...

<?php
$baseAddr = "http://www.example.com/wp-content/calculator/";

// ====================================================
// CLEAR OLD PDFs

$now = date("U");
$delayToKeepPDFs = 60*60*2; // 2 hours in seconds.

if ($handle = opendir('.')) {

    while (false !== ($entry = readdir($handle))) {

      if(substr($entry,-4)==".pdf"){
        $fileTime = filemtime($entry);        // Returns unix timestamp;
        if($fileTime+$delayToKeepPDFs<$now){
          unlink($entry);                     // Delete file
        }
      }
    }
    closedir($handle);
}
// ====================================================



// Random file number
$random = rand(100, 999);

$page1 = $_POST['page1'];   // Here are the values, sent via ajax, to fill the template.
$page2 = $_POST['page2'];

// Instantiate mpdf
require_once __DIR__ . '/vendor/autoload.php';
$mpdf = new mPDF( __DIR__ . '/vendor/mpdf/mpdf/tmp');


// GET PDF templates from external PHP
// ==============================================================
// REF: 
// ==============================================================
$postdata = http_build_query(
  array(
    "page1" => $page1,
    "page2" => $page2
  )
);
$opts = array('http' =>
  array(
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $postdata
  )
);
$context  = stream_context_create($opts);
// ==============================================================


$STYLE .=  file_get_contents("smolov.css", false, $context);
$PAGE_1 .=  file_get_contents($baseAddr . "pdf_page1.php", false, $context);
$PAGE_2 .=  file_get_contents($baseAddr . "pdf_page2.php", false, $context);

$mpdf->AddPage('P');
// Write style.
$mpdf->WriteHTML($STYLE,1);

// Write page 1.
$mpdf->WriteHTML($PAGE_1,2);


$mpdf->AddPage('P');
// Write page 1.
$mpdf->WriteHTML($PAGE_2,2);


// Create the pdf on server
$file =  "training-" . $random . ".pdf";

$mpdf->Output(__DIR__ . "/" . $file,"F");

// Send filename to ajax success.
echo $file;
?>

为了避免"What have you tried so far?"评论:
我在很多组合中搜索了这些关键字,但没有找到需要更改的设置:

非常感谢@Rasclatt 提供的无价帮助!这是一个有效的 cURL 代码,作为 file_get_contents() 的替代方案(我还不太理解它......但证明是有效的!):

function curl_get_contents($url, $fields, $fields_url_enc){
    # Start curl
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    # Required to get data back
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    # Notes that request is sending a POST
    curl_setopt($ch,CURLOPT_POST, count($fields));
    # Send the post data
    curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_url_enc);
    # Send a fake user agent to simulate a browser hit
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11) AppleWebKit/601.1.56 (KHTML, like Gecko) Version/9.0 Safari/601.1.56');
    # Set the endpoint
    curl_setopt($ch, CURLOPT_URL, $url);
    # Execute the call and get the data back from the hit
    $data = curl_exec($ch);
    # Close the connection
    curl_close($ch);
    # Send back data
    return $data;
}
# Store post data
$fields = array(
  'page1' => $_POST['page1'],
  'page2' => $_POST['page2']
);
# Create query string as noted in the curl manual
$fields_url_enc = http_build_query($fields);
# Request to page 1, sending post data
$PAGE_1 .=  curl_get_contents($baseAddr . "pdf_page1.php", $fields, $fields_url_enc);
# Request to page 2, sending post data
$PAGE_2 .=  curl_get_contents($baseAddr . "pdf_page2.php", $fields, $fields_url_enc);