php 向端口发送命令(通过 tcp)
php send command to port (via tcp)
我正在寻找 php 脚本来通过 tcp 将命令触发到特定端口。该脚本在我想将这些命令发送到的同一台机器上 运行,因此 ip 是 127.0.0.1 或 localhost。
命令将定义为 url 后面写的任何内容。例如,trigger.php?screen会发送命令'screen',trigger.php?sound会发送命令'sound'等
这可能吗?我没有太多编码知识。
简而言之:当我打开 127.0.0.1/trigger.php?sound 时,我希望通过 tcp 将命令声音发送到 127.0.0.1 端口 33000。如果用 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";
?>
(注意我没有 运行 它或进行语法检查,但看起来它可能是你想要的)
所以我做了一些关于通过 php 发送 telnet 命令的研究,并找到了一个类似于我需要的脚本。我已经修改它并添加了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);
?>
我正在寻找 php 脚本来通过 tcp 将命令触发到特定端口。该脚本在我想将这些命令发送到的同一台机器上 运行,因此 ip 是 127.0.0.1 或 localhost。
命令将定义为 url 后面写的任何内容。例如,trigger.php?screen会发送命令'screen',trigger.php?sound会发送命令'sound'等
这可能吗?我没有太多编码知识。
简而言之:当我打开 127.0.0.1/trigger.php?sound 时,我希望通过 tcp 将命令声音发送到 127.0.0.1 端口 33000。如果用 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";
?>
(注意我没有 运行 它或进行语法检查,但看起来它可能是你想要的)
所以我做了一些关于通过 php 发送 telnet 命令的研究,并找到了一个类似于我需要的脚本。我已经修改它并添加了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);
?>