在我的 automation.php
Controller 中,我有以下功能:
public function deploy_test() {
echo json_encode(system("python --version"));
}
当用户想要部署测试时,通过点击网页中的test
按钮,就可以完成这样的任务。
然而,当我点击 test
按钮时,我的输出是:
""
同时,当我使用命令执行相同的功能时:
public function deploy_test() {
echo json_encode(system("ls -l"));
}
我得到:
total 32
drwxr-xr-x. 15 philippe philippe 4096 Mar 4 16:48 application
drwxrwxr-x. 2 philippe philippe 4096 Mar 4 17:28 css
-rw-r--r--. 1 philippe philippe 6357 Jan 30 11:53 index.php
drwxrwxr-x. 2 philippe philippe 4096 Feb 27 15:38 js
-rw-r--r--. 1 philippe philippe 2496 Jan 30 11:53 license.txt
drwxr-xr-x. 8 philippe philippe 4096 Jan 30 11:53 system
drwxr-xr-x. 12 philippe philippe 4096 Jan 30 11:53 user_guide
有人可以帮我解决这个问题吗?
最佳答案
问题是不您的代码或 PHP。
问题出在您的权限上。
php 使用在 apache 的环境变量中设置的权限。
理想情况下设置为:
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
在您的 apache2/httpd conf 文件下。
例如:
尝试运行:
<?= `whoami` ?>
通过您的 shell 和浏览器。
您的浏览器可能会说 www-data 并且 shell 会说您的用户名,或者如果您在 AWS 上 - 默认情况下,您会得到 root
您不必使用 system()
,而是使用 exec()
。
我们应该接近:
echo json_encode(exec("python --version"));
执行操作需要您设置正确的用户和组。
查找:In the shell, what does " 2>&1 " mean?
所以你的代码应该是:
echo json_encode(exec("python --version 2>&1"));
希望对您有所帮助!
关于php - 在 Controller 内的命令行中执行 python - PHP/CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15214346/