Php FPDF正在获得;“输出目的地不正确”;但是显示正确目的地的错误代码

Php FPDF正在获得;“输出目的地不正确”;但是显示正确目的地的错误代码,php,laravel,vue.js,fpdf,fpdi,Php,Laravel,Vue.js,Fpdf,Fpdi,我正在尝试使用FPDF和FPDI编辑PDF并向其中添加文本。我不断收到“输出目标不正确”错误,但目标是我希望它在其中创建文件的正确位置,为什么FPDF不喜欢我的输出目标 这是在一个laravel项目中 $pdf = new \setasign\Fpdi\Fpdi(); $pdf->AddPage(); $pdf->setSourceFile(public_path('/pdf/higher.pdf')); $tplIdx = $pdf->impo

我正在尝试使用FPDF和FPDI编辑PDF并向其中添加文本。我不断收到“输出目标不正确”错误,但目标是我希望它在其中创建文件的正确位置,为什么FPDF不喜欢我的输出目标

这是在一个laravel项目中

    $pdf = new \setasign\Fpdi\Fpdi();
    $pdf->AddPage();
    $pdf->setSourceFile(public_path('/pdf/higher.pdf'));
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 10, 10, 100);
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
    $pdf->Output(public_path('/pdf/'),'higher2');
    return $pdf;
错误是:

 message: "FPDF error: Incorrect output destination: /home/vagrant/code/project-name/public/pdf/"
我还尝试删除“public_path()”并将其设置为
Output('pdf','higher2')
,但也没有效果

此外,我还尝试将输出pdf的名称更改为
higher2.pdf
,以防它想看到扩展名(但很明显,它的问题更多的是目标,而不是名称)

我甚至尝试将此文件夹的权限更改为可由任何人写入:

drwxrwxrwx  5 ion  staff    160 May 21 05:44 pdf
编辑:请注意,我看到带有public_path()的方法出于某种原因试图保存到我的vagrant文件夹,这也是我感到困惑的部分原因。当我尝试在没有public_path()的情况下保存到“/pdf”时,出现以下错误:

 message: "FPDF error: Incorrect output destination: /pdf/"
编辑2:

$filename="/pdf/higher2.pdf";
$pdf->Output($filename,'F');
我也试过:

$pdf->Output('F','/pdf/higher2.pdf');
并得到了错误信息:

message: "file_put_contents(/pdf/higher2.pdf): failed to open stream: No such file or directory"
还尝试了pdf的原始名称,该名称确实存在,但出现了相同的错误:

$pdf->Output('F','/pdf/higher.pdf');
该方法要求第一个参数为目标,第二个参数为文件名

来自文档:

$filename="/pdf/higher2.pdf";
$pdf->Output($filename,'F');
F:保存到本地文件,文件名由name指定(可能包括路径)

试试这个:

$filename="/pdf/higher2.pdf";
$pdf->Output($filename,'F');

永远不要覆盖正在读取的文件

Output()
方法的签名是:

string Output([string dest [, string name [, boolean isUTF8]]])
$dest
参数定义为:

发送文档的目的地。它可以是以下内容之一:

I: send the file inline to the browser. The PDF viewer is used if available.
D: send to the browser and force a file download with the name given by name.
F: save to a local file with the name given by name (may include a path).
S: return the document as a string.
默认值是I

因此,您的代码:

$pdf->Output(public_path('/pdf/'),'higher2');
毫无意义。我猜您希望将生成的PDF保存到公共区域中名为
higher2.PDF
的路径中。因此,您的代码应该如下所示:

$pdf->Output('F', public_path('/pdf/higher2.pdf'));

PS:

对于
FPDF
包,语法为
$pdf->Output('F','/pdf/higher2.pdf')
错误,您需要按照Jan Slabon的解释调整通话

但是,如果要支持UTF-8字符,则需要该软件包,该软件包也受setasign供应商的支持:

$pdf = new \setasign\Fpdi\Tfpdf\Fpdi();
对于此软件包,您可以按如下方式存储输出:

$pdf->Output('/pdf/higher2.pdf');

因此,我也尝试过这样做,出于某种原因,如果我将文件名设置为
“/higher2.pdf”
,但如果我尝试将其放入我的
/pdf
文件夹,它会起作用,知道为什么吗?@Maribov文件夹
pdf
存在吗?“[…]第一个参数是目标,第二个参数是文件名。”但是为什么代码示例中的参数是互换的呢?如果我将pdf文件夹保留为
“/filename.pdf”
aha,则pdf文件夹确实存在于它保存到的同一文件夹中,以这种方式添加公共路径是有效的!出于某种原因,如果我将其设置为
Output('F','/higher2.pdf')
,它将保存到根文件,但如果我将其设置为`Output('F','/pdf/higher2.pdf'),它将不起作用,谢谢!至于编辑,我只是想用fpdi在上面添加文本。你应该阅读相对路径和绝对路径;-)也欢迎您将我的答案标记为已接受答案。谢谢!我正在使用mpdf,“目的地”是我心目中的一个目录。不是输出类型。多亏了你的回答,我现在知道“目的地”是不明确的,输出类型也是不明确的。