簡體   English   中英

從 php exec() 獲取退出代碼 127(未找到命令)

[英]Getting Exit Code 127 (Command not Found) from php exec()

編輯 - 在頂部添加新信息以提高可見性。 www-data 用戶不能使用exec()命令。 所有嘗試都會返回 127 錯誤。

我設置了一個簡單的腳本就是這樣

<?php
$res = exec("echo EXEC", $res1, $res2);
var_dump($res);
var_dump($res1);
var_dump($res2);
?>

當通過應用程序(當然作為 www-data 運行)執行時,這將返回 127 錯誤代碼。
通過此命令執行時,它會完美運行sudo -u root php testExec.php
通過此命令執行時,它再次返回 127 錯誤代碼sudo -u www-data php testExec.php

原始問題

嘗試在 php 中使用exec命令時,我似乎只能得到錯誤代碼 127。我正在嘗試使用https://github.com/rialto-php/puphpeteer package 生成 pdf,它工作得很好但我找不到導致它現在失敗的更改。

我一直在使用/usr/local/.nvm/versions/node/v14.2.0/bin/node作為節點的路徑,但我也嘗試將它復制到這里/node/v16.14.2/bin這樣我就可以給出整個目錄結構執行權限。 在任何一個/兩個地方,節點由 www-data(php 運行的用戶)所有,並具有執行權限 (755)。

從命令行運行'/node/v16.14.2/bin/node' '/var/www/html/vendor/nesk/puphpeteer/src/get-puppeteer-version.js'生成的初始命令)有效很好並返回預期結果"5.5.0"所以節點在那里並且可執行並且 get-puppeteer-version 腳本存在。

在排除故障后,我決定只測試 exec 並發現它對任何命令都不起作用。 我試過只運行exec("date"); exec("echo EXEC")並且它們也返回相同的退出代碼 127。

disable_functions ini 設置為空(通過ini_get('disable_functions')空結果確認)。 未啟用安全模式(通過ini_get('safe_mode')錯誤結果確認)。

如果有人對 exec 根本不起作用的原因有任何見解,那就太好了!

環境:
Ubuntu 18.04.4
PHP 8.1

於是進一步調查.. 我發現這確實是一個權限問題。 我仔細檢查了該節點,/bin 文件夾中的所有內容都具有適當的執行權限。

我錯過的(並且不確定它是如何改變的)是 /bin 文件夾本身沒有適當的執行權限。 添加那些立即解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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