【问题标题】:Run .sh file using exec Laravel PHP使用 exec Laravel PHP 运行 .sh 文件
【发布时间】:2017-11-06 13:18:52
【问题描述】:

我正在尝试运行一个 .sh 文件,它将一个 excel 文件导入我的数据库。这两个文件位于公用文件夹内的同一目录中。由于某种原因,exec 命令没有被执行或没有任何错误发生。

.sh 文件colde:

IFS=,
while read column1  
      do
        echo "SQL COMMAND GOES HERE"

done < file.csv | mysql --user='myusername' --password='mypassword' -D databasename;
echo "finish"

在我的 php 文件中,我尝试了以下操作:

$content = file_get_contents('folder_name/file_name.sh');
echo exec($content);

还有:

shell_exec('sh /folder_name/file_name.sh');

注意:我可以直接从 gitbash 执行 sh 文件,但是我希望它使用 Laravel 控制器中的函数来完成。我正在使用 Windows 操作系统。

【问题讨论】:

    标签: php laravel shell command sh


    【解决方案1】:

    所有这些答案现在都已过时,请改用(Symfony 4.2 或更高版本):

    $process = Process::fromShellCommandline('/deploy.sh');
    

    或者

    $process = new Process(['/deploy.sh']);
    

    https://symfony.com/doc/current/components/process.html

    【讨论】:

    • 您好,刚刚尝试了您的两种解决方案,但似乎什么也没发生。我试图执行一个创建 .txt 文件的 .sh 文件。我没有收到任何错误或类似的错误。(我的 .sh 文件也在主项目文件夹中,所以我尝试了 ['/comp.sh']。['comp.sh'] 和完整路径)。你知道为什么吗?
    【解决方案2】:

    我知道这有点晚了,但我无法添加评论(由于是新成员),但要解决 Windows 中的问题“'sh' 不被识别为内部或外部命令、可运行程序或批处理文件。”我不得不更改新流程:

    $process = new Process('sh /folder_name/file_name.sh');
    

    使用以下语法:

    $process = new Process('/folder_name/file_name.sh');
    

    唯一的问题是上传到 Linux 服务器时需要更改为调用 sh。

    希望这对在 Windows 中遵循公认答案时遇到此问题的任何人有所帮助。

    【讨论】:

      【解决方案3】:

      你可以使用已经在 Laravel http://symfony.com/doc/current/components/process.html 中的 Symfony 进程组件

      use Symfony\Component\Process\Process;
      use Symfony\Component\Process\Exception\ProcessFailedException;
      
      $process = new Process('sh /folder_name/file_name.sh');
      $process->run();
      
      // executes after the command finishes
      if (!$process->isSuccessful()) {
          throw new ProcessFailedException($process);
      }
      
      echo $process->getOutput();
      

      【讨论】:

      • Thakyou 但现在我收到一个错误:退出代码:1(一般错误)输出:================ 错误输出:=== ============= 'sh' 不是内部或外部命令、可运行程序或批处理文件。
      • 使用sh 的完整路径,因为网络服务器服务在不同的用户和不同的PATH 变量下。
      • @apokryfos 我已经试过了。实际上它没有将 sh 识别为命令。任何帮助
      • @Saurav 这很奇怪,gitbash 是sh.exe,它通常应该作为 Windows 可执行文件运行。
      • 当我通过 gitbash 使用命令 sh fullpath/filename.sh 时它可以正常工作,但是从 laravel 尝试时会返回错误。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2019-01-26
      • 2023-03-26
      相关资源
      最近更新 更多