php 运行系统命令设置时间的方法

转自:http://www.kuqin.com/linux/20090417/46471.html

首先先要给大家介绍PHP执行linux系统命令的几个基本函数。我曾经很长一段时间都分不清下面几个函数的具体用法区别。

system函数
说明:执行外部程序并显示输出资料。
语法:string system(string command, int [return_var]);
返回值: 字符串

详细介绍:
本函数就像是 C 语中的函数 system(),用来执行指令,并输出结果。若是 return_var 参数存在,则执行 command 之后的状态会填入 return_var 中。同样值得注意的是若需要处理用户输入的资料,而又要防止用户耍花招破解系统,则可以使用 EscapeShellCmd()。若 PHP 以模块式的执行,本函数会在每一行输出后自动更新 Web 服务器的输出缓冲暂存区。若需要完整的返回字符串,且不想经过不必要的其它中间的输出界面,可以使用 PassThru()。

实例代码:

< ?php
$last_line = system("ls", $retval);
echo "Last line of the output: " . $last_line;
echo "<hr />Return value: " . $retval;
?>

exec函数
说明:执行外部程序。
语法:string exec(string command, string [array], int [return_var]);
返回值: 字符串

详细介绍:
本函数执行输入 command 的外部程序或外部指令。它的返回字符串只是外部程序执行后返回的最后一行;若需要完整的返回字符串,可以使用 PassThru() 这个函数。

要是参数 array 存在,command 会将 array 加到参数中执行,若不欲 array 被处理,可以在执行 exec() 之前呼叫 unset()。若是 return_var 跟 array 二个参数都存在,则执行 command 之后的状态会填入 return_var 中。

值得注意的是若需要处理使用者输入的资料,而又要防止使用者耍花招破解系统,则可以使用 EscapeShellCmd()。

实例代码:

< ?php
echo exec("whoami");
?>

popen函数
说明:打开文件。
语法:int popen(string command, string mode);
返回值: 整数

详细介绍:
本函数执行指令开档,而该文件是用管道方式处理的文件。用本函数打开的文件只能是单向的 (只能读或只能写),而且一定要用 pclose() 关闭。在文件操作上可使用 fgets()、fgetss() 与 fputs()。若是开档发生错误,返回 false 值。

实例代码:

< ?
$fp = popen( "/bin/ls", "r" );
?>



1.

<?php

echo shell_exec("id -a");
$last_line = system("/usr/sbin/phpsystem /bin/date -s '2010-05-28 13:10'", $retval);
echo 'Last line of the output: ' . $last_line;
echo '<hr />Return value: ' . $retval;
?>

//

2.在/usr/local/apache2/htdocs/asterisk/目录下建立文件phpsystem.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>


int main(int argc, char *argv[])
{
    uid_t uid ,euid;
    int id;


    uid = getuid() ;
    euid = geteuid();
   //printf("my uid :%u/n",getuid());  //这里显示的是当前的uid 可以注释掉.
   //printf("my euid :%u/n",geteuid()); //这里显示的是当前的euid
    if(setreuid(euid, uid))  //交换这两个id
    {
        perror("setreuid");
    }
   //printf("/n/nafter setreuid uid :%u/n",getuid());
   //printf("afer sertreuid euid :%u/n",geteuid());


    int i;
    char cmd[1024]={0};
    for(i=1;i<argc;i++)
    {
if(strchr(argv[i],' '))
{
strcat(cmd,"'");
strcat(cmd,argv[i]);
strcat(cmd,"'");
}
else
strcat(cmd,argv[i]);
strcat(cmd," ");
    }
    printf( "\ncmd is: %s\n",cmd);


    id = system(cmd);
    //printf( "/nid=%d/n",id );
    //id=-1:出现错误  
    //id=0:调用成功但是没有出现子进程  
    //id>0:成功退出的子进程的id
    return id;
}
///

3.  保存并编译phpsystem.c

#gcc  -o phpsystem  -Wall phpsystem.c

//

4.  赋权限

#chmod u+s ./phpsystem  

//

5. 在浏览器中预览结果

uid=48(apache) gid=48(apache) groups=48(apache) Fri May 28 13:10:00 CST 2010 cmd is: /bin/date -s '2010-05-28 13:10' Last line of the output: cmd is: /bin/date -s '2010-05-28 13:10'


Return value: 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值