fsockopen эквивалентный Perl - PullRequest
1 голос
/ 31 марта 2012

Я только что столкнулся с проблемой с моим провайдером, который, похоже, отказывается разрешить мне использовать fsockopen, сообщая мне об угрозе безопасности, и что мне нужно найти альтернативу, предлагающую использовать perl.

У кого-нибудь есть альтернатива fsockopen, возможно использующая perl для скрипта ниже?

<?php

// fetches server information from minequery.
function fetch_server_info($ip, $port){
    $socket = fsockopen($ip, $port, $errno, $errstr, 0.5);

    if($socket === false){
        return false;   
    }

    fwrite($socket, "QUERY_JSON\n");

    $responce = stream_get_contents($socket);

    return json_decode($responce, true);
}

?>

1 Ответ

1 голос
/ 01 июля 2012

Звучит так, будто вы хотите получить ответ от сервера на $responce без использования каких-либо функций сокетов в PHP.Если ваш хостинг-провайдер разрешил shell_exec (), вы можете запустить внешнюю программу для этого.Вот пример использования perl:

<?php

// fetches server information from minequery.
function fetch_server_info($ip, $port){
    $script = <<<'EOF'
use warnings;
use strict;
use IO::Socket;

die if $#ARGV+1 != 2;
my $ip = $ARGV[0];
my $port = $ARGV[1];
my $sock = IO::Socket::INET->new(PeerAddr => "$ip:$port") or die;
print $sock "QUERY_JSON\n" or die;
local $/ = undef;
print <$sock>;
EOF;

    $responce = shell_exec("echo '$script' | perl - $ip $port");

    if ($responce == NULL)
        return false;

    return json_decode($responce, true);
}

$>

Или вы можете использовать netcat, если они есть:

<?php

// fetches server information from minequery.
function fetch_server_info($ip, $port){
    $responce = shell_exec("echo QUERY_JSON| nc $ip $port");

    if ($responce == NULL)
        return false;

    return json_decode($responce, true);
}

$>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...