[英]Exec Linux command as user in PHP
我正在將文檔文件轉換為html。 我已經在Linux服務器上安裝了LibreOffice。
這是命令
$cmd = "libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";
當我直接在Linux服務器上執行該命令時,該命令運行良好,但是當我嘗試通過PHP執行該命令時,該命令將不會轉換。
exec($cmd,$out,$err);
$err
正在打印127
。
請讓我知道我在做什么錯。
最常見的原因是$PATH
環境變量尚未填充到您的PHP應用程序中。 在這種情況下,請使用libreoffice的完整路徑:
$cmd = "/usr/bin/libreoffice4.1 --headless ... ";
路徑/usr/bin
在您的系統上可能有所不同。 在終端中鍵入which libreoffice4.1
可以找到它。
問題的另一個原因可能是權限不足,無法將文件寫入目標目錄或讀取原始文檔。 在這種情況下,請確保php應用程序具有適當的權限。 ! 絕對不需要 root
權限! 這將是您應用程序中的一個安全漏洞。
你這樣說:
當我直接在Linux服務器上執行該命令時,該命令運行良好,但是當我嘗試通過PHP執行該命令時,該命令將不會轉換。
您的命令是這樣的:
$cmd = "libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";
可能是因為當用戶登錄系統時, libreoffice4.1
的路徑是默認用戶路徑的一部分。 但是當Apache(我假設)正在運行PHP時,它不知道libreoffice4.1
二進制文件在哪里。
所以我的解決方案是在命令中包括文件的完整路徑,如下所示:
$cmd = "/full/path/to/this/binary/libreoffice4.1 --headless -convert-to html /var/www/html/CV.doc -outdir /var/www/html/";
當然,將/full/path/to/this/binary/
替換為文件的實際路徑。
您可以登錄服務器並輸入以下命令,輕松確定二進制文件的完整路徑:
which libreoffice4.1
返回的輸出應該是libreoffice4.1
二進制文件的完整路徑。 路徑應該是這樣的:
/usr/bin/libreoffice4.1
或這個:
/usr/local/bin/libreoffice4.1
但是,系統上的which
命令將返回文件的完整路徑,因此請使用該輸出作為指導。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.