PHP中是否能够记录用户Socket

willwill 2000-09-12 04:06:00
请教各位高手:
有的站点,用户调用一个php文件向其他用户立即在线发送信息(收到信息的用户弹出对话框),是否是由服务器记下这些用户的Socket信息,而向他们发送的?
如果不是的话,是怎么实现的呢?
希望众高手回答,切切!

...全文
197 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
95210关注!
leejd 2001-03-12
  • 打赏
  • 举报
回复
用js做定时刷新,网页在载入时做检测,有没有消息要发送
SimonDW 2001-03-11
  • 打赏
  • 举报
回复
function sendmail()
{
document.reload();
}
settimeout(sendmail,5)
好像是这样
peacock 2000-12-02
  • 打赏
  • 举报
回复
也谈用Socket发送电子邮件(转载)

在phpuser.com的文章中limodou大哥发表了文章《用Socket发送电子邮件》。在smtp协议 中邮件的结束是以 . 结束,但是要和内容不在同一行,否则,邮件服务器认为邮件还没有 结束,服务器还在等待数据的上传!下面请看outlook发的邮件内容:

>>> smileyou@netease.com
<<< smileyou@localhost

X-Server: Advanced Direct Remailer (www.elcomsoft.com)
Message-ID: <002d01c04b32$60196960$0300a8c0@zyh>
From: "zyh" <smileyou@netease.com>
To: <smileyou@localhost>
Subject: Fw: aa
Date: Sat, 11 Nov 2000 00:22:09 +0800
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="----=_NextPart_000_002A_01C04B75.6E2BE080"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200

This is a multi-part message in MIME format.

------=_NextPart_000_002A_01C04B75.6E2BE080
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64

DQphYQ0K

------=_NextPart_000_002A_01C04B75.6E2BE080
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi
MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w
MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPiZuYnNwOzwvRElWPg0KPERJVj48Rk9OVCBzaXpl
PTI+YWE8L0ZPTlQ+PC9ESVY+PC9CT0RZPjwvSFRNTD4NCg==

------=_NextPart_000_002A_01C04B75.6E2BE080--

.


大家可以看到最后是换行+.+换行结束的!而且内容使用了base64编码,在limodou的文章 中,没有将内容编码,
所以,有的朋友就无法看到信件的内容!我们将内容解码,得到的内容是"aa"这两个字母 。那我们怎么让
上传的内容最后换行+.+换行呢?
其实很简单,fputs上去的数据直接换行就可以了:请看下面的例子:

<?

$smtpserver="localhost" ;
$fp = fsockopen($smtpserver, 25, &$errno, &$errstr, 10);

echo ($hostreply=fgets($fp,128));

$server_name=strstr(ltrim($hostreply)," ") ;
$server_name=substr(ltrim($server_name),0,strlen ($server_name )-12) ;
echo "<br>server_name:".$server_name."<br>" ;
fputs($fp,"HELO $server_name n");

$hostreply=fgets($fp,128);
fputs($fp,"MAIL FROM: smileyou@netease.comn") ;
echo($hostreply=fgets($fp,128));
echo "<br>--------------------------<br>";
fputs($fp,"RCPT TO: smileyou@sina.com.cnn") ;
echo($hostreply=fgets($fp,128)) ;




