ホームページ >バックエンド開発 >PHPチュートリアル >ハン・シュンピン氏が作成したウェブチャットシステムを真似して、何が問題だったのかを見つけるのを手伝ってください。

ハン・シュンピン氏が作成したウェブチャットシステムを真似して、何が問題だったのかを見つけるのを手伝ってください。

WBOY
WBOYオリジナル
2016-06-23 13:34:281021ブラウズ

そうですか
問題がどこにあるのかを理解するのを手伝っていただけますか?


ディスカッションへの返信 (解決策)

よく読んでいませんでした。この文だけ: session_start();
その前にhtmlタグが出力されているので、「ヘッダーはすでに送信されました」というエラーメッセージが表示されますよね?

何が問題なのかも言わずに、どうやって始めたらいいのかみんなに尋ねました

よく見ていませんでした。この文だけ: session_start();
その前にhtmlタグが出力されているので、「ヘッダーはすでに送信されました」というエラーメッセージが表示されますよね?

何が問題なのかを言っていないので、開始方法をみんなに教えてください


rreee
主な問題は、コメント 1 にあるものは応答できますが、ウィンドウに問題があることです。コメント 2 のアラートは応答できません。神様、助けてください。

堅牢なコードを書くことは非常に重要です

*******chatRoom.php******<html><head><?php//接受open传递的用户名 $username=$_GET['username']; $username=trim($username); session_start(); $loginuser=$_SESSION['loginuser'];?><meta http-equiv="content-type" content="text/html;charset=utf-8"/><script type="text/javascript" src="my.js"></script><script type="text/javascript">  window.resizeTo(800,700);  window.setInterval("getMessage()",3000);   function getMessage(){    //创建一个xmlHttpRequest对象    var myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){			 var url="getMessageController.php";	 var data="getter=<?php echo $loginuser; ?>&sender=<?php echo $username; ?>";	      myXmlHttpRequest.open("post",url,true);	 myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     myXmlHttpRequest.onreadystatechange=function(){	  if(myXmlHttpRequest.readyState==4){	    if(myXmlHttpRequest.status==200){		  var mesRes=myXmlHttpRequest.responseXML;		  var cons=mesRes.getElementsByTagName("con");		  var sendtimes=mesRes.getElementsByTagName("sendtime");		  if(cons.length!=0){		    for(var i=0;i<cons.length;i++){			 $("mycons").value+="<?php echo $username;?>说:"+cons[i].childNodes[0].nodeValue+"___"+sendtimes[i].childNodes[0].nodeValue;			             			}		  }		}	  }	 }     myXmlHttpRequest.send(data);	}  }  function sendMessage(){  //创建一个xmlHttpRequest对象    var myXmlHttpRequest=getXmlHttpObject();	if(myXmlHttpRequest){			 var url="sendMessageController.php";	 var data="con="+$('con').value+"&getter=<?php echo $username; ?>&sender=<?php echo $loginuser; ?>";	      myXmlHttpRequest.open("post",url,true);	 myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     myXmlHttpRequest.onreadystatechange=function(){	   if(myXmlHttpRequest.readyState==4){	     if(myXmlHttpRequest.status==200){		   //这里是返回信息,暂不需要		   		 }	   	   }	 	  }       myXmlHttpRequest.send(data);	}  }</script></head><body><center><h1>网页聊天室(<font color="blue"><?php echo $loginuser; ?></font>正在和<font color="red"><?php echo $username; ?></font>聊天)</h1><textarea cols="60" rows="20" id="mycons"></textarea><br/><input type="text" style="width:300px" id="con"/><input type="button" value="发送" onclick="sendMessage()"/></center></body></html>*********getMessageController.php********<?phprequire_once 'MessageService.class.php';header("content-type:text/xml;charset=utf-8");header("Cache-Control:no-cache"): $getter=$_POST['getter']; $sender=$_POST['sender'];  $messageService=new MessageService(); $messageList=$messageService->getMessage($getter,$sender);  echo $messageList; ?>*********MessageService.class.php********<?phprequire_once 'SqlHelper.class.php';class MessageService{ function addMessage($sender,$getter,$con){$sql="insert into messages (sender,getter,content,sendtime) values ('$sender','$getter','$con',now())";$sqlHelper=new SqlHelper();return $sqlHelper->execute_dml($sql);} function getMessage($getter,$sender){     $sql="select * from messages where getter='$getter' and sender='$sender' and isGet=0";        $sqlHelper=new SqlHelper();	$array=$sqlHelper->execute_dql2($sql);    	$messageInfo="<meses>";    for($i=0;$i<count($array);$i++){	  $row=$array[$i];      $messageInfo.="<mesid>{$row['id']}</mesid><sender>{$row['sender']}</sender><getter>{$row['getter']}</getter><con>{$row['content']}</con><sendtime>{$row['sendtime']}</sendtime>";	}     $messageInfo.="</meses>";	 $sqlHelper->close_connect();     return $messageInfo; }}?>

これはおそらく見た目だけで、パフォーマンスは比較的悪いです。
チャット ルーム、websocket または Comet を使用してください。
次に、データベース、Redis、またはファイル ストレージを使用する必要はありません

堅牢なコードを書くことが非常に重要です

 function getMessage(){    //创建一个xmlHttpRequest对象    var myXmlHttpRequest=getXmlHttpObject();    if(myXmlHttpRequest){              var url="getMessageController.php";     var data="getter=<?php echo $loginuser; ?>&sender=<?php echo $username; ?>";           myXmlHttpRequest.open("post",url,true);     myXmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");     myXmlHttpRequest.onreadystatechange=function(){      if(myXmlHttpRequest.readyState==4){        if(myXmlHttpRequest.status==200){          //注释1 window.alert("aaa");          var mesRes=myXmlHttpRequest.responseXML;          var cons=mesRes.getElementsByTagName("con");          var sendtimes=mesRes.getElementsByTagName("sendtime");          //注释2 window.alert("bbb");          if(cons.length!=0){            for(var i=0;i<cons.length;i++){             $("mycons").value+="<?php echo $username;?>说:"+cons[i].childNodes[0].nodeValue+"___"+sendtimes[i].childNodes[0].nodeValue;                                       }          }        }      }     }     myXmlHttpRequest.send(data);    }  }

ありがとう、解決しました。うっかりすると、class.php の 2 番目の header() のセミコロンがコロンとして書かれていて、めまいがしました。

これはおそらく見た目だけで、パフォーマンスは比較的悪いです。
チャット ルームは WebSocket または Comet を使用します
次に、データベース、Redis、ファイル ストレージを使用する必要はありません

ありがとうございます。

header("Cache-Control:no-cache"):
この種のエラーのプロンプトは明らかです

ありがとう、それは私の不注意のせいであることがわかりました。 MessageService.class.php ()内のセミコロンがコロンになっていてめまいがする!

私のエラーはあなたのエラーと同じですが、MessageService.class.php は header() を使用していませんか? ?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。