我想做的是:
- 从浏览器执行"shellUnlock.php"
- 然后从"shellUnlock.php"执行"scriptUNLOCK.sh"
- 然后从scriptUNLOCK.sh创建"resultUNLOCK.log"
- 然后在浏览器中显示"resultUNLOCK.log"
指出:
- 对于SSH,我使用了keygen,所以我不必再从我的服务器插入任何密码。
- 我使用SCP复制在"data . server"中创建的"resultUNLOCK.log"。到我自己的文件夹
- 我已经从浏览器中尝试过了,但是它根本没有显示任何输出。
- 脚本工作良好,当我从putty执行,但从shell_exec它不工作。
- 我没有权限在服务器上安装任何东西。
我的"shellUnlock.php"文件
$myfile = fopen("nameUSER.txt", "w") or die("Unable to open file!");
$txt = "USERNAME";
fwrite($myfile, $txt);
fclose($myfile);
shell_exec('./scriptUNLOCK.sh');
if (file_exists("resultUNLOCK.log"))
echo readfile("resultUNLOCK.log");
}else{
echo "Please Try";
}
my "scriptUNLOCK.sh" script
#!/bin/bash
HOST='user@da.serv.er'
HOME='/home/web/UNLOCK'
DIR='/somewhere/script/UNLOCK/'
cd ${HOME}
while read nameUSER
do
ssh ${HOST} <<END_SCRIPT
cd ${DIR}
unlock.sh ${nameUSER} > resultUNLOCK.log
exit
END_SCRIPT
cd ${HOME}
scp ${HOST}:${DIR}resultUNLOCK.log ${HOME}
done < nameUSER.txt
现在请帮助我。我完全糊涂了。谢谢。
如果脚本在命令行运行时工作正常,但当您通过web服务器触发它时却没有,则必须是权限或/和路径问题。
确保apache用户(无论是www-data, www或apache默认)有写访问解锁文件夹,我认为它会工作。您可能应该更改"HOME"变量的名称,因为HOME是Linux中的固定环境变量。我不知道这是不是一个问题,但我还是会改名,以避免混乱。
最好的方法是通过groups
sudo usermod -a -G www-data <apache_user>
sudo chgrp -R www-data /somewhere/script/UNLOCK/
sudo chmod -R g+w /somewhere/script/UNLOCK/
因此,至少通过putty登录的用户必须具有修改目录可访问性的权限。如果没有,您可以联系您的系统管理员或使用您有权访问的其他文件夹。
我希望这对你有帮助。亲切的问候
问题解决了!
我直接使用crontab执行脚本,而不是在php中使用shell_exec。如果时间有限,我肯定能找到其他最好的办法来解决这个案子。但时间迫使我。: D好吧,至少它工作!
谢谢所有. . !