我正在从原始二进制数据创建一个PDF文件并且它工作正常但是由于我在PHP文件中定义的标题,它会提示用户“保存”文件或“打开”。有什么方法可以将文件保存在本地服务器的某处http://localhost/pdf
?
以下是我在页面中定义的标题
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Transfer-Encoding: binary");
答案 0 :(得分:10)
如果您想将文件保存在服务器上而不是让访问者下载它,您将不需要标题。标题用于告诉客户端您发送的内容,在这种情况下没有任何内容(尽管您可能会显示链接到新创建的PDF的页面)。
因此,只需使用file_put_contents
等函数在本地存储文件,最终让您的Web服务器处理文件传输和HTTP标头。
// Let's say you have a function `generate_pdf()` which creates the PDF,
// and a variable $pdf_data where the file contents are stored upon creation
$pdf_data = generate_pdf();
// And a path where the file will be created
$path = '/path/to/your/www/root/public_html/newly_created_file.pdf';
// Then just save it like this
file_put_contents( $path, $pdf_data );
// Proceed in whatever way suitable, giving the user feedback if needed
// Eg. providing a download link to http://localhost/newly_created_file.pdf
答案 1 :(得分:0)
您可以使用输出控制功能。将ob_start()放在脚本的开头。最后使用ob_get_contents()并将内容保存到本地文件。
之后,您可以使用ob_end_clean()或ob_end_flush(),具体取决于您是否要将PDF输出到浏览器,或者您将用户重定向到其他页面。如果使用ob_end_flush(),请确保在刷新数据之前设置标题。