php执行shell脚本
<p></p><div>本次想要配置webhook钩子,</div>
<div> </div>
<div>做钩子大多是走 ssh 协议, coding 里配置部署公钥</div>
<div> </div>
<div>之前用 docker 写钩子, 也是 ssh 权限的问题</div>
<div> </div>
<div>包工具:</div>
<h3>1.composer require cpliakas/git-wrapper</h3>
<h3>2.composer : deploy</h3>
<div> </div>
<h2>查看当前是哪个用户在运行 PHP</h2>
<div>两种办法:</div>
<h3>1、PHP 代码</h3>
<p> </p>
<ul>
<li>(1)</li>
<li>
<ul>
<li><pre></li>
<li><?php</li>
<li>echo shell_exec("id -a");</li>
<li>
<div></pre></div>
</li>
</ul>
</li>
<li>
<div>(2)</div>
</li>
<li>
<ul>
<li>
<div>echo shell_exec("whoami");</div>
</li>
</ul>
</li>
</ul>
<h3><span>2、shell 命令 :</span></h3>
<ul>
<li>
<h3><span>lsof -:80</span></h3>
</li>
<li>ps -ef | grep php</li>
</ul>
<div> </div>
<div>php调用shell脚本</div>
<div> </div>
<div>1)exec()</div>
<div>原型: string exec ( string $command [, array &$output [, int &$return_var ] )</div>
<div>说明: exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用第二个参数,让其输出到指定的数组。此数组一个记录代表输出的一行。即如果输出结果有20行,则这个数组就有20条记录,所以如果需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output),以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。</div>
<div><?php</div>
<div> exec("dir",$output);</div>
<div> print_r($output);</div>
<div>?></div>
<div> </div>
<div>2)system()</div>
<div>原型: string system ( string $command [, int &$return_var ] )</div>
<div>说明: system和exec的区别在于,system在执行系统外部命令时,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。</div>
<div><?php</div>
<div>system("pwd",$result);</div>
<div>print $result;//输出命令的结果状态码</div>
<div>?></div>
<div>关于第二个参数结果状态码的简单介绍:</div>
<div>如果返回0是运行成功,</div>
<div>在Bash中,当错误发生在致命信号时,bash会返回128+signal number做为返回值。</div>
<div>如果找不到命令,将会返回127。</div>
<div>如果命令找到了,但该命令是不可执行的,将返回126。</div>
<div>除此以外,Bash本身会返回最後一个指令的返回值。</div>
<div>若是执行中发生错误,将会返回一个非零的值。</div>
<div>Fatal Signal : 128 + signo</div>
<div>Can't not find command : 127</div>
<div>Can't not execute : 126</div>
<div>Shell script successfully executed : return the last command exit status</div>
<div>Fatal during execution : return non-zero </div>
<div> </div>
<div> </div>
<div> </div>
<div>3)passthru()</div>
<div>原型: void passthru ( string $command [, int &$return_var ] )</div>
<div>说明: passthru与system的区别,passthru直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。第二个参数可选,是状态码。</div>
<div><?php</div>
<div>header("Content-type:image/gif");</div>
<div>passthru("/usr/bin/ppm2tiff /usr/share/tk8.4/demos/images/teapot.ppm");</div>
<div>?></div>
<div> </div>
<div>4)shell_exec()</div>
<div>原型: string shell_exec ( string $cmd )</div>
<div>说明: 直接执行命令$cmd</div>
<div><?php</div>
<div>$output = shell_exec('ls -lart');</div>
<div>echo "<pre>$output</pre>";</div>
<div>?></div>
<div> </div>
<div>常见问题:在linux上可以执行php中的shell脚本,但在web端不能够访问:</div>
<div> </div>
<div>解决方法:</div>
<div> </div>
<div>一般属于权限问题,可</div>
<div> </div>
<div>一.vi /etc/sudoers</div>
<div> </div>
<div> 加入:xxx ALL=(ALL) NOPASSWORD:ALL</div>
<div> </div>
<div>二.关闭selinux , 命令:setforence 0 </div><br><br>
来源:https://www.cnblogs.com/yokooo/p/12375118.html
頁:
[1]