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
|