簡體   English   中英

以PHP用戶身份執行Linux Linux命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM