当flash程序调用时,PHP脚本无法找到文件

时间:2009-11-17 22:40:05

标签: php require-once

我正在开发一个程序,它调用位于/ 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程序运行它时,它什么也没有返回。无论我是独立运行脚本还是运行flash文件,打印出dirname(__FILE__).'/../pear/Mail.php'都会返回相同的内容。我也在Mail.php PEAR文件上尝试过chmod 777,但是没有做任何事情。

有关正在发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

2)服务器上的CWDUP限制。

根据某些服务器配置,excecutable通常无权访问其自己的根目录之外的文件路径。 (即一个可执行文件不能调用.... \另一个目录\其他文件。)有些服务器会允许这样做,但很多人不会。

您可能希望确保您的PEAR目录位于php.ini路径变量中。这样您根本不需要在目录名中使用CWDUP,它将在includes目录中找到它。 (这通常是梨模块的工作原理。)

所以不要使用buncha dot-dots ..尝试从顶部开始工作。

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

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