linux环境下exec报错:Error opening terminal:unknown

昨天遇到遇到一个很坑爹的问题,改了快两天,终于改好了。赶快记录一下新鲜的干活。

我昨天遇到一个很神奇的问题,代码归结出来就是下面这段,其实就是在php当中,通过exec来执行sipp的命令(具体sipp命令里面的内容被我和谐了哈,主要看原理)。

文件名: sendSip.php

function SendSip(){
        $sip_cmd = "/usr/local/bin/sipp set var_date 1468911702";
        exec($sip_cmd, $return, $result);
        file_put_contents("/tmp/send_sip", var_export($return,true) . "\n", FILE_APPEND);
    }

上面的函数在linux环境下,我手动执行,php sendSip.php, 则能正常返回信息,但是我讲这个命令加入crontab中去执行的时候,就很神奇的报出 Error opening terminal:unknown 这个错误。害我纠结了很久,最后发现我linux下的的$TERM的值为xterm,然后crontab执行的时候,$TERM的值为dump,然后导致会报出上面的错误。最后查看官方的php文档才找到和这个相关的东西,谷歌百度都是废物啊。

http://php.net/manual/de/function.exec.php 这是php官方文档对于exec方法的解读。主要看下面截图的内容,翻译就是有的shell命令可能需要你去设置终端环境:
linux环境下exec报错:Error opening terminal:unknown_第1张图片

然后我将命令之前加上了TERM=xterm,这段,将终端修改了,然后就能正确执行了。

另外附送一个exec的用法详解,首先主要是他有三个参数,第三个参数能表示命令是否正确执行,然后第二个参数,相当于执行结果,不能通过赋值的方式将exec操作的结果赋值给其他参数哈:
string exec(string command, string [array], int [return_var]);

Command – 需要执行的命令
Array – 是输出值
return_var –是返回值0或1,如果返回0则执行成功,返回1则执行失败。

还有一个技巧就是使用管道命令, 使用 2>&1, 命令就会输出shell执行时的错误到$output变量, 输出该变量即可分析。

你可能感兴趣的:(PHP,Linux)