php四个函数shell_exec, exec, passthru, system分别的使用场景
这篇文章主要介绍了关于php四个函数shell_exec, exec, passthru, system分别的使用场景,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
可以执行操作系统的相关命令,感觉一个应用场景就是另起一个进程在后台来执行一些费时但无需前台展示结果的内容,有点类似计划任务,在简单的场景也可以代替队列。例如有文件abc.php,里面包含发送邮件相关,比较费时。而其它文件中处理完正常逻辑后想发送邮件,但又不想管邮件有没有成功,只要执行就是,那就可以:
//正常逻辑 ... //处理费时的 exec('php abc.php > /dev/null &'); // 或者 exec('php abc.php | at now'); //继续走你 ...
类似这种吧,以上仅仅是linux,且可能有权限问题或路径问题,至于windows可能还需要其它函数处理。
PHP中exec,system等函数调用系统命令详解
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。
在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。比如前二天笔者在批量处理.rar文件时exec就帮我了大忙了。
今天整理一下常用的调用系统函数发出来和大家分享经验。
注意:要想使用这二个函数php.ini中的安全模式必须关闭,要不然为了安全起见php是不让调用系统命令的。
先看一下php手册对这二个函数的解释:
exec --- 执行外部程式
语法 : string exec ( string command [, array &output [, int &return_var]] )
exec函数解析
exec语法: string exec(string command, string [array], int [return_var]);
exec返回值: 字符串
Exec参数说明
Command – 需要执行的命令
Array – 是输出值
return_var –是返回值0或1,如果返回0则执行成功,返回1则执行失败。
exec不成功,调试方案
一个技巧就是使用管道命令, 使用 2>&1, 命令就会输出shell执行时的错误到$output变量, 输出该变量即可分析。
如:
exec('convert a.jpg b.jpg', $output, $return_val);
改为:
exec('convert a.jpg b.jpg 2>&1', $output, $return_val);
print_r($output);
说明 :
exec( )执行给予的命令command,不过它并不会输出任何东西,它简单的从命令的结果中传回最后一行,如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。
如果有给予参数array,则指定的数组将会被命令所输出的每一行填满,注意 : 如果数组先前已经包含了一些元素的话,exec( )将会把它附加在数组的后面,如果你不想要此函数附加元素的话,你可以在传递此数组给exec( )之前呼叫unset( )。
如果有给予参数array和return_var,则传回执行的状态命令将会写到这个变量。
注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。
注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。
system --- 执行外部程式并且显示输出
语法 : string system ( string command [, int &return_var] )
说明 :
system( )执行给予的命令command,并且输出结果。如果有给予参数return_var,则执行命令的状态码将会写到这个变量。
注意 : 如果你允许来自使用者输入的资料,可以传递到此函数,那么你应该使用escapeshellcmd( )来确定此使用者无法哄骗(trick)系统来执行武断的(arbitrary)命令。
注意 : 如果你使用此函数来启动一个程式,而且希望在背景里(background)执行的时候离开它,你必须确定此程式的输出是转向(redirected)到一个文件或是一些输出的资料流,否则PHP将会悬挂(hang)直到程式执行结束。
如果PHP是运作成伺服器模组,在输出每一行后,system( )会试着自动地清除web伺服器的输出缓冲。
成功则传回命令的最后一行,失败则传回false。
如果你需要去执行一个命令,并且从命令去取得所有资料时,可以使用passthru( )这个函数。
这二个都是用来调用系统shell命令,
不同点:
exec可以把执行的结果全部返回到$output函数里(数组),$status是执行的状态 0为成功 1为失败
systerm不需要提供$output函数,他是直接把结果返回出来,同样$return_var是执行的状态码 0为成功 1为失败
exec示例:
<?php $a = exec("dir",$out,$status); print_r($a); print_r($out); print_r($status); ?>
<code class="hljs bash" style="padding:10px;background-color:rgb(63,63,63);color:rgb(220,220,220);font-size:13px;line-height:1.4;font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;"><?php <span class="hljs-variable" style="color:rgb(239,220,188);">$a</span> = <span class="hljs-built_in" style="color:rgb(204,147,147);">exec</span>(<span class="hljs-string" style="color:rgb(204,147,147);">"dir"</span>,<span class="hljs-variable" style="color:rgb(239,220,188);">$out</span>,<span class="hljs-variable" style="color:rgb(239,220,188);">$status</span>); <span class="hljs-built_in" style="color:rgb(204,147,147);">print</span>_r(<span class="hljs-variable" style="color:rgb(239,220,188);">$a</span>); <span class="hljs-built_in" style="color:rgb(204,147,147);">echo</span> <span class="hljs-string" style="color:rgb(204,147,147);">"<br>-----------------------------------------------------<br>"</span>; <span class="hljs-built_in" style="color:rgb(204,147,147);">echo</span> <span class="hljs-string" style="color:rgb(204,147,147);">"<pre class="brush:php;toolbar:false">"</span>; //<span class="hljs-built_in" style="color:rgb(204,147,147);">print</span>_r(<span class="hljs-variable" style="color:rgb(239,220,188);">$out</span>); var_dump(<span class="hljs-variable" style="color:rgb(239,220,188);">$out</span>); <span class="hljs-built_in" style="color:rgb(204,147,147);">echo</span> <span class="hljs-string" style="color:rgb(204,147,147);">""; echo "
-----------------------------------------------------
"; print_r($status); ?>
system示例:
<?php $a = system("dir",$out); print_r($a); print_r($out); ?>
<code class="hljs xml" style="padding:10px;background-color:rgb(63,63,63);color:rgb(220,220,220); font-size:13px; line-height:1.4; font-family:Menlo, Monaco, Consolas, 'Courier New', monospace;"><span class="php"><span class="hljs-meta" style="color:rgb(127,159,127);"><span class="php"><span class="hljs-meta"><?php</span></span></span><span class="php"> $a = system(</span><span class="hljs-string" style="color:rgb(204,147,147);"><span class="php"><span class="hljs-string" style="color:rgb(204,147,147);">"dir"</span></span></span><span class="php">,$out); </span><span class="hljs-keyword" style="color:rgb(227,206,171);"><span class="php"><span class="hljs-keyword" style="color:rgb(227,206,171);">echo</span></span></span><span class="php"> </span><span class="hljs-string" style="color:rgb(204,147,147);"><span class="php"><span class="hljs-string" style="color:rgb(204,147,147);">"<pre class="brush:php;toolbar:false">"</span></span></span><span class="php">; </span><span class="hljs-comment" style="color:rgb(127,159,127);"><span class="php"><span class="hljs-comment" style="color:rgb(127,159,127);">//print_r($a); </span></span></span><span class="php"> var_dump($a); </span><span class="hljs-keyword" style="color:rgb(227,206,171);"><span class="php"><span class="hljs-keyword" style="color:rgb(227,206,171);">echo</span></span></span><span class="php"> </span><span class="hljs-string" style="color:rgb(204,147,147);"><span class="php"><span class="hljs-string" style="color:rgb(204,147,147);">""; echo "
-----------------------------------------------------
"; print_r($out);
大家可以运行一下看效果
PHP执行系统外部命令:exec()、passthru()、system()、shell_exec()
在php开发网站中,经常需要执行系统外部命令。php提供4种方法执行系统外部命令:exec()、passthru()、system()、 shell_exec()。下面一一介绍。在开始前,先检查下php配置文件php.ini中是有禁止这是个函数。找到 disable_functions,配置如下:
disable_functions =
如果“disable_functions=”后面有接上面四个函数,将其删除。默认php.ini配置文件中是不禁止你调用执行外部命令的函数的。
方法一:exec()
function exec(string $command,array[optional] $output,int[optional] $return_value)
php代码:
<?php echo exec("ls",$file); echo "</br>"; print_r($file); ?>
执行结果:
test.php Array( [0] => index.php [1] => test.php)
知识点:
exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行,如果你想得到结果你可以使用第二个参数,让其输出到指定的数组,此数组一个记录代表输出的一 行,即如果输出结果有20行,则这个数组就有20条记录,所以如果你需要反复输出调用不同系统外部命令的结果,你最好在输出每一条系统外部命令结果时清空 这个数组,以防混乱。第三个参数用来取得命令执行的状态码,通常执行成功都是返回0。
方法二:passthru()
function passthru(string $command,int[optional] $return_value)
代码:
<?php passthru("ls"); ?>
执行结果:
index.phptest.php
知识点:
passthru与system的区别,passthru直接将结果输出到浏览器,不需要使用 echo 或 return 来查看结果,不返回任何值,且其可以输出二进制,比如图像数据。
方法三:system()
function system(string $command,int[optional] $return_value)
代码:
<?php system("ls /"); ?>
执行结果:
binbootcgroupdevetchomeliblost+foundmediamntoptprocrootsbinselinuxsrvsystmpusrvar
知识点:
system和exec的区别在于system在执行系统外部命令时,直接将结果输出到游览器,不需要使用 echo 或 return 来查看结果,如果执行命令成功则返回true,否则返回false。第二个参数与exec第三个参数含义一样。
方法四:反撇号`和shell_exec()
shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体
代码:
<?php echo `pwd`; ?>
执行结果:
/var/www/html
相关推荐:
Atas ialah kandungan terperinci php四个函数shell_exec, exec, passthru, system分别的使用场景. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Jika anda seorang pembangun PHP yang berpengalaman, anda mungkin merasakan bahawa anda telah berada di sana dan telah melakukannya. Anda telah membangunkan sejumlah besar aplikasi, menyahpenyahpepijat berjuta-juta baris kod dan mengubah suai sekumpulan skrip untuk mencapai op

Tutorial ini menunjukkan cara memproses dokumen XML dengan cekap menggunakan PHP. XML (bahasa markup extensible) adalah bahasa markup berasaskan teks yang serba boleh yang direka untuk pembacaan manusia dan parsing mesin. Ia biasanya digunakan untuk penyimpanan data

JWT adalah standard terbuka berdasarkan JSON, yang digunakan untuk menghantar maklumat secara selamat antara pihak, terutamanya untuk pengesahan identiti dan pertukaran maklumat. 1. JWT terdiri daripada tiga bahagian: header, muatan dan tandatangan. 2. Prinsip kerja JWT termasuk tiga langkah: menjana JWT, mengesahkan JWT dan muatan parsing. 3. Apabila menggunakan JWT untuk pengesahan di PHP, JWT boleh dijana dan disahkan, dan peranan pengguna dan maklumat kebenaran boleh dimasukkan dalam penggunaan lanjutan. 4. Kesilapan umum termasuk kegagalan pengesahan tandatangan, tamat tempoh, dan muatan besar. Kemahiran penyahpepijatan termasuk menggunakan alat debugging dan pembalakan. 5. Pengoptimuman prestasi dan amalan terbaik termasuk menggunakan algoritma tandatangan yang sesuai, menetapkan tempoh kesahihan dengan munasabah,

Rentetan adalah urutan aksara, termasuk huruf, nombor, dan simbol. Tutorial ini akan mempelajari cara mengira bilangan vokal dalam rentetan yang diberikan dalam PHP menggunakan kaedah yang berbeza. Vokal dalam bahasa Inggeris adalah a, e, i, o, u, dan mereka boleh menjadi huruf besar atau huruf kecil. Apa itu vokal? Vokal adalah watak abjad yang mewakili sebutan tertentu. Terdapat lima vokal dalam bahasa Inggeris, termasuk huruf besar dan huruf kecil: a, e, i, o, u Contoh 1 Input: String = "TutorialSpoint" Output: 6 menjelaskan Vokal dalam rentetan "TutorialSpoint" adalah u, o, i, a, o, i. Terdapat 6 yuan sebanyak 6

Mengikat statik (statik: :) Melaksanakan pengikatan statik lewat (LSB) dalam PHP, yang membolehkan kelas panggilan dirujuk dalam konteks statik dan bukannya menentukan kelas. 1) Proses parsing dilakukan pada masa runtime, 2) Cari kelas panggilan dalam hubungan warisan, 3) ia boleh membawa overhead prestasi.

Apakah kaedah sihir PHP? Kaedah sihir PHP termasuk: 1. \ _ \ _ Membina, digunakan untuk memulakan objek; 2. \ _ \ _ Destruct, digunakan untuk membersihkan sumber; 3. \ _ \ _ Call, mengendalikan panggilan kaedah yang tidak wujud; 4. \ _ \ _ Mendapatkan, melaksanakan akses atribut dinamik; 5. \ _ \ _ Set, melaksanakan tetapan atribut dinamik. Kaedah ini secara automatik dipanggil dalam situasi tertentu, meningkatkan fleksibiliti dan kecekapan kod.
