使用exec Laravel PHP运行.sh文件

时间:2017-06-05 17:33:00

标签: php laravel shell command sh

我正在尝试运行一个.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操作系统。

3 个答案:

答案 0 :(得分:7)

您可以使用已在Laravel http://symfony.com/doc/current/components/process.html

中的Symfony的Process Component
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();

答案 1 :(得分:1)

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

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

使用以下语法:

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

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

希望这对在Windows中遵循公认的答案的人有帮助。

答案 2 :(得分:0)

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

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

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

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