Я ищу скрипт php для запуска команд на конкретный порт через tcp. Сценарий выполняется на той же машине, на которую я хотел бы отправить эти команды, поэтому ip — 127.0.0.1 или localhost.
Команда будет определена независимо от того, что написано за URL. Например, trigger.php? Screen отправит команду ‘screen’, trigger.php? Sound отправит команду ‘sound’ и т. Д.
Это возможно? У меня нет особых знаний в области кодирования.
Это в двух словах: когда я открываю 127.0.0.1/trigger.php?sound, мне бы хотелось, чтобы звук команды отправлялся на порт 33000.0.1.1 через tcp. Если это проще реализовать с помощью html или cgi, это тоже подойдет.
Заранее спасибо за помощь.
Ваш trigger.php будет выглядеть следующим образом (см. Пример http://php.net/manual/en/sockets.examples.php
чтобы соответствовать вашей проблеме;)
<?php
$DEBUG=1;
if ($DEBUG) {
print "<pre>\n";
error_reporting(E_ERROR | E_WARNING | E_PARSE);
ini_set("display_errors", 1);
ini_set('display_startup_errors',1);
}
if (isset($_SERVER['QUERY_STRING'])
$cmd=$_SERVER['QUERY_STRING']; //get the command name
else
$cmd="";
print "Command to trigger: $cmd\n";
if ($cmd!="") {
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
if ($DEBUG) print "Socket created successfully\n";
$result = socket_connect($socket, "127.0.0.1", 33000);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
if ($DEBUG) print "Connected successfully\n";
socket_write($socket, $cmd, strlen($cmd));
//Read and output possible response from the command sent
echo "Response: ";
while ($out = socket_read($socket, 2048)) {
echo $out;
}
}
socket_close($socket);
}
}
if ($DEBUG) print "The end.</pre>\n";
?>
(Обратите внимание, что я не запускал его или не проверял синтаксис, но похоже, что это то, что вы хотите)
Поэтому я провел исследование об отправке команды telnet через php и нашел скрипт, похожий на тот, что мне нужен. Я изменил его и добавил строку user3134164, чтобы получить имя команды.
Скрипт выглядит так и работает отлично. Я открываю команду phptrigger.php? И все, что я ставлю после знака вопроса, будет выполнено так же, как и планировалось. Большое спасибо за вашу помощь, user3134164 🙂
<?php
$socket = fsockopen("localhost", "33000", $errno, $errstr);
$cmd=$_SERVER['QUERY_STRING'];
if($socket)
{
echo "Connected. <br /><br />";
}
else
{
echo "Connection failed!<br /><br />";
}
fputs($socket, "get /$cmd \r\n");
$buffer = "";
while(!feof($socket))
{
$buffer .=fgets($socket, 4096);
}
print_r($buffer);
echo "<br /><br /><br />";
var_dump($buffer);
fclose($socket);
?>