我正试图从php执行Linux shell命令,但网页上没有输出。如果我试图从linux cosole执行php页面,它的工作原理很好。
PHP代码:
<?php
$result = shell_exec('asterisk -rx "core show channels concise"');
$ccount =shell_exec('asterisk -rx "core show channels count"');
echo $result;
echo $ccount;
?>
上面的代码并没有在网页上给出任何输出。但在linux控制台上,它令人惊叹。例如
[abc@hostsysadminman]#php-myfile.php
星号控制套接字权限也可以在/etc/星号.conf:中轻松更改
[files]
astctlpermissions = 0660
astctlowner = root
astctlgroup = apache
astctl = asterisk.ctl
首先,您的问题是不完整的,因为您没有显示预期的输出。但除此之外,你还犯了一些常见的错误。首先,您将以root身份测试脚本(# php ...
),但httpd并没有以root身份为脚本提供服务。所以你的测试毫无用处。您应该切换到正确的用户(最有可能是www-data
,然后检查以从shell运行脚本。最有可能的原因是两个常见的原因之一-运行asterisk
程序的权限不足或$PATH
不完整,没有指向asterisk
所在的位置。
我同意Marcin。
我建议您编写脚本来执行这些命令,并将结果放入一些存储(如文本或数据库)。使用cron在root中运行它。然后你从网页上的存储器中读取数据。
如果您想要实时响应,您必须一直运行cron,尽管它消耗服务器资源。这是你们必须考虑的权衡。这取决于你想从网站上获得什么。
使用sudo以root或Asterisk用户身份运行thoes命令。您可以将sudo配置为只允许在没有密码的情况下执行特定命令。
检查php.ini
中的disable_functions
。web服务器的Mb-shell_exec刚刚关闭