【问题标题】:Cant run shell script in PHP无法在 PHP 中运行 shell 脚本
【发布时间】:2023-03-04 22:24:01
【问题描述】:

当我尝试使用 execshell_exe 运行 shell 脚本时,没有任何反应! 当我使用这些命令lswhoami 运行时,所有工作都可以。

可能是什么?

【问题讨论】:

  • 请添加一个您尝试如何运行它的示例。
  • 您是否尝试过完全限定的 PATH(例如:“/usr/local/myscript”)?
  • 感谢您的回答.. 我试过了:exec('users/ig/..../script.sh'),还有 shell_exec('users /ig/..../script.sh')exec('sh users/ig/..../script.sh') 没有任何帮助。当我尝试 echo exec('whoami') 它\' 工作

标签: php bash shell exec


【解决方案1】:

你会回显输出吗?

echo exec('ls');

您是否启用了安全模式?

phpinfo();

如果是:(来自手册)

注意:启用安全模式后,您只能执行 安全模式执行目录。出于实际原因,目前不允许 在可执行文件的路径中包含 .. 组件。

尝试用

调用 exec
exec('...pathtoyourbashscript...', $out, $return);

然后

echo $return;

如果显示127,则可能路径错误。

还要检查权限。用户“nobody”可能是 apache 用户,它需要访问和执行脚本的权限。

您可以通过运行更改权限

chmod 755 pathtouyourscript

这意味着类似“我不介意其他人是否阅读或运行此文件,但只有我应该能够修改它”。

【讨论】:

  • echo exec('ls'); 运行良好。我检查了phpinfo(),它显示安全模式已关闭。在配置命令我看到 '--enable-safe-mode'
  • 它的返回1。如果有帮助,当我检查谁是用户 (whoami) 时,它会显示 nobody
  • 尝试chmod 755 pathtouyourscript
  • 你试图执行的 shell 文件是什么?也许有用户“无人”无法执行的权限相关任务......
  • shell脚本通过检查文件名来创建目录并设置目录名称,然后将文件复制到该目录并从原始目录中删除。
【解决方案2】:

如果您使用的是 Apache,请检查以确保 Apache 用户具有执行 php 文件所需的权限。

【讨论】:

    【解决方案3】:

    您可以使用反射来确定该功能是否已被 disable_functions 禁用。

    $exec = new ReflectionFunction('exec');
    print $exec->isDisabled() ? 'Disabled' : 'Enabled';
    

    【讨论】:

      【解决方案4】:

      如果程序是基于 web 的,即对于 linux,尝试制作一个 php 文件来处理 shell。 和一个shell文件来处理php..

      例如:runAllShell.php 文件可以包含循环。:

      <?php
      // Developed by A T.
      // Count the files
      $directory = '/put/directory/path_here/';
      $files = glob($directory . '*.*');
      
      if ( $files !== false )
      {
          $filecounter = count( $files );
      
      }
      else
      {
          echo "No Files were found";
      }
      $fileCount = $filecounter;
      
      // Start the index
      $fileNumber = 1;
      while($fileNumber <= fileCount){
      shell_exec('$fileNumber . ".sh"');
      // get some feedback
      echo "The ".$fileNumber." file has been excecuted";
      // increment file number
      $fileNumber++;
      
      }
      ?>
      

      确保目录中的所有 .sh 文件都按数字顺序排列才能正常工作,即:1.sh 2.sh 3.sh 等等。

      最好的问候, AT。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2020-01-01
        • 2017-09-09
        • 2019-02-17
        • 2023-03-14
        • 1970-01-01
        相关资源
        最近更新 更多