我無法在代碼中添加 * 來查找檔案
此代碼有效
exec("mediaconvert -t wav -i /home/20220228/11/23401.rec -o /var/www/html/test.mp3");
如果我添加 *,它不起作用
exec("mediaconvert -t wav -i /home/20220228/11/*01.rec -o /var/www/html/test.mp3");
路徑中的 ps 只是一個檔案,當我嘗試從 shell 執行此代碼時,它可以作業。請幫助我)
uj5u.com熱心網友回復:
檔案名擴展和其他特定于 bash 的功能可能/不會在其他 shell(例如標準 POSIX)中作業。如果您的命令*未在 bash 中執行,它將無法按預期作業。然后,您需要驗證 PHP 安裝在其中執行命令的環境/shell。
運行以下測驗腳本:
<?php
exec('echo "$SHELL"', $out);
var_dump($out);
當我直接在 CLI 上運行 PHP 腳本時,我得到"/bin/bash"了被呼叫的 shell。當我通過瀏覽器運行它時,奇怪的是我得到"/sbin/nologin"了。那里沒有 bash 環境。apache(通過瀏覽器呼叫執行 PHP 的用戶和通過 SSH 登錄的“實際”用戶有不同的環境。沒有為 Apache 用戶配置“正確”的 shell。)
這些結果來自運行 Apache 2.4/PHP 8.1.4 的 Centos7 服務器。你的旅費可能會改變。底線:如果您正在執行的命令取決于 bash 特定的功能,它必須在 bash 環境中執行。
如果 bash 不可用,您的另一個選擇是使用例如glob獲取與目錄中的模式匹配的檔案,然后在為每個特定檔案執行命令時回圈它們。
您可能會發現這個問題/答案相關:使用 php exec 啟動帶有大括號擴展的 linux 命令。
uj5u.com熱心網友回復:
我建議你反其道而行之。首先,獲取要輸入的檔案,然后執行。例如:
$input_files = ...
exec("mediaconvert -t wav -i " . $input_files . " -o /var/www/html/test.mp3");
uj5u.com熱心網友回復:
您可以嘗試查找具有glob()函式的檔案,然后您可以使用 exec()。您可以使用以下代碼嘗試類似的解決方案:
$input_files = '/home/20220228/11/*01.rec';
foreach (glob($input_files) as $filename) {
exec("mediaconvert -t wav -i " . $filename . " -o /var/www/html/test.mp3");
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/454709.html
