PHP中的require问题

时间:2018-11-03 23:56:45

标签: php

在我的应用中,我有一个名为/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时才会产生错误。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于此类问题,应真正避免使用相对路径。不知道您使用的是什么版本的ZF,但显而易见的问题是-为什么不使用composer.json和自动加载?

话虽如此,您的问题的答案在此博客文章的标题中:

PHP: include paths are relative to the current working directory

这就是为什么从一个目录运行命令行脚本与通过Web服务器运行命令行脚本时,其工作方式不同的原因。