2015-02-15 5 views
0

Я ищу скрипт php для запуска команд в конкретный порт через tcp. Скрипт работает на том же компьютере, на который я бы хотел отправить эти команды, поэтому ip - 127.0.0.1 или localhost.php send command to port (через tcp)

Команда будет определена независимо от того, что написано за URL-адресом. Например, экран trigger.php? Отправит команду «screen», trigger.php? Звук пошлет команду «звук» и т. Д.

Возможно ли это? У меня мало знаний о кодировании.

Это он в двух словах: когда я открываю 127.0.0.1/trigger.php?sound Я бы хотел, чтобы командный звук отправлялся на порт 127.0.0.1 33000 через tcp. Если это проще реализовать с помощью html или cgi, это тоже будет хорошо.

Заранее за вашу помощь.

ответ

0

Так что я сделал некоторое исследование о отправке команды 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); 
?> 
0

Ваш 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"; 

?> 

(Примечание я не запустить его или сделать проверку синтаксиса, но похоже, что это может быть, что вы хотите)

+0

Спасибо за помощь. Однако это не работает. Когда я открываю этот php-файл в браузере, ничего не будет отображаться, и ни один триггер не будет отправлен. По крайней мере, по моим лог-файлам ничего не дошло до скрипта, прослушивающего порт 33000 ... – prankousky

+0

На сервере, который вы используете, есть несколько неизвестных, поэтому мы не можем протестировать всю систему. Но я добавил некоторую отладку для самого скрипта, чтобы мы знали, что произошло (если он получил команду ok от HTTP, если он открыл сокет/порт, если он достиг вашего сервера и т. Д.). Сообщите нам о выходе, и проблемная область должна проявить себя! – user3134164

+0

Это веб-сервер apache2, работающий на Debian в VirtualBox. Ничего не отображается в браузере, когда я открываю файл php. Сценарий, который я хотел бы запускать, открывая этот сайт, регистрирует каждый доступ к этому конкретному порту (обычно 'GET/command HTTP/1.1', когда я обращаюсь к нему, запустив ip: 33000/command, что является ужасным решением); когда я запускаю этот php, в журнале ничего не отображается. В целях тестирования я отправляю telnet-сообщения на этот ip и порт с другого устройства в своей сети, и они отображаются в журнале. Я сделал этот php 0755, это правильно? – prankousky