я пытаюсь обновить свой белый список майнкрафт через php на мой сервер Linux.
Соединение работает, но я не знаю, почему он не отправил мою команду, чтобы добавить пользователя в белый список.
Вот мой код:
$name=$_POST['name'];
$mc=$_POST['mc'];
if($ssh = ssh2_connect('127.0.0.1', 22)) {
if(ssh2_auth_password($ssh, 'root', 'password')) {
$stream = ssh2_exec($ssh, 'screen -R '.$mc.' && '.'whitelist add '.$name.' && whitelist reload');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
$data .= $buffer;
}
fclose($stream);
echo $data;
}
}
Вы объединяете команды с &&
и все они будут выполняться один за другим в вашей текущей оболочке, а не внутри экрана. screen
может выполнять команды внутри выбранного сеанса, но с собственным синтаксисом. Увидеть этот вопрос, например, или руководство. В вашем случае команда должна выглядеть так:
screen -S session_name -X stuff $'whitelist add user_name && whitelist reload\n'
Заметка \n
символ в конце строки. Это необходимо для выполнения команды, потому что screen
не будет действительно выполнять его, screen
«отправит указанную команду в сеанс работающего экрана», как сказано в руководстве. Учтите, что экран будет набирать команду вместо вас. И когда вы набираете команду, вы должны нажать Enter / Return, чтобы выполнить ее.
В PHP вы можете выполнить команду следующим образом:
$stream = ssh2_exec($ssh, "screen -S $mc -X stuff \$'whitelist add $name && whitelist reload\\n'");
Других решений пока нет …