使用FPDF将文件保存到预设目录

25

我想将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');

我已经检查过我想要写入的目录具有读写权限并且确实存在。但它仍然无法工作!

请有人帮帮我...


请使用格式化代码块和 php 标签来提高问题的可读性并吸引相关人员的注意。 - Ish
你尝试将其输出到浏览器以查看 Output() 程序是否正常工作了吗? 尝试将 'F' 切换为 'D'。 - Orbling
我已经尝试过了,但我希望将PDF保存到本地文件夹中,我不希望用户将其保存在他们选择的文件夹下,我希望将PDF保存在代码中指定的文件夹下......但这并没有发生。 - Sharmin
确保PHP具有在该路径中写入的足够权限。 - Mehedi Hasan
9个回答

52

您在错误地使用F选项,F选项是设计用于将PDF本地保存在服务器上,而不是特定目录中的用户机器上。因此,您可以使用类似以下命令:

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

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


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 绝对路径...

2

作为一名曾经遇到过这个问题的人,我认为有三件事情是必须保证的,其中两项已经在其他帖子中提到:

  1. 命令: output('F', "xyz_file");
  2. 服务器目标目录的权限需要允许非特权用户进行写操作(即 drwxrwxrwx)
  3. 内容类型的定义: header("Content-type:application/pdf");

1

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

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

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

通常,您可能需要使用类似以下命令行的方式向系统中的其他用户授予写入权限:

chmod o+w your_directory

如果您使用GUI上传源文件,则使用软件应该允许您通过勾选几个复选框来完成此操作--您需要为“其他”用户勾选“写入”复选框。


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')

我希望这能帮到你。


0

Apache已安装到Linux机器中...所以我还不确定如何从Linux机器中检查文件权限... - Sharmin
@Sharmin 切换到 Apache 运行的用户下,列出目录 'ls -al' 查看该用户对该目录具有哪些权限,注意父目录需要为 Apache 用户具有写入权限,基本上路径中的所有目录和子目录都需要允许 Apache 用户具有写入权限。 - Starlays

0

0
我是这样解决的:
public functon GeneratePdf(){
    ...
    PDF::Output("C:/xampp/htdocs/MyProject/doc.pdf","F"); 
}

我将所有目录路径复制到输出方法中,并没有为此设置进一步的权限。

希望这能帮到你!


-1

将“F”更改为“D”。 D强制下载。 因此,您的$pdf->output行应如下所示。

$pdf->Output($path,'D');

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Derek Brown
抱歉造成困惑。希望这能足够澄清。 - Ashen Deimos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接