繁体   English   中英

使用 exec Laravel PHP 运行 .sh 文件

[英]Run .sh file using exec Laravel PHP

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

.sh 文件冷:

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 操作系统。

你可以使用已经在 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();

所有这些答案现在都过时了,而是使用(Symfony 4.2 或更高版本):

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

或者

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

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

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

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

使用以下语法:

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

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

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

在 Laravel 8.x 使用的Symfony 5.2.0中(与 Laravel 9.x 使用的当前Symfony 版本 6.0相同),您需要指定sh命令和您的参数,在您的情况下:

use Symfony\Component\Process\Process;

$process = new Process(['/usr/bin/sh', 'folder_name/file_name.sh']);
$process->run();

系统将从您的/public文件夹中找到folder_name/file_name.sh (如果它从 url 执行),如果您想使用另一个工作目录,请在第二个Process参数中指定。

$process = new Process(['/usr/bin/sh', 'folder_name/file_name.sh'], '/var/www/app');

并且/usr/bin/sh有时对每个用户都有不同的位置,但这是默认位置。 输入whereis sh来找出它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM