<?
class email{
#    *******************************************************
#    *    email类属性的定义                                *
#    *******************************************************
function email($username,$domain,$language,$password){
$this->username=$username;
$this->domain=$domain;
$this->language=$language;
$this->password=$password;
}
#    *******************************************************
#    *    email类socket方法的定义                          *
#    *******************************************************
function email_show(){
echo $this->username."<br>".$this->domain."<br>".$this->language."<br>".$this->password."<br>";
}

function email_socket_create(){
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if($socket<0){
     echo "socket_create() failed: reason: ".socket_strerror($socket)."<br>";
}
else{
     echo "OK.<br>";
}
echo "Attempting to connect to '192.168.1.xxx' on port '8888'...";
$result=socket_connect($socket,"192.168.1.xxx","8888");
if($result<0){
     echo "socket_connect() failed.<br>Reason: ($result) ".socket_strerror($result)."<br>";
}
else{
     echo "OK.<br>";
}
echo "Attempting to certify username and password...<br>";
$in="USER ".$this->username."@".$this->domain."\n"."PASS ".$this->password."\n";
socket_write($socket,$in,strlen($in));
return $socket;
}

function email_socket_query($socket,$query){
socket_write($socket,$query,strlen($query));
}

function email_socket_read($socket){
$patterns[0]="/\r\n/";
$replacements[0]="<br>";
$out="";
while($buff=socket_read($socket,1024)){
$buff=preg_replace($patterns,$replacements,$buff);
$out.=$buff;
#preg_match_all("/[^\+]*\+OK\s*(.*)/",$out,$matches);
#print_r($matches);
#preg_replace("//",
}
return $out;
}

function email_socket_quit($socket){
socket_write($socket,"QUIT\n",strlen("QUIT\n"));
}

function email_socket_close($socket){
socket_close($socket);
}
#    *******************************************************
#    *    email类分析方法的定义                            *
#    *******************************************************
function email_analyse_socket_backdata($mod="normal"){
if($mod=="normal"){

}
}
}$user=new email("111","test.com","zh","123");
$user->email_show();
$email_socket=$user->email_socket_create();
#echo $out=$user->email_socket_read($email_socket);$query="PWD\n";
$query.="LIST\n";
$query.="CHDIR trash\n";
$user->email_socket_query($email_socket,$query);
$user->email_socket_quit($email_socket);
echo $out=$user->email_socket_read($email_socket);
#$user->email_analyse_socket_backdata("normal");
$user->email_socket_close($email_socket);
?>

解决方案 »

  1.   

    其中的$query="PWD\n";等一些大写的字母的命令是我公司自己找人编的!
      

  2.   

    唠叨老大,如果您是上海的,有空的话:64285223-19,php手册中socket的函数部分没有详细写!哎...
      

  3.   

    $sender=send($socket,$buf,0);//perl languagesend()函数将发送到socket端口上的$buf命令的结果返回!
    问题是php有同样的函数吗??
      

  4.   

    各位,我上google 查了.在php的网站上有人提了这个问题:
    是php 4.3.x版本在win32下的一个bug;
    本来socket_read()是可以根据最后\r,\n或\0的PHP_NORMAL_READ标志来判断端口是不是没有数据了!
    但在php 4.3.x的版本上不能用,只能用不带PHP_NORMAL_READ标志的socket_read函数;因此他不能判断是否读完;而我在最后用quit退出来中断socket;只有这样才能读!php很弱!到现在他的这个bug还没有解决的补丁!还有这样的问题都是老外的提出的;在google上国内根本没有这样的帖子!我有点想哭,有点想吐...