您的位置:澳门新葡萄京娱乐网站 > 编程知识 > php中哪些进行linux命令精解_php技艺_脚本之家澳门

php中哪些进行linux命令精解_php技艺_脚本之家澳门

2019-12-22 01:38

sh: line 0: source: test.sh: file not found---the end---

exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);

体现全数调节和测量试验音信

<pre>error_reporting(E_ALL);
ini_set('display_errors', 1);
</pre>

本文首要给大家介绍了有关在php中如何实施linux命令的有关内容,上边话非常少说了,来多头看看详细的牵线吧

在PHP中调用外界命令,能够用如下三种办法来贯彻:

翻看当前运营 PHP 的客商

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

前言

*/
$sucommand = "su --login root --command";
$useradd = "useradd ";
$rootpasswd = "verygood";
$user = "james";
$user_add = sprintf("%s "%s %s"",$sucommand,$useradd,$user);
$fp = @popen($user_add,"w");
@fputs($fp,$rootpasswd);
@pclose($fp);
?>

日子相关

<pre>
//unix时间戳
$time = time();
//转成时间格式
$date = date('Y-m-d H:i:s', $time);
</pre>

date() 函数私下认可是使用Green威治时间,消亡时区难题:

  • 在页头使用date_default_timezone_set(卡塔尔国设置自身的默许时区为时尚之都时间,如
    <pre>
    date_default_timezone_set('PRC');
    echo date('Y-m-d H:i:s');
    </pre>
  • 张开 php.ini 查找 date.timezone 去掉后面包车型地铁分店,= 前边加 Asia/Shanghai,重启 http 服务(未核准)

作者们在首先个例证里面试一下

php提供了system(卡塔尔(英语:State of Qatar),exec(卡塔尔国,passthru(卡塔尔那么些函数来调用外界的通令。

json_encode() 格式化

这么就能够显得闽南语和换行了

<pre>json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);</pre>

http://blog.csdn.net/fdipzone/article/details/28766357

在这个php脚本执行之前,目录里面是这样子的:执行之后,目录里面是如下图所示,多了一个testdir文件夹,这是通过我们刚刚在php脚本里面执行shell命令生成的shell命令执行失败会如何?假如说执行shell命令的时候出错了,后面的php代码还能运行吗?看下面这个例子,我要执行的命令是读取并运行test.sh这个文件里面的内容,但是这个文件实际是不存在的。sh: line 0: source: test.sh: file not found---the end---可以从打印结果看到,即使运行某个shell命令的时候会出错,不会影响下面的php代码的执行。所以,如果shell命令执行失败了,我们也没办法用php的try-catch是捕获不到shell命令的错误。就比如下面的代码,实际上catch不到shell命令的错误getMessage();}

例子:
header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");

扑灭 PHP exec(卡塔尔 实施耗时的 SHELL 命令时候,招致 ajax 锁死的难点

场景:通过 PHP 调用 linux shell 命令来实施前端文件打包,整个经过要求30~40 秒,初志是首发三个 ajax 央浼去运营 shell 命令,然后开一个 ajax 去轮询打包是还是不是甘休。

先前时代 PHP 是这么写的:
<pre>$shell = 'sudo sh /var/www/build/build_alpha/buildtool';
exec($shell, $output, $return_var);
</pre>

察觉运转 shell 命令的必要,会平昔等 30 多秒,shell 实行完之后才响应,笔者轮询就一直不用了。生龙活虎度考虑用 fastcgi_finish_request(卡塔尔国 来消灭,无果。最后的应用方案是,让 shell 命令在后台实施,给命令后拉长 > /dev/null & 就足以了

<pre>
$shell = 'sudo sh /var/www/build/build_alpha/buildtool > /dev/null &';
exec($shell, $output, $return_var);
</pre>

string exec ( string $command [, array &$output [, int &$return_var ]] )

再看一下system这是system的函数说明,$return_var是0的时候表示命令执行成功。system函数的返回是命令的输出的最后一行的内容string system ( string $command [, int &$return_var ] )

还有其他的,就暂时不介绍了总结以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

原型:string exec (string command [, string array [, int return_var]])
exec (卡塔尔(قطر‎函数与system(卡塔尔相同,也实行给定的下令,但不出口结果,而是再次回到结果的末段风流罗曼蒂克行。尽管它只回去命令结果的末尾意气风发行,但用第三个参数array 能够获得完全的结果,方法是把结果逐行追加到array的结尾处。所以一旦array不是空的,在调用在此以前最佳用unset(卡塔尔(قطر‎最它清掉。唯有钦命了第4个参数时,才得以用第多个参数,用来拿到命令推行的状态码。

看一下官方文书档案里面提过的shell_exec

system — Execute an external program and display the output
string system ( string $command [, int &$return_var ] )
exec — Execute an external program
string exec ( string $command [, array &$output [, int &$return_var ]] )
shell_exec — Execute command via shell and return the complete output as a string
string shell_exec ( string $cmd )
日常系统会有三种输出, 生龙活虎种是系统状态(return code卡塔尔(英语:State of Qatar), 一种是出口文字(output string卡塔尔, 那八个 Function 首要就是那几个回传的差别.

理所必然,官方手册里面除了有shell_exec,还会有此外的,比如说exec。

回去结果

怎么着使用shell_exec在php里面执行shell命令

2) 用popen(卡塔尔(قطر‎函数张开进程

上边就来讲说exec

地点的办法只好大约地实施命令,却不能与命令交互作用。但多少时候必须向命令输入一些东西,如在追加Linux的系统顾客时,要调用su来把当下顾客换到root才行,而su命令一定要在命令行上输入root的密码。这种情况下,用地点提到的措施肯定是那多少个的。
popen (卡塔尔国函数张开二个经过管道来施行给定的授命,再次来到一个文书句柄。既然重回的是三个文本句柄,那么就能够对它读和写了。在PHP3中,对这种句柄只可以做纯粹 的操作方式,要么写,要么读;从PHP4早先,能够同期读和写了。除非那些句柄是以意气风发种情势(读或写)展开的,否则必得调用pclose(卡塔尔函数来关闭它。

所以,我想,上面这个应该是命令没有任何输出,换一个有输出的命令,如下面代码;string "/bin/bash"所以,如果想要用php执行shell命令,并且知道到底执行成功还是失败,那么可以在这个shell命令的后面加上2>&1,把错误输出到标准输出。这样就可以判断是执行失败还是执行成功。示例如下:&1';$ret = shell_exec {print_r;} else {print_r;}print_r;

其一本子的出口就象:
hunte.gif
hunte.ppm
jpg.htm
jpg.jpg
passthru.php

exec方法的参数是那样的,$output是三个数组,$return_var是一个int型的值。$return_var是0的时候表示命令推行成功。

透过楷模试行壹回就比较便于精通. (请建设布局三个索引, 随意放三个档案, 再将此程式放置实施卡塔尔(قطر‎

获取shell_exec的输出

system(卡塔尔 输出并赶回最后大器晚成行shell结果。
exec(卡塔尔国不出口结果,再次回到最终朝气蓬勃行shell结果,全体结果能够保存到二个重临的数组里面。
passthru(卡塔尔国只调用命令,把命令的运营结果原样地直接出口到标准输出设备上。
雷同点:都能够获得命令试行的状态码

咱俩先从shell_exec来说

她们的区别 :

先来试一下,使用php实施有些shell命令,该命令是mkdir testdir。

原型:void passthru (string command [, int return_var])
passthru (卡塔尔只调用命令,不回来任何结果,但把命令的周转结果原样地一贯出口到正规输出设备上。所以passthru(卡塔尔国函数日常用来调用象pbmplus (Unix下的三个甩卖图片的工具,输出二进制的原有图片的流)那样的顺序。相通它也能够博得命令施行的状态码。

php如何实践某些命令 ,官方手册在这里边

echo "nnexec";
exec('ls', $output, $return_var);
echo "nreturn_var:";
print_r($return_var);
echo "noutput:";
print_r($output);

3) 用反撇号(`,也正是键盘上ESC键上面包车型客车充裕,和~在同二个方面)
本条点子以前不曾归入PHP的文书档案,是用作七个法门存在的。方法异常的粗略,用多个反撇号把要实施的命令括起来作为二个表达式,这一个表明式的值正是命令实行的结果。如:
$res='/bin/ls -l';
echo '
'.$res.'
';

例子2 :
/* PHP中哪些扩张一个种类顾客
下边是后生可畏段例程,扩展两个名称叫james的客户,
root密码是 verygood。仅供参照他事他说加以考查

system — Execute an external program and display the output
string system ( string $command [, int &$return_var ] )
exec — Execute an external program
string exec ( string $command [, array &$output [, int &$return_var ]] )
shell_exec — Execute command via shell and return the complete output as a string
string shell_exec ( string $cmd )
ystem()、exec()、shell_exec(卡塔尔国 官方文书表达如下:

 代码如下

 

 代码如下

exec()

passthru()

echo "nnshell_exec";
$output = shell_exec('ls');
echo "noutput:";
print_r($output);
?>

 代码如下

楷模程式

system()

        成功重临0, 
        退步(命令空中楼阁等原因)   重回   非0值

ystem()、exec()、shell_exec(卡塔尔(قطر‎ 官方文书?明如下:

1) 用PHP提供的非常函数
PHP提供共了3个特地的举办外界命令的函数:system(卡塔尔国,exec(卡塔尔(قطر‎,passthru(卡塔尔(英语:State of Qatar)。

*/

system()
$last_line = system('ls', $return_var);
system(卡塔尔(قطر‎ 会将出口内容平素印出, 所以若於网页, 会将有着回传内容都显示於页面上.
$last_line: 只可以获取最终风流罗曼蒂克行的剧情
$return_var: 获得系统状态回传码
exec()
exec('ls', $output, $return_var);
$output: 回传内容都会存於此变数中(积攒成阵列卡塔尔(英语:State of Qatar), 不会直接秀在页面上.
$return_var: 获得系统状态回传码
shell_exec()
$output = shell_exec('ls');
$output: 回传内容都会存於此变数中(储存成纯文字内容卡塔尔(英语:State of Qatar), 不会直接秀在页面上

例子:

例子1:
$fp=popen("/bin/ls -l", "r");

<?php
echo "nsystem";
$last_line = system('ls', $return_var);
echo "nreturn_var:";
print_r($return_var);
echo "nlast_line:";
print_r($last_line);

?>

原型:string system (string command [, int return_var])
system(卡塔尔函数很此外语言中的大概,它施行给定的一声令下,输出和重返结果。第贰个参数是可选的,用来拿到传令试行后的状态码。

例子: system("/usr/local/bin/webalizer/webalizer");

本文由澳门新葡萄京娱乐网站发布于编程知识,转载请注明出处:php中哪些进行linux命令精解_php技艺_脚本之家澳门

关键词: