Date: 09/07/05 (PHP Community) Keywords: php I've got a class I'm writing (PHP5) that has three methods: class cpAdmin { var $hostname; // Host or IP to connect to var $port; // Port to connect on var $timeout; // Port connect timeout var $password; // Password to use var $cprw; // Read/write or Read-only const cpeol = '\r\n'; // End of Line for the remote commands var $command; // Command to send to the host var $okerror; // OK or ERROR from the host var $cperror; // ERROR message from the host var $cpresult; // Server data response (array) var $cpresultc; // "clean" Server data response (array) stripped of all special markers, line feeds, etc. var $cpcommand; // Command to send to host var $socket; // Socket connection var $answer; // data read from from the socket var $connected; // 1 or 0, is the socket connected? var $loggedin; // 1 or 0, are we logged in? var $enable; // 1 or 0, do we have enabled privs? var $gerror; // General Error (for non server communications errors) var $gerrord; // General Error Description // Connect and log in. function connect() { $this->connected = 0; $this->gerror = 0; $this->loggedin = 0; if(!$this->socket = fsockopen($this->hostname, $this->port, $errno, $errstr, $this->timeout)) { $this->gerrord = "Error connecting to the socket! Error Number: " . $errno . " Error description: " . $errstr; $this->gerror = 1; return FALSE; } else { $this->gerror = 0; // Set the stream to blocking so we can read multiple lines from it if we need to. /* http://us3.php.net/manual/en/function.stream-set-blocking.php If mode is 0, the given stream will be switched to non-blocking mode, and if 1, it will be switched to blocking mode. This affects calls like fgets() and fread() that read from the stream. In non-blocking mode an fgets() call will always return right away while in blocking mode it will wait for data to become available on the stream. */ if(!stream_set_blocking($this->socket, TRUE)) { $this->gerror = 1; $this->gerrord = 'Error setting the socket stream to blocking mode'; return FALSE; } // Read the answer from the connection and see if we connected right. We read in 128 bytes. Don't // read to EOL, it won't work with the CP servers. $this->answer = fgets($this->socket,512); if(!preg_match("/\<.+\@.+\.com>/", $this->answer)) { // If this fails you are probably not set to blocking on the stream or you did not read enough in. $this->gerror = 1; $this->gerrord = 'Data read from the stream did not look like a CP initialization string'; return FALSE; } else { $this->cperror = $this->answer; } // Log in. if($this->cprw == "rw") { $loginString = "LOGIN $this->password WRITE\r\n"; $this->enable = 1; } else { $loginString = "LOGIN $this->password\r\n"; $this->enable = 0; } if(!fputs($this->socket, $loginString.cpAdmin::cpeol)) { $this->gerror = 1; $this->gerrord = 'Error writing to socket. Not connected?'; return FALSE; } $this->answer = fgets($this->socket,64); if(preg_match("/^ERROR/",$this->answer)) { $this->gerror = 0; $this->okerror = "ERROR"; $this->connected = 1; } elseif(preg_match("/^OK/",$this->answer)) { $this->gerror = 0; $this->loggedin = 1; $this->okerror = "OK"; $this->cperror = $this->answer; $this->connected = 1; } } return TRUE; } function disconnect() { // Disconnect $this->okerror = ''; $this->cperror = ''; $this->gerror = 0; if($this->connected == 0) { $this->gerror = 1; $this->gerrord = 'Socket is not connected.'; return FALSE; } if(!fputs($this->socket, 'QUIT'.cpAdmin::cpeol)) { $this->gerror = 1; $this->gerrord = 'Error writing to socket. Not connected?'; return FALSE; } @fclose ($this->socket); $this->connected = 0; return TRUE; } function command() { $this->gerror = 0; $this->okerror = ""; $this->cperror = ""; if($this->connected == 0) { $this->gerror = 1; $this->gerrord = 'Socket is not connected.'; return FALSE; } $count = 0; $command = $this->cpcommand.'\r\n'; if(!fputs($this->socket, $command)) { $this->gerror = 1; $this->gerrord = 'Error writing to socket. Not connected?'; return FALSE; } while($answer = fgets($this->socket,128)) { echo $answer.' Here is how I call it: include "cpAdmin.inc"; $bob = new cpAdmin(); $bob->hostname = '1.2.3.4'; $bob->port = '1234'; $bob->timeout = '30'; $bob->password = 'somepassword'; $bob->cprw = 'ro'; if($bob->connect()) { echo 'Connected: '.$bob->connected.' Source: http://www.livejournal.com/community/php/342193.html
|