繁体   English   中英

使用php exec()执行Linux命令并运行Shell脚本

[英]Executing a linux command with php exec() and running a shell script

我试图在服务器上运行这段php代码:

<?php
$cmd = 'echo "this is a test" > /home/ubuntu/scripts/test_file';
echo exec($cmd);
?>

据我了解,它应该将一段文本添加到文件test_file 该文件存在于适当的位置,我已经尝试了php文件上的chmod 755和chmod 777。 但是我看不到要添加到text_file的文本。 我尝试直接在服务器上运行linux命令,它可以工作。 有人可以告诉我我在做什么错吗?

另外,我试图通过php脚本在服务器上创建虚拟主机文件。 我认为最好运行一个shell脚本,而不是通过php exec()运行命令,该shell脚本从文本文件中读取所需的参数并在虚拟主机文件中设置目录路径。 我是linux新手,这是个好方法还是有更好的方法呢? 所有这些都是通过编程来设置基于magento的站点。 谢谢。

您的代码正常。 问题可能出在您的php处于安全模式 (尽管已弃用,请参见链接)或文件/目录权限。

无需授予文件权限0777,因为它使文件可执行,因此0666就足够了。 但是,仅文件具有正确的权限是不够的,路径上的每个目录都必须是可遍历的。 尝试使用运行php代码特权的用户可以访问的其他目录, /tmp是一个好的开始。

调试此类问题的一般方法是执行一条不同的命令,该命令为您提供有关执行echo的上下文的更多信息,例如

<?php
echo exec("id");
echo "<br/>";
echo exec("ls -l /home/ubuntu/scripts/test_file");
?>

(记住exec()仅返回命令输出的最后一行,尽管它们仅显示一行)。 这些命令将告诉您运行代码的用户,以及他们是否完全可以看到该文件。

正如评论已经说过的那样:这实际上是完成您要尝试的操作的不好方法,因为基于通过Web的用户输入编写Apache配置可能会使您面临多个问题。

您可能考虑的是让PHP端将所需的信息写入文件或数据库,然后不时地通过cron脚本或类似程序通过实际配置更改的其他过程对其进行轮询。 这消除了从PHP中执行exec()的需要(这总是很糟糕的)。 这样,您运行PHP的进程就无需具有对重要系统文件的写许可权。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM