PHP 執(zhí)行 shell 命令

這兩天用 PHP 做了一個(gè)后臺(tái),想調(diào)用 shell 命令來實(shí)現(xiàn)自動(dòng)代碼打包,遇到了 shell 命令執(zhí)行沒反應(yīng)的問題。

后來在命令行下用 php 來執(zhí)行,居然能正常工作,故而判斷是權(quán)限配置的問題。

一、查看當(dāng)前是哪個(gè)用戶在運(yùn)行 PHP

兩種辦法:

1、PHP 代碼

<pre>
<?php
echo shell_exec("id -a");
</pre>

2、shell 命令 lsof -:80

<pre>
[root@localhost dev_host]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 27556 root 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
nginx 27558 apache 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
</pre>

這倆的結(jié)果都能看出來當(dāng)前用戶是 apache

二、添加用戶 apache,并賦予 sudo 權(quán)限

vi /etc/sudoers,添加

<pre>root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD:ALL</pre>

并將如下這行注釋掉,表示不需要控制終端:

<pre># Defaults requiretty</pre>

增加行 Defaults visiblepw,否則會(huì)出現(xiàn) sudo: no tty present and no askpass program specified

最后使用 :w! 保存

三、執(zhí)行命令的時(shí)候,一定要在命令最前面加上 sudo

不然會(huì)遇到調(diào)用命令,返回錯(cuò)誤碼 127 的情況。正確的姿勢是:
<pre>sudo sh testshell</pre>

參考資料:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容