最終的にPythonサーバーが動作し、出力で複数のコマンドに応答しましたが、完全な出力を受け取るPHPに問題が発生しています。fgets、fread などのコマンドを試しましたが、機能しているように見えるコマンドは「fgets」だけです。
ただし、これはオンラインのデータのみを受信するため、以下に示す while ステートメントを作成しました。
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
ただし、Python サーバーは出力の最後に Feof を送信していないようで、php ページがタイムアウトして何も表示されません。上で述べたように、echo fgets($handle) を実行するだけで問題なく動作し、出力は 1 行であり、どちらのコマンドも実行しないで再度コマンドを実行すると、次の行が表示されます。
Python スクリプトの重要な部分を以下に添付しました。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("", port))
s.listen(5)
print "OK."
print " Listening on port:", port
import subprocess
while 1:
con, addr = s.accept()
while True:
datagram = con.recv(1024)
if not datagram:
break
print "Rx Cmd:", datagram
print "Launch:", datagram
process = subprocess.Popen(datagram+" &", shell=True, stdout=subprocess.PIPE)
stdout, stderr = process.communicate()
con.send(stdout)
con.close()
s.close()
完全な PHP スクリプトも添付しました。
<?php
$handle = fsockopen("tcp://xxx.xxx.xxx.xxx",12345);
fwrite($handle,"ls");
echo fgets($handle);
fclose($handle);
?>
ありがとう、アシュリー