Php shell_execute 不工作

Php shell_execute not working

我有一个问题,我无法 shell_exec(),但它就是行不通。 shell_exec() 有问题还是它不能 运行 myfile.sh 不知何故.. 如果我 运行 在 shell 中编码,它工作正常。我的 php 在安全模式下不会 运行,我确实从 php.ini 文件中检查过它,我也检查过 disable_functions。 我的 php 代码 returns 现在只是空的。我也尝试过测试目的:

$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...

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

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

这里要检查两件事:

  1. 先判断php.ini

    中是否禁用了exec和shell_exec

    disable_functions = 执行

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

    exec(dirname(FILE) . '/myfile.sh');

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

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

您的 shell 脚本应存储在您的应用程序树附近或内部的某个位置,以便您可以授予对您的 PHP 脚本(即您的网络服务器)的访问权限,而不会妥协文件系统的安全性。