php shell_exec 返回null_shell_exec 返回null - CSDN
精华内容
参与话题
  • php执行shell返回

    万次阅读 2013-09-17 11:25:36
    问题:以下shell脚本在 www 用户下执行 sudo /usr/local/webserver/nginx/sbin/nginx -t 是有返回结果的,但用http://localhost/nginx.php?act=test 访问是看不到返回值,shell指令都没执行,safe-mode 是off的...

    问题:以下shell脚本在 www 用户下执行 sudo /usr/local/webserver/nginx/sbin/nginx -t 是有返回结果的,但用http://localhost/nginx.php?act=test 访问是看不到返回值,shell指令都没执行,safe-mode 是off的,不知为何,请教高人了?
    nginx.php代码如下:
    <?php
    if(isset($_GET['act'])&&!empty($_GET['act'])){
      if($_GET['act']=='test'){
         $message=shell_exec("sudo /usr/local/webserver/nginx/sbin/nginx -t");
         echo "测试结果:".$message;
      }elseif($_GET['act']=='restart'){
         $message=shell_exec("sudo /usr/local/webserver/nginx/sbin/nginx -s reload")
    ;
         echo "重启结果:".$message;
      }
    }else{
      header("Status: 404 Not Found");
    }
    ?>


    回复:我一开始也为这个问题迷惑不解,为何 php cgi以www用户执行sudo ls -al / 命令就可以正常输出,而执行

    sudo /usr/local/webserver/nginx/sbin/nginx -t 却没有输出?

    没有任何输出,导致我们无法跟踪错误的原因,那么,使用Linux标准输出重定向,看看有无输出,我的php代码是(设置/wwwroot/log.txt权限为777):
    /wwwroot/index.php
    <?php
    $s = shell_exec("/usr/bin/sudo /home/nginx/sbin/nginx -t >/wwwroot/log.txt");
    echo $s;

    请求http://localhost/index.php, 发现log.txt文件是空白的,即没有正常输出,那说明有可能发生了错误,为此,我再尝试使用Linux的标准错误输出重定向:
    $s = shell_exec("/usr/bin/sudo /home/nginx/sbin/nginx -t 2>/wwwroot/log.txt");

    注意重定向符号前的2

    再请求index.php 这时,在log.txt中记录了详细的错误:
    sudo: sorry, you must have a tty to run sudo

    这个错误我没见过,大致意思说,当执行sudo时,必须要从终端登录(可能nginx本身的一些限制)

    google搜索这个错误提示, 解决办法也很简单:
    注释掉 /etc/sudoers中 ‘Defaults requiretty’ 这个就行,即前面加#

    按这个办法处理,浏览器仍然没有任何输出,我的猜测:可能是nginx启动程序输出目标是终端,那么折衷的办法就是使用输出重定向了,所以,改造的代码如下:
    index.php
    <?php
    $trace="/wwwroot/log.txt";

    if(!is_writable($trace) || !is_readable($trace)) {
        exit("$trace must readable and writable");
    }

    file_put_contents($trace,'');

    echo `/usr/bin/sudo /home/nginx/sbin/nginx -t >$trace 2>&1`;

    echo `top -b -n 1`;
    echo file_get_contents($trace);


    这是通过简接方式来观察输出的,类似这个现象的,还有使用top命令查看系统负载,top命令需要在终端窗口中执行,使用php执行shell_exec("top -n 1"),给出的错误就是TERM environment variable not set. 解决办法就是使用-b参数执行top, 即shell_exec("top -b  -n 1")

    如果你有更好的方法,欢迎一起探讨,如果实验成功,也就可以通过web页面控制nginx了。
    展开全文
  • PHPexec()函数无返回值排查方法

    万次阅读 2014-03-11 23:46:26
    在安全imagemagic时 需要用到 exec很多服务器上安装...这个问题99.99%与权限有关,但是exec执行的命令不会返回错误。一个技巧就是使用管道命令,假设你的exec调用如下: exec('convert a.jpg b.jpg', $output, $retu
    在安全imagemagic时 需要用到 exec很多服务器上安装失败

    exec()执行外部命令失败,但没有任何错误信息。 


    exec执行某命令在命令行下没有问题,但是在php中就出错。这个问题99.99%与权限有关,但是exec执行的命令不会返回错误。一个技巧就是使用管道命令,假设你的exec调用如下:

    exec('convert a.jpg b.jpg', $output, $return_val);

    可以更改如下:

    exec('convert a.jpg b.jpg 2>&1', $output, $return_val);  
    print_r($output);

    使用 2>&1, 命令就会输出shell执行时的错误到$output变量, 输出该变量即可分析。

    备注: exec有3个参数,第一个是要执行的命令,第二个是参数是一个数组,数组的值是由第一个命令执行后生成的,第三个参数执行的状态,0表示成功,其他都表示失败

    在php里面一共有三个函数可以用来执行外部命令system,exec,passthru

    更多精彩博文请到言会咸的博客

    网址:http://blog.csdn.net/aoyoo111


    展开全文
  • windows+PHP+shell_exec()无法执行的原因

    万次阅读 2018-01-23 11:33:34
    今天使用shell_exec()命令执行wkhtmltopdf.exe 生成pdf文件时,总是无法生成PDF文件,使用var_dump()打印返回值,结果是null。可是检查代码并没有什么问题啊?执行程序的目录是 D:\Program Files\wkhtmltopdf\bin\...

    今天使用shell_exec()命令执行wkhtmltopdf.exe 生成pdf文件时,总是无法生成PDF文件,使用var_dump()打印返回值,结果是null。可是检查代码并没有什么问题啊?执行程序的目录是
    D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe
    好吧,接下来找找原因。

    1、通过dos执行wkhtmltopdf程序

    首先测试通过dos命令行执行wkhtmltopdf程序:
    这里写图片描述
    执行成功,没有问题。

    查看pdf文件是否成功生成:
    这里写图片描述
    文件同样成功生成。

    这说明程序执行没有问题。

    2、PHP安全模式

    网上说PHP安全模式会影响到shell_php()函数的执行。我查了一下,发现php.ini中安全模式只有

    [SQL]
    ; http://php.net/sql.safe-mode
    sql.safe_mode = Off

    没有其他的安全模式。而且安全模式还会影响exec()函数的使用,我之前曾经使用过exec()函数,所以不是安全模式的问题。

    3、php.ini中disable_functions参数

    百度时,有人说是php.ini配置文件中disable_funcitons=shell_exec()。禁用了shell_exec()函数。好吧,php.ini默认disable_funcitons= (null)。看来不是这里的原因呢。

    4、程序执行目录问题

    之后,我有检查了一下shell_exec()的执行代码,发现执行目录
    D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe有问题。
    在第二个目录Program Files中有空格存在,之前考虑到不能含有中文的问题,所以安装wkhtmltopdf时,走的是D盘下的默认目录(本来是C盘,我改为D盘了)。既然不能走中文目录,是不是含有空格的目录也是不行的呢?于是我就把D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe改为D:\wkhtmltopdf\bin\wkhtmltopdf.exe。然后修改了shell_exec()执行代码的执行目录。
    最后执行成功,生成了pdf文件。

    5、环境变量问题

    此外把文件添加到环境变量中,可以不用带目录执行wkhtmltopdf程序。只不过,因为是测试wkhtmltopdf是否能执行含有html+css代码的文件生成带有css格式PDF文件,所以没有添加到环境变量中,希望有小伙伴使用wkhtmltopdf时,可以安装wkhtmltopdf到D:\Program Files下,然后添加到环境变量内,用php的shell_exec()使用一下,看看能否成功。

    展开全文
  • PHP Shell_exec所遇到的坑

    千次阅读 2017-08-07 15:23:37
    因为需要在项目中使用shell_exec执行python脚本,在测试下shell_exec("test.py")能够正常无误运行,但是加个目录shell_exec("python/test.py")则失效了,用的PHP框架,原因一开始想到是PHP的目录限制,但是苦试无果...

    因为需要在项目中使用shell_exec执行python脚本,在测试下shell_exec("test.py")能够正常无误运行,但是加个目录shell_exec("python/test.py")则失效了,用的PHP框架,原因一开始想到是PHP的目录限制,但是苦试无果后发现不是目录的问题。

    于是想到可能是shell_exec命令不支持目录?一言惊醒梦中人,shell_exec就相当于命令行执行

    代码由原来的


    改成如下图就可以了,完美解决。



    展开全文
  • php中判断shell_exec执行结果

    万次阅读 2016-05-05 13:58:43
     不过shell_exec执行成功无输出 和 执行失败 返回的都是null 在记录错误日志的时候区分就成问题了。  在php手册的评论中找到了区分的方法,在此记录一下。   $shell = "wget -O despath sourcepath && echo
  • 今天发现在使用定时器的时候,执行一个shell脚本,打印日志正常,然后在系统中不能查到当前Shell脚本执行的结果。 因为使用的是Web程序,对于Shell调用这块也是新手。以前没有遇到过这种问题,只能靠猜了。 判断 ...
  • execshell_exec的区别

    万次阅读 2016-11-01 14:41:29
    手册 shell_exec函数运行在shell脚本环境,没有返回值 shell_exec (PHP 4, PHP 5, PHP 7) shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。 说明 string shell_exec ( ...
  • phpexec执行shell命令时超时。

    千次阅读 2017-05-08 11:51:42
    phpexec执行shell命令时超时。 $cmd = “sh build.sh” exec($cmd); $cmd命令是一个2-3分钟的执行时间,请问怎么保证php不超时。 希望是不等待此shell执行完,直接返回 yushu_bd | 浏览 1903 次 ...
  • php执行shell不阻塞方法

    千次阅读 2016-04-20 14:31:47
    exec() 不输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面。 passthru() 只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。这些方法都会等待命令执行完毕后才会继续执行后续...
  • 这个函数会将结果直接进行输出 (注意:是直接输出区别于返回值,因为这个,我一般不用它),命令成功后返回输出的最后一行,失败返回FALSE 2 shell_exec(): shell_exec — 通过 shell 环境执行命令 ( 这就意味着这...
  • php执行shell,不阻塞

    千次阅读 2013-03-20 10:57:44
    exec("sh /var/www/html/1.sh"." > /dev/null &"); 可以保证不阻塞,为了方便大家搜索,多加一些关键字 php,exec,阻塞,exec,system,shell_exec
  • phpexec()函数返回值

    万次阅读 2017-06-08 16:23:31
    php中可以使用 exec() 函数调用外部函数。 语法: string exec ( string $command [, array &$output [, int &$return_var ]] ) 其中$output内容会追加,要注意
  • 在安全imagemagic时 需要用到 exec很多服务器上安装失败 exec()执行外部命令失败,但没有任何错误信息。  exec执行某命令在命令行下没有问题,但是在php中就出错。这个问题99.99%与权限有关,但是exec执行的...
  • SQL恢复XP_CMDSHLL 以及XPLOG70.DLL被删 直接用SQL连接器开启3389用SQL连接器恢复XP_CMDSHLLE的命令 (1)SQL Query Analyzersp_addextendedproc xp_cmdshell,@dllname=xplog70.dll(2)首先在SqlExec Sunx Version...
  • php执行linux命令、shell脚本。以获取服务器运行状态举栗子
  • PHP 执行shell 脚本,常见问题

    千次阅读 2018-01-28 15:26:06
    php调用shell脚本 1)exec() 原型: string exec ( string $command [, array &$output [, int &$return_var ] ) 说明: exec执行系统外部命令时不会输出结果,而是返回结果的最后一行。如果想得到结果,可以使用...
  • 利用MSSQL getshell

    千次阅读 2018-11-17 15:23:15
    此次复现使用的sql server 2000 和sql server 2008两个环境进行的 ...0x01 MSSQL连接 连接MSSQL 2000 新建连接: ... 一直下一步,完成后,数据库导航窗口会出现一个连接,双击连接: 若是第一次连接,双击会提示下载驱动...
  • 如果执行过程中发生错误或者进程不产生输出,则返回 NULL。 Note: 当进程执行过程中发生错误,或者进程不产生输出的情况下,都会返回 NULL, 所以,使用本函数无法通过返回值检测进程是否成功执行。 如果需要...
  • phpphp使用exec总结

    万次阅读 2019-03-08 09:49:31
    exec( )基础介绍 exec()函数用来执行一个外部程序 开启exec()函数: exec()函数是被禁用的,要使用这个函数必须先开启。 首先是 要关掉 安全模式 safe_mode = off (若safe_mode=off,下边就不需要看了) 然后在...
  • PHP通过系统命令执行Python脚本

    千次阅读 2015-04-18 00:44:04
    最近有用到支持向量机(SVM)搞机器学习的需求,目前Python对这块的支持还是蛮好的,然而前台对数据的展示和处理还是选择使用PHP来实现。 这就有了PHP和Python模块通信的需求,最初的想法是把Python模块作为一个独立的...
1 2 3 4 5 ... 20
收藏数 8,898
精华内容 3,559
关键字:

php shell_exec 返回null