簡體   English   中英

執行從PHP讀取用戶輸入的Shell腳本

[英]Execute a shell script, that reads user input, from PHP

我正在嘗試實現一種可用於調用Shell腳本或程序的PHP方法。 反引號本身就很容易,但是然后我僅在腳本/程序完成時才得到輸出,這不是我所需要的。

因此,我轉為使用popen() ,因此我將輸出打印出來。現在可以正常工作,但是我遇到了下一個我找不到有效解決方案的問題:處理來自所調用腳本的提示/程序。 我項目的本質是使我無法預先知道腳本是否需要用戶輸入,因此無法自動回答提示。 例如apt-get update ; apt-get upgrade類的腳本apt-get update ; apt-get upgrade apt-get update ; apt-get upgrade可能會觸發我不知道也不想為用戶自動回答的用戶提示。

目前,我正在使用我在StackOverflow上發現的這一部分:

        static public function command($cmd) 
        {
            $cwd = getcwd();  
            $proc = proc_open($cmd, [['pipe','r'],['pipe','w'],['pipe','w']], $pipes, $cwd);

            while(($line = fgets($pipes[1])) !== false) 
            {
                fwrite(STDOUT,$line);
            }

            while(($line = fgets($pipes[2])) !== false) 
            {
                fwrite(STDERR,$line);
            }

            fclose($pipes[0]);
            fclose($pipes[1]);
            fclose($pipes[2]);

            return proc_close($proc);
        }

對於輸出,它工作正常,但是一旦腳本提示用戶(例如, read -p "What's your poison?" ),我就沒有輸出,也不能輸入任何內容。 起初,我認為可能與STDIN管道沒有得到進一步處理有關,但我不知道如何正確設置它。

有人可以在正確的方向上指導我,以實現實現的外觀來支持用戶提示而不是自動回答它們嗎?

事實證明,有一個更簡單的解決方案:只需使用passthru()函數,它就可以正確處理用戶提示並實時輸出。

暫無
暫無

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

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