在我的应用中,我有一个名为/var/www/app/admin/send_email.php的文件
我想在电子邮件中包含附件,所以我设置了以下内容:
if ($has_form_attachment) {
include('/var/www/app/includes/dynamic/php/StandardEmailAttachments/' . $id_standard_email . '.php');
// send the email
}
问题是,当我尝试发送电子邮件时,出现以下错误:
Warning: require_once(Zend/Pdf/Page.php): failed to open stream: No such file or directory in /var/www/app/includes/dynamic/php/StandardEmailAttachments/Zend/Pdf.php on line 23
但是,此文件肯定存在:
[11:41 PM]-[vagrant@app]-[/var/www/app/includes/dynamic/php/StandardEmailAttachments/Zend]
$ ls
Auth.php Cache.php Config.php Exception.php Fonts/ Loader.php Memory/ Memory.php Pdf/ Pdf.php
我认为问题在于,在send_email.php中包含53.php,在53.php中包含Zend / Pdf.php,但是我不确定如何解决此问题……
<?php
// 53.php
require_once 'Zend/Pdf.php';
try
{
$pdf = Zend_Pdf::load(‘forms/pdf-template.pdf');
}
catch (Zend_Pdf_Exception $e)
{
echo $e->getMessage();
}
$pdfData = $pdf->render();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"form.pdf\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".strlen($pdfData));
echo $pdfData;
exit;
如果我直接从浏览器中调用/includes/dynamic/php/StandardEmailAttachments/53.php即可正常运行,则只有当我尝试运行admin / send_email.php时才会产生错误。任何帮助将不胜感激。
答案 0 :(得分:0)
由于此类问题,应真正避免使用相对路径。不知道您使用的是什么版本的ZF,但显而易见的问题是-为什么不使用composer.json和自动加载?
话虽如此,您的问题的答案在此博客文章的标题中:
PHP: include paths are relative to the current working directory
这就是为什么从一个目录运行命令行脚本与通过Web服务器运行命令行脚本时,其工作方式不同的原因。