PHP脚本在被flash程序调用时无法找到文件

PHP脚本在被flash程序调用时无法找到文件,php,require-once,Php,Require Once,我现在正在开发一个程序,该程序调用位于/var/www/vhosts/company/httpdocs中的脚本mail.php。mail.php正在尝试执行require\u once dirname\u FILE\u.'/../pear/mail.php'进行smtp发送,require\u once失败。我的PEAR目录位于/var/www/vhosts/company/PEAR。然后我尝试将/var/www/vhosts/company/pear添加到include_路径,但require

我现在正在开发一个程序,该程序调用位于/var/www/vhosts/company/httpdocs中的脚本mail.php。mail.php正在尝试执行require\u once dirname\u FILE\u.'/../pear/mail.php'进行smtp发送,require\u once失败。我的PEAR目录位于/var/www/vhosts/company/PEAR。然后我尝试将/var/www/vhosts/company/pear添加到include_路径,但require_once仍然失败

我决定退一步,将mail.php替换为一个简单的脚本,该脚本生成文件“\u existsdirname\u\u file\u.'/../pear/mail.php”,并将结果打印到日志文件中。当我独立运行脚本时,它工作正常并返回1。当flash程序运行它时,它什么也不返回。无论我是独立运行脚本还是flash文件运行脚本,打印出dirname__文件.'/../pear/Mail.php'都会返回相同的结果。我还在Mail.php PEAR文件上尝试了chmod 777,但没有任何效果


有什么想法吗?

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

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

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

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

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

2服务器上的CWDUP限制

根据特定的服务器配置,例外表通常无法访问其自身根目录之外的文件路径。i、 e.可执行文件不能调用..\其他目录\其他文件。有些服务器允许这样做,但许多服务器不允许

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

因此,与其使用一堆圆点。。试着从顶部向下工作

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

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

除了您的文件检查之外,也许可以尝试记录getcwdh的值,您如何调用php脚本?getcwd正在返回/var/www/vhosts/company/httpdocs。我现在没有原始的flash代码,所以我现在无法回答这个问题。据我所知,在这个程序迁移到另一台服务器之前,整个过程都是有效的。我记得我在.fla文件中检查了mail.php的路径是否正确,一切正常。不过我会尽快把代码发布出来。关于1,我认为flash程序在运行邮件例程之前不会验证任何东西。我们发现,实际的问题是,它在一个完全独立的url/文件夹中调用了另一个mail.php,我们很长时间没有弄清楚这一点。不过我会提出一些有用的建议。