在网页中执行时,文件写入在PHP/MAFFT中不起作用
我正在从事一个基于web的项目,该项目在名为MAFFT的服务器上执行一个程序。MAFFT将输入文件和写入输出的文件作为参数在网页中执行时,文件写入在PHP/MAFFT中不起作用,php,bash,shell,bioinformatics,Php,Bash,Shell,Bioinformatics,我正在从事一个基于web的项目,该项目在名为MAFFT的服务器上执行一个程序。MAFFT将输入文件和写入输出的文件作为参数 mafft in > out 我有一个php页面,它调用: <?php shell_exec("mafft in > out); ?> 然后: 它的工作原理与预期完全相同,但当我在web浏览器中导航到该页面时,它会创建输出文件,但不会写入该文件(即使我将输出文件perm更改为777) 输入/输出文件可能非常
mafft in > out
我有一个php页面,它调用:
<?php
shell_exec("mafft in > out);
?>
然后:
它的工作原理与预期完全相同,但当我在web浏览器中导航到该页面时,它会创建输出文件,但不会写入该文件(即使我将输出文件perm更改为777)
输入/输出文件可能非常大,因为这是序列对齐的东西,但我正在使用少于200个字符的文件进行测试
这里有没有我遗漏的东西,或者仅仅是在网页上做不到
谢谢,
Ryan问题是程序(MAFFT)在运行时输出其进度,但通过网页执行该程序并没有授予执行该程序所需的权限,因此该程序未完成即退出。将程序输出发送到shell脚本中的/dev/null似乎解决了这个问题。您应该将完整路径发布到
sh
:即shell_exec(“/bin/sh./scr.sh”)代码>。这些问题大多是由于权限问题或环境变量PATH
设置不正确造成的。@FlorinStingaciu我添加了您的建议,它仍然会创建输出文件,但不会写入该文件。请尝试使用2>&1>
将stderr管道传输到输出中。也许你会得到一个错误的提示。另外,查看通常位于/var/logs/httpd/
下的httpd
错误日志可能会有所帮助。当查看httpd错误日志时,我发现/usr/bin/mafft:1961:/usr/bin/mafft:cannot create/dev/stderr:Permission denied
#!/bin/bash
mafft in > out
<?php
shell_exec("sh ./scr.sh");
?>
php something.php