fputs($fp,"DATAn") ;
echo($hostreply=fgets($fp,128)) ;
echo "<br>--------------------------<br>n";
$mail_from="smileyou@netease.com";
$mail_to="smileyou@sina.com";
$subject="test";
$mail_from="From: <$mail_from>";
$mail_to="TO: <$mail_to>";
$subject="Subject: $subject";
$message=base64_encode("this is a test leter");
fputs($fp,$mail_from."
") ;
fputs ($fp ,$mail_to."
");
fputs ($fp,$subject."
");
fputs ($fp,$message."

");
fputs ($fp,".");
fputs ($fp,"
");
echo($hostreply=fgets($fp,128));
fputs($fp,"QUIT") ;

fclose($fp) ;
?>

大家看到,fputs邮件内容是直接换行的,而不是用php中"n"或者"r"的,可是一部分却以 "n"换行的,
我没法搞懂那部分,哪位明白的话告诉小弟一声。这个邮件就这样发出去了。


好,下面让我们看一个带附件的邮件的发送情况。下面是附件为line.gif,主题为“附件 ”,内容为“附件”
的邮件发送到smtp服务器的数据内容:

>>> smileyou@netease.com
<<< smileyou@netease.com

X-Server: Advanced Direct Remailer (www.elcomsoft.com)
Message-ID: <000901c04b3c$b7aa82e0$0300a8c0@zyh>
From: "zyh" <smileyou@netease.com>
To: <smileyou@netease.com>
Subject: =?gb2312?B?uL28/g==?=
Date: Sat, 11 Nov 2000 01:36:11 +0800
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0005_01C04B7F.C5A30960"
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 5.00.2615.200
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2615.200

This is a multi-part message in MIME format.

------=_NextPart_000_0005_01C04B7F.C5A30960
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_0006_01C04B7F.C5AC3120"


------=_NextPart_001_0006_01C04B7F.C5AC3120
Content-Type: text/plain;
charset="gb2312"
Content-Transfer-Encoding: base64

uL28/g0K

------=_NextPart_001_0006_01C04B7F.C5AC3120
Content-Type: text/html;
charset="gb2312"
Content-Transfer-Encoding: base64

PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwv
L0VOIj4NCjxIVE1MPjxIRUFEPg0KPE1FVEEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PWdi
MjMxMiIgaHR0cC1lcXVpdj1Db250ZW50LVR5cGU+DQo8TUVUQSBjb250ZW50PSJNU0hUTUwgNS4w
MC4yNjE0LjM1MDAiIG5hbWU9R0VORVJBVE9SPg0KPFNUWUxFPjwvU1RZTEU+DQo8L0hFQUQ+DQo8
Qk9EWSBiZ0NvbG9yPSNmZmZmZmY+DQo8RElWPjxGT05UIHNpemU9Mj64vbz+PC9GT05UPjwvRElW
PjwvQk9EWT48L0hUTUw+DQo=

------=_NextPart_001_0006_01C04B7F.C5AC3120--

------=_NextPart_000_0005_01C04B7F.C5A30960
Content-Type: image/gif;
name="line.gif"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="line.gif"

R0lGODlhugEHAJEAAP9/D////wAAAAAAACwAAAAAugEHAEACfIyPqcvtD6OctNqLs968+w+GDQAY
pFkGp5qubgujMju/dUznto7vfg+8CXnDXzFITBqVyKWzCT1KmdNnNUrNWnOirvcLDovH5LL5jE6r
1+y2+w2Py+f0uv2Ol2/3WP71r9UnCOgXSDhomFi4iMh4+KjYiJRHWWl5iZnJUAAAOw==

------=_NextPart_000_0005_01C04B7F.C5A30960--

.

大家可以看到subject部分变化了,还有变化的有X-Priority: 3上面的Content-Type变了 ,
在phpuser的站长hunte的文章《用PHP发送有附件的电子邮件》中了解到以下的内容:
这个头告诉邮件程序电子邮件是由一个以上的部分组成的。不含附件的邮件只有一个部分 :消息本身。
带附件的电子通常至少由两部分组成:消息和附件。这样,带两个附件的邮件由三部分组 成:消息,第一
个附件和第二个附件。

带附件的电子邮件的不同部分之间用分界线来分隔。分界线在Content-type头中定义。邮 件的每个新部分
以两个连字号(--)和分界线开始。最后一个分界线后也有两个连字号,表示这个邮件中 没有其它的部分了。

在每个分界线后有一些行,用来告诉邮件程序这个部分的内容的类型。比如,看看上面例 子中第一个分界
线后面的两行--以Content-type: text/plain开头的行。这些行说明后面的部分是gb2312 字符集的纯文本。跟在第二
个分界线后的行告诉邮件程序现在的部分是一个HTML文件,它的名字是"attachment.html" 。

Content-disposition这持告诉邮件程序如果可能就以内嵌的方式显示附件。现在新的邮件 程序会在消息后
显示HTML的内容。如果Content-disposition被设为attachment,那么邮件程序就不会显示 HTML文件的内容
,而是显示一个连接到文件的图标(或其它的类似的东西)。收件人要看附件的内容,必 须点击这个图标。
一般情况下,如果附件是一些文本(包含HTML),Content-disposition会被设为inline, 这是因为
现在大部分邮件程序能够不借助其它浏览器而直接显示附件(文本)的内容。如果附件不 是文本(比如
图片或其它类似的内容),Content-disposition就设为attachment。


邮件的内容的content-type是text/html,图片的content-type是image/gif,而且多用了 base64编码。现在我们将
其改进一下,



<?
if ($submit){
/*--------------------
#打开附件、读取内容、并编码、分割
$fpfile = fopen($file, "r");
$read = fread($fpfile, filesize($file));
$read = base64_encode($read);
$read = chunk_split($read);
----------------------*/


/*-----------------
#获得文件的类型
if ($file_type){
$mimeType = $file_type;
}
else {$mimeType = "application/unknown";}
--------------------*/
icb 2000-11-27
  • 打赏
  • 举报
回复
我也想知道!!因为我正在设计一个聊天室程序。如果你也知道其他的有关资料请一并
通知我,我的电子邮件:intercoolboy@sina.com,谢谢!!!!
peacock 2000-10-28
  • 打赏
  • 举报
回复
to:ppc207

请问用javascript这么实现?谢谢!
ppc207 2000-10-10
  • 打赏
  • 举报
回复
用php是不能实现的,必须使用javascript才能实现,或者是客户端软件。因为php所做的页面只有在登陆时才瞬间建立socket,当页面下载完毕时socket就断了。所以就是记下客户的socket
也是没用的。

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