23

我想将 PDF 文件保存到用户指定的目录中。我正在使用 FPDF。代码如下:

<?php
//echo "<meta http-equiv=\"refresh\" content=\"0;url=http://www.train2invest.net/useradmin/atest_Khan.php\">";
require('fpdf.php');

//create a FPDF object
$pdf=new FPDF();

//set font for the entire document
$pdf->SetFont('times','',12);
$pdf->SetTextColor(50,60,100);

//set up a page
$pdf->AddPage('P');
$pdf->SetDisplayMode(real,'default');

//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY (10,60);
$pdf->SetFontSize(12);
$pdf->Write(5,'Dear Ms.XYX');

 $filename="test.pdf";
//Output the document
$dir = "/G:/PDF/test.pdf/"; // full path like C:/xampp/htdocs/file/file/
$pdf->Output($dir.$filename,'F');
?>

现在即使我"G:\PDF\"输入文件名它也不会保存它!我尝试了以下方法:

$filename="G:\PDF\test.pdf";
$pdf->Output($filename.'.pdf','F');


$filename="G:\\PDF\\test.pdf";
$pdf->Output($filename.'.pdf','F');

$filename="G:/PDF/test.pdf";
$pdf->Output($filename.'.pdf','F');


$filename="/G:/PDF/test.pdf/";
$pdf->Output($filename.'.pdf','F');

我已经检查了我要写入的目录是否具有写/读权限并且它就在那里。它仍然不起作用!

请帮助某人...

4

9 回答 9

47

您错误地使用了 F 选项,F 旨在将 PDF 保存在服务器本地而不是用户计算机上的特定目录中。所以你会使用类似的东西:

$filename="/home/user/public_html/test.pdf";
$pdf->Output($filename,'F');

这将保存在您的网络服务器的 public_html 目录中

于 2013-07-08T04:10:12.473 回答
6

检查这里的语法:http ://www.fpdf.org/en/doc/output.htm 它是:string Output([string dest [, string name [, boolean isUTF8]]]),所以你必须写:

$pdf->Output('F', $filename, true); // save into the folder of the script

或例如:

$pdf->Output('F', '/var/www/html/wp-content/' . $filename, true); // save into some other location

或相对路径:

$pdf->Output('F', '../../' . $filename, true); // to parent/parent folder

但是,我不确定您是否可以使用 Windows 绝对路径...

于 2019-01-24T11:41:33.317 回答
2

在我自己为此苦苦挣扎之后,必须确保三件事,其中两件事在有关该主题的其他帖子中提到:

  1. 命令:输出('F',“xyz_file”);
  2. 服务器目标目录的权限需要允许写入非升级权限(即 drwxrwxrwx)
  3. 内容类型定义:header("Content-type:application/pdf");
于 2016-08-27T00:19:50.433 回答
1

这是因为您试图将文件保存在它不希望您保存的位置。很可能是因为您没有将目录的权限设置为 777。

如果您的 PHP 脚本是从网页(由 Apache 提供服务)执行的,那么此代码将由 Apache(有时称为 www-data)用户执行。

因此,您的 Apache 用户需要能够写入您尝试写入的目录。

通常,您可能必须在命令行中使用类似这样的内容,将写入权限授予系统的其他用户:

chmod o+w your_directory

您用于上传源文件的软件,如果使用 GUI 上传,应该允许您使用几个复选框来执行此操作——您需要选中“其他”用户的“写入”复选框。

于 2012-09-26T00:48:02.067 回答
1

这是一个简单的解决方案,可以帮助您将文件保存到指定的目录以及可以保存到数据库的文件的 url。

$invoice = new phpinvoice();
...
...

$path = $_SERVER["DOCUMENT_ROOT"].'/uploads/';
$url = $_SERVER['HTTP_HOST'].'/uploads/';

$invoice->render($path.'.pdf','F');
return $url.'.pdf'; // print_r($url.'.pdf')

我希望这有帮助。

于 2020-07-06T12:00:26.807 回答
0

您的 Apache 服务的可能权限:

http://www.php.net/manual/en/function.opendir.php#87479

于 2010-12-02T21:46:50.203 回答
0

您是否尝试过文件上传?我认为你和我可能正在尝试做同样的事情,这似乎有效。我也在使用共享驱动器。

http://php.net/manual/en/features.file-upload.post-method.php

于 2016-03-28T23:05:38.663 回答
0

我这样解决:

public functon GeneratePdf(){
    ...
    PDF::Output("C:/xampp/htdocs/MyProject/doc.pdf","F"); 
}

我将所有目录路径复制到输出方法中,并且没有为此设置更多权限。

希望对你有帮助!!

于 2019-02-15T16:20:31.390 回答
-1

将“F”更改为“D”。D部队下载。所以你的 $pdf->output 行应该是这样的。

$pdf->Output($path,'D');
于 2018-03-22T14:30:13.583 回答