用于动态生成的urls / pdf的PHP file_get_contents

时间:2016-01-07 09:55:41

标签: php html url pdf zip

我想遍历一个url数组并创建一个zip文件。网址是动态生成的pdf文件/发票。该程序适用于物理存在的文件,但对于动态生成的文件,它获取html源代码/页面而不是pdf。

是否有使用的替代方法:file_gets_contents?。

以下是模拟代码:

// prepare array of URL's/files

$files = array(
     "1" => "http://localhost/app/addon/test.pdf", //works
     "2" => "http://localhost/app/addon/test2.pdf",//works
     "3" => "http://localhost/app/index.php?section=flight-fatturazione&option=getPdf&tipo=invoice&id=6", //doesn't work
     "4" => "http://localhost/app/index.php?section=flight-fatturazione&option=getPdf&tipo=invoice&id=4",
     "5"=>  "http://localhost/app/index.php?section=flight-fatturazione&option=getPdf&tipo=invoice&id=2"
);

// create new zip opbject
$zip = new ZipArchive();

// create a temp file & open it
$tmp_file = tempnam('.','');
$zip->open($tmp_file, ZipArchive::CREATE);

// loop through url/file array
foreach($files as $file){
   // download file
   // this gets file contents, what to do when file is created on the fly
   $download_file = file_get_contents($file);
   // add it to the zip
   $zip->addFromString(basename($file),$download_file);
}
   // close zip
$zip->close();

   // send the file to the browser as a download
header('Content-disposition: attachment; filename=download.zip');
header('Content-type: application/zip');
readfile($tmp_file);

目前,代码使用with 2 pdf文件(即文件物理上位于服务器:test.pdf,test2.pdf)和3个html文件创建一个zip,即使访问URL直接生成pdfs。

2 个答案:

答案 0 :(得分:0)

您将文件3-5保存为.php文件。是否将它们重命名为.pdf?

如果你正在接收html文件,那么它们是否包含生成它们的PHP代码? (就像在,它是否返回i​​ndex.php的代码?)很想知道它们是否真的被处理了。如果这些都不起作用,您是否需要特定的cookie或其他设置(会话?)才能获得获取pdf的请求?

答案 1 :(得分:0)

经过很长一段时间并尝试不同的解决方案后,我解决了这个问题。正如我在问题中提到的那样,我正在动态生成发票并尝试使用

获取内容
file_get_contents

传递生成的发票的网址。这会在zip中返回html页面而不是pdf。有人建议使用curl并模拟http请求,但这并没有解决问题。所有这些都是为了避免我的应用程序中的代码重复,但最终我没有选择。

因此,对于每个发票我调用动态创建它的函数然后我用file_get_contents获取内容

function createInvoiceContent($invoice_id){

   require_once('tcpdf_include.php');

   // create new PDF document
   $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

   /* Do a bunch of stuff to create the invoice */



   // Close and output PDF document
   // This method has several options, check the source code documentation  for more information.
   $invoice_content = $pdf->Output('invoice_name.pdf', 'I');
   return $invoice_content;
}

我可以在需要时调用此功能。

   //get pdf invoice  file
    $invoice = file_get_contents(createInvoiceContent($invoice_id));