php shell_execute无效

时间:2015-04-22 11:56:32

标签: php sh shell-exec

我有一个问题,我不能shell_exec(),但它只是不起作用。有没有问题whit shell_exec()或者它不能以某种方式运行myfile.sh .. 如果我在shell中运行代码,它工作正常。我的PHP不会在安全模式下运行,我确实从php.ini文件检查它,我也检查了disable_functions。 我的PHP代码现在返回null。我也尝试过测试目的:

$result = exec('myfile.sh', $output, $status);
我得到了:

array(0){}int(127)

两个文件都有chmod 775读取和执行预设。 我有文件message.php看起来像什么

<?php
$user = "username";
$pass = "pass";
$from = "from who";
$to = "1234567";
$msg = "test message";

$host="https://web.myurl.ee:portnr/etc/etc";
$handle = curl_init($host);
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_exec($handle);
$res = curl_getinfo($handle, CURLINFO_HTTP_CODE);

if($res >= 400){
    exit;
}else if($res < 200){
    exit;
}else{
    if(function_exists('shell_exec') && !ini_get('safe_mode')){
         $file = 'myfile.sh';
         if(file_exists($file)){
              $result = shell_exec($file ."$user $pass $from $to $msg");
              var_dump($result);
         }else{
            echo "No files";
         }
    }else{
        echo "check status";
    }
}
?>

和myfile.sh文件看起来像

#!/bin/sh
if [$# -ne 5 ]; then
    echo"jahas"
    exit 1
fi
etc...

我想念的是什么,任何提示看什么或下一步做什么。

在代码中可能有些错误,我没有复制粘贴它。

2 个答案:

答案 0 :(得分:0)

这里要检查两件事:

  1. 首先确定是否在php.ini中禁用了exec和shell_exec

    disable_functions = exec

  2. exex()接受命令而没有文件,如果我没有弄错的话,而不是简单地添加你应该尝试的文件名:

    exec(dirname( FILE )。&#39; /myfile.sh');

  3. 使用正确的目录并实际传递命令而不是文件名。

答案 1 :(得分:0)

您可以使用绝对路径或相对路径。对于相对路径,当前目录通常是PHP文件。如果即使使用绝对路径也无法访问脚本,则文件系统访问权限可能存在问题。请记住,PHP脚本通常作为Web服务器的(系统)用户帐户执行。

您的shell脚本应该存储在应用程序树附近或内部的某个位置,这样您就可以将访问权限授予PHP脚本(即Web服务器),而不会过多地损害您的文件系统安全性。