Bon et rapide à TELNET en PHP. Sockets ou cURL

Presque tous les exemples de l'TELNET implémentations en PHP avec des sockets (fsockopen). Cela ne fonctionne pas pour moi, car il faut une quantité inacceptable de temps (~ 60 secondes).

J'ai essayé fsockopen pour d'autres fins, et il a trouvé lent contrairement à friser.

Question #1: Pourquoi les sockets lent?

Mise à jour: j'ai trouvé nous avons besoin de définir stream_set_timeout fonction, et nous pouvons en contrôler la prise de temps d'exécution. Je suis curieux de savoir comment définir le bon délai d'attente ou de la façon de faire "cesser d'attendre" une fois que la réponse est reçue.


Je ne peux pas obtenir la même chose, mis en œuvre avec cURL. Où dois-je mettre les commandes dont j'ai besoin pour envoyer à telnet? Est CURLOPT_CUSTOMREQUEST la bonne option? Je suis en train de faire quelque chose comme ceci:

class TELNETcURL{

    public $errno;
    public $errstr;
    private $curl_handle;
    private $curl_options = array(
        CURLOPT_URL => "telnet://XXX.XXX.XXX.XXX:<port>",
        CURLOPT_TIMEOUT => 40,
        CURLOPT_RETURNTRANSFER => TRUE,
        CURLOPT_HEADER => FALSE,
        CURLOPT_PROTOCOLS => CURLPROTO_TELNET
    );

    function __construct(){
        $this->curl_handle = curl_init();
        curl_setopt_array($this->curl_handle, $this->curl_options);
    }

    public function exec_cmd($query) {
        curl_setopt($this->curl_handle, CURLOPT_CUSTOMREQUEST, $query."\r\n");
        $output = curl_exec($this->curl_handle);
        return $output;
    }

    function __destruct(){
        curl_close($this->curl_handle);
    }

}

Et puis quelque chose de similaire à ceci:

$telnet = new TELNETcURL();
print_r($telnet->exec_cmd("<TELNET commands go here>"));    

Je suis "Max durée d'exécution dépasse les 30 secondes" sur curl_exec commande.

Question #2: Quel est le problème avec le cURL mise en œuvre?

OriginalL'auteur wyxa | 2011-12-07