簡體   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