<?
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);
?>
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);
?>
问题是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上国内根本没有这样的帖子!我有点想哭,有点想吐...