1

我现在正在开发一个程序,该程序调用位于/var/www/vhosts/company/httpdocs 中的脚本mail.php。mail.php 正在尝试执行require_once dirname(__FILE__).'/../pear/Mail.php'smtp 发送,但require_once失败了。我的 PEAR 目录位于 /var/www/vhosts/company/pear。然后我尝试将 /var/www/vhosts/company/pear 添加到 include_path 但require_once仍然失败。

我决定退后一步,将 mail.php 替换为一个简单的脚本,它将file_exists(dirname(__FILE__).'/../pear/Mail.php')结果打印到日志文件中。当我独立运行脚本时,它工作正常并返回 1。当 flash 程序运行它时,它什么也没返回。dirname(__FILE__).'/../pear/Mail.php'无论我是独立运行脚本还是闪存文件运行它,打印出来的结果都是一样的。我还在 Mail.php PEAR 文件上尝试了 chmod 777 ,但没有做任何事情。

关于发生了什么的任何想法?

4

1 回答 1

0

我敢打赌它与两件事有关:

1) Flash/Actionscript 通常不访问本地文件路径。

换句话说,它甚至可能没有执行该文件。

作为已编译的客户端模块,它需要一个实际的 Web 可访问 URL。这里的部分问题是设计本身。尝试在 actionscript 中使用 HTTP 请求,您将获得更好的结果。如果您无权访问 Flash 文件.. 那里的硬豆。

现在,如果您正在通过 actionscript 运行邮件例程?我会说这是一个安全风险。最好让 actionscript 将例程传递给 AJAX 接收器例程,该例程检查会话凭据,然后发送邮件。

2) CWDUP 对服务器的限制。

根据某些服务器配置,可执行文件通常无法访问它们自己的根目录之外的文件路径。(即可执行文件不能调用 ....\another directory\other 文件。)一些服务器允许这样做,但许多服务器不允许。

您可能需要确保您的 PEAR 目录位于您的 php.ini 路径变量中。这样,您根本不需要在目录名称中使用 CWDUP,它会在包含目录中找到它。(这通常是 pear 模块的工作方式。)

因此,与其使用一堆点点,不如尝试从顶部向下工作。

$mailpath=$_SERVER['DOCUMENT_ROOT'].'\include\mail.php';

作为最后的手段,您可以尝试将 mail.php 例程复制到同一目录中,看看是否有效。如果仍然失败,那么它就是您指向 PEAR 的包含路径。(因为 mail.php 可能正在调用 PEAR 函数。)

于 2009-11-20T05:54:40.617 回答