php 调用外部命令

在PHP中调用外部命令,可以用如下三种方法来实现:
1. 用PHP提供的专门执行外部命令的函数(四个)

  • exec(),
  • system(),
  • passthru(),
  • shell_exec()

1)exec()执行系统外部命令时不会输出结果,而是返回结果的最后一行

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

想得到结果,可以让结果输出到第二个参数,即$output数组。此数组一个记录代表输出的一行,e.g. 如果输出结果有20行,则这个数组就有20条记录;若需要反复输出调用不同系统外部命令的结果,最好在输出每一条系统外部命令结果时清空这个数组unset($output)

第三个参数$return_var命令执行的状态码,执行成功返回0.

<?php
if(copy($_FILES['uploadedfile']['tmp_name'], $photo_upload_path)) {
print "";
print "";
$result = "";
exec("python process.py $photo_upload_path", $result);
print implode("\n", $result);
print "";

}
?>
2)system()直接将结果输出到游览器(与exec不同),如果执行命令成功则返回true,否则返回false

原型: string system ( string $command [, int &$return_var ] )

 $sCmd ="export TESSDATA_PREFIX=/home/user/tesseract-3.01/;
convert {$sInputFileJpgFull} {$sInputFileTifFull};
/home/user/tesseract-3.01/api/tesseract {$sInputFileTifFull} {$sOutputFileBase} -psm 7 {$sConfigType} >> /tmp/ocr.log";
$sResults = system( $sCmd);

3)passthru() 直接将结果输出到游览器,不返回任何值,且其可以输出二进制,比如图像数据。
原型: void passthru ( string $command [, int &$return_var ] )

header("Content-type:image/gif");
passthru("/usr/bin/ppm2tiff  /usr/share/tk8.4/demos/images/teapot.ppm");

4)shell_exec()直接执行命令$cmd
原型: string shell_exec ( string $cmd )
<!--?php
$output = shell_exec('ls -lart');
echo "$output";

2.反撇号
要确保shell_exec函数可用
echo `dir`;
3. 用popen()函数打开进程,可以和命令进行交互。
原型: resource popen ( string $command , string $mode )
有时须向命令输入一些东西,如在增加系统用户时,要调用su来把当前用户换到root用户,而su命令必须要在命令行上输入root的密码。这种情况下,用之前提到的方法显然是不行的。
popen( )函数打开一个进程管道来执行给定的命令,返回一个文件句柄,可以对它读和写。返回值和fopen()函数一样,返回一个文件指针。除非使用的是单一的模式打开(读or写),否则必须使用pclose()函数关闭。该指针可以被fgets(),fgetss(),fwrite()调用。出错时,返回FALSE。

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

生活在西班牙

自己动手丰衣足食

BlueAsteroid

Just another WordPress.com site

Jing's Blog

Just another WordPress.com site

Start from here......

我的心情魔方

天才遠私廚

希望能做一個分享各種資訊的好地方

语义噪声

西瓜大丸子汤的博客

笑对人生,傲立寰宇

Just another WordPress.com site

Where On Earth Is Waldo?

A Project By Melanie Coles

the Serious Computer Vision Blog

A blog about computer vision and serious stuff

Cauthy's Blog

paper review...

Cornell Computer Vision Seminar Blog

Blog for CS 7670 - Special Topics in Computer Vision

datarazzi

Life through nerd-colored glasses

Luciana Haill

Brainwaves Augmenting Consciousness

槑烎

1,2,∞

Dr Paul Tennent

and the university of nottingham

turn off the lights, please

A bunch of random, thinned and stateless thoughts around the Web

%d bloggers like this: