详解PHP中如何执行系统命令
常见方法
使用反引号执行
<?php
$result = `ipconfig`;
$result = iconv('GBK', 'utf-8', $result);
echo $result;
?>使用 exec
<?php
$result = exec("ipconfig");
echo $result;
?>使用 system
<?php
$result = system("ipconfig");
echo $result;
?>Windows
读取外部普通文件时
<?php
echo (file_get_contents('D:/a.csv'));
?>注意:直接读取即可。
执行系统命令
<?php echo `net start ToDesk_Service`; ?>
注意:需要管理员权限或者管理员授权才可以执行。
Linux
Apache
读取外部普通文件时
读取防火墙文件,文件有 r 权限,每级目录都有 rx 权限即可。
<?php
echo (file_get_contents('/etc/firewalld/zones/public.xml'));
?>执行系统命令时
执行关闭防火墙命令(写一段 PHP 代码,并通过浏览器访问此页面)。
<?php echo `sudo systemctl stop firewalld`; // 关闭失败 ?>
找到关于此命令的位置。
whereis systemctl # 发现位置在 /usr/bin/systemctl
查看目录权限,发现每级目录都有 rx 权限,但依然无法执行。
ll /usr/bin/ | grep systemctl ll /usr/ | grep bin ll / | grep usr
解决
使用 root 管理员用户
查看 apache 默认用户(写一段 PHP 代码,并通过浏览器访问此页面)。
<?php echo 'whoami'; // 显示默认用户为 daemon ?>
尝试改成 root 用户
cd /opt/lampp/etc # 切换到 /opt/lampp/etc/ 目录
vi httpd.conf # 编辑 httpd.conf 文件
/User # 找到 User
User root # 改成 root 用户
Group root # 改成 root 组重启 lampp
/opt/lampp/lampp restart # 发现启动失败
xampp 集成环境为了安全性考虑不能改成 root 用户访问。
将命令的执行权限赋予给 xampp(Apache)对应的用户。最后执行关闭防火墙命令,即可成功。
vi /etc/sudoers 或 visudo # 编辑 /etc/sudoers 按 G # 将光标移动到最后一行 按 i ,添加 daemon ALL=(ALL) NOPASSWD:ALL 或 daemon ALL=(ALL) NOPASSWD:/usr/bin/systemctl,/usr/bin/firewall-cmd # 添加授权指令 # 含义:给哪个用户授权 允许哪个主机访问=模拟哪个账号执行命令 不要求输入密码:允许执行的命令路径 图片
以上就是PHP中如何执行系统命令的详细内容,更多关于PHP执行系统命令的资料请关注脚本之家其它相关文章!
相关文章
PHP中__LINE__,__FILE__,__DIR__等常用魔术常量实例讲解
PHP 向它运行的任何脚本提供了大量的预定义常量。魔术常量准确来说并不能算是常量,常量我们在之前的文章中我们介绍到,常量被定义之后是不能被改变的。但是魔术常量是PHP预定义的一些常量,这些预定义的常量能够因为所在位置的变化而变化。2022-12-12
php中使用array_filter()函数过滤空数组的实现代码
这篇文章主要介绍了php中使用array_filter()函数过滤空数组的实现代码,这是浏览PHP手册时无意发意的一个有意思的array_filter()函数用法,需要的朋友可以参考下2014-08-08
php array_values 返回数组的所有值详解及实例
这篇文章主要介绍了php array_values 返回数组的所有值详解及实例的相关资料,需要的朋友可以参考下2016-11-11
Zend Framework入门教程之Zend_Db数据库操作详解
这篇文章主要介绍了Zend Framework入门教程之Zend_Db数据库操作,结合实例形式详细分析了Zend_Db_Adapter的功能及数据库操作的相关技巧,需要的朋友可以参考下2016-12-12


最新评论