当后缀-I';将其别名为时,PHP脚本不触发;我很聪明';结束

当后缀-I';将其别名为时,PHP脚本不触发;我很聪明';结束,php,linux,email,amazon-ec2,postfix-mta,Php,Linux,Email,Amazon Ec2,Postfix Mta,我试着在这篇文章中尽可能多地包含信息 我在AmazonEC2Ubuntu服务器上使用Postfix,我在地址上使用的一个PHP脚本似乎没有启动。邮件工作正常,但脚本没有启动。我可能错过了一些简单的东西,如果有其他想法,我将不胜感激 下面的代码是脚本的代码。目前,将php://stdin。我不确定这是否是编写此脚本的最佳方法,但目前看来还可以,因为这只是用于解决此问题的临时方法 #!/usr/bin/php -q <?php $data = ''; $fileName = "parsedDa

我试着在这篇文章中尽可能多地包含信息

我在AmazonEC2Ubuntu服务器上使用Postfix,我在地址上使用的一个PHP脚本似乎没有启动。邮件工作正常,但脚本没有启动。我可能错过了一些简单的东西,如果有其他想法,我将不胜感激

下面的代码是脚本的代码。目前,将
php://stdin
。我不确定这是否是编写此脚本的最佳方法,但目前看来还可以,因为这只是用于解决此问题的临时方法

#!/usr/bin/php -q
<?php
$data = '';
$fileName = "parsedData.txt";
$stdin = fopen('php://stdin', 'r');
$fh = fopen($fileName, 'w');
while(!feof($stdin))
{
     $data .= fgets($stdin, 8192);
}
fwrite($fh, $data);
fclose($stdin);
fclose($fh);
?>
每次更改此项时,我都会运行新别名。这似乎是最正确的语法,因为它完全指定了php的位置<代码>test@mydomain未设置别名时,可接收来自内部和外部的电子邮件。根据syslog,这将成功地传递到命令而不是maildir

postfix/local[2117]: 022AB407CC: to=<test@mydomain.com>, relay=local, delay=0.5, delays=0.43/0.02/0/0.05, dsn=2.0.0, status=sent **(delivered to command: /usr/bin/php -q /var/test/php/test2.php)**
我的postfix main.cf文件的相关部分如下所示-

myhostname = domainnamehere.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = domainnamehere.com, internalawsiphere, localhostinternalaws, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command =
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
我有
错误日志(“脚本已启动!”)
test2.php
的开头,这样,如果成功调用脚本,它就会出现在php日志文件中。我确保进入php.ini打开错误日志并指定保存位置,但我无法让它工作。这将有助于使其正常工作,因为我可以在脚本转到
时判断脚本是否失败php://stdin
功能正常,因为它在处理电子邮件而不是cat'ed.txt文件时可能会出现一些问题

我的最终目标是获得一项服务,将特定地址的电子邮件及其附件保存到MySQL数据库,然后将每个文件/电子邮件的唯一代码返回给用户。有没有比使用php脚本更简单的方法来做类似的事情?像squirrelmail或dbmail这样的东西可以做到这一点吗

我对这件事已经想得精疲力尽了。也许我应该试试别的电子邮件服务


哦,聪明的斯塔克福林人,帮帮我吧

首先,chmod 777几乎总是一个巨大的错误。我知道你处于绝望的状态——正如你运行这个命令的事实所表明的那样。您希望为系统的每个部分配置,以正确完成其工作。这有助于防止安全漏洞并减少风险。但可执行文件不应该由除可执行文件所有者之外的任何人编写——即使如此,我强烈建议不要这样做

现在,谈谈你的问题:

#!/usr/bin/php -q
<?php
$data = '';
$fileName = "parsedData.txt";
您没有确保该文件已实际打开。检查这些返回值。他们会很快为您报告失败,帮助您发现代码中的错误或本地错误配置。我对PHP的了解还不够透彻,无法告诉您类似于
perror(3)
函数的内容,该函数将直接告诉您失败的原因,但要从解释器中获取人类可读的错误代码肯定不会太难。不要忽略错误代码--了解
权限被拒绝
文件或目录未找到
之间的区别可以在部署代码后节省数小时

而且,作为一种工具,它可以防止应用程序在特定位置写入。Ubuntu上的“默认”MAC工具是,但是,或者都是很好的选择。运行
dmesg
并查看
/var/log/audit/audit.log
以查看是否存在任何策略冲突。如果有,修复问题的步骤会根据您使用的MAC系统的不同而有所不同。既然你在Ubuntu上,AppArmor很有可能;运行
aa status
以快速了解系统上限制的服务,并且
aa logprof
应提示您根据需要修改策略。(也不要盲目地说“允许”——可能主动利用漏洞的尝试已被拒绝。)


(如果你已经不使用MAC系统了,请考虑这样做。我已经在Apvor项目上工作了十二年,不会考虑不限制通过网络进行通信的所有应用程序,但这是我自己的安全需求。更多偏执的人可能希望限制更多的系统,更少偏执的人可能希望混杂。减少了他们的系统。)

sudo chmod 777
是一个巨大的错误。您不希望每个人都可以写入可执行文件。SELinux正在运行吗?如果是这样,请关闭它以测试
setEnforce0
(尽管如果它妨碍了您,您可能会得到一个权限错误)此外,如果脚本中有shebang,则需要将其别名为
“|/var/test/php/test2.php”
别名中没有
php-q
。我读到这篇文章是因为有一个提示,php位置的规范是不必要的,但我添加它只是为了确定。不过谢谢!sarnold设法解决了我想要写入的文件的相对路径名的问题。是时候查看权限并获得摆脱chmod 777。是的!问题是我指定了parsedData.txt位置的相对路径。谢谢,sarnold!现在我将查看权限并设置更合适的内容。
test: |"php -q /var/test/php/test2.php"
test: "|php -q /var/test/php/test2.php"
test: |"/usr/bin/php -q /var/test/php/test2.php"
test: "| php -q /var/test/php/test2.php"
test: "|/var/test/php/test2.php"
test: |"/var/test/php/test2.php"
myhostname = domainnamehere.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = domainnamehere.com, internalawsiphere, localhostinternalaws, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command =
home_mailbox = Maildir/
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = all
#!/usr/bin/php -q
<?php
$data = '';
$fileName = "parsedData.txt";
$fh = fopen($fileName, 'w');
while(!feof($stdin))
{
     $data .= fgets($stdin, 8192);
}
fwrite($fh, $data);