ホームページ >バックエンド開発 >PHPチュートリアル >ハン・シュンピン氏が作成したウェブチャットシステムを真似して、何が問題だったのかを見つけるのを手伝ってください。
そうですか
問題がどこにあるのかを理解するのを手伝っていただけますか?
よく読んでいませんでした。この文だけ: session_start();
その前にhtmlタグが出力されているので、「ヘッダーはすでに送信されました」というエラーメッセージが表示されますよね?
何が問題なのかも言わずに、どうやって始めたらいいのかみんなに尋ねました
よく見ていませんでした。この文だけ: session_start();
その前にhtmlタグが出力されているので、「ヘッダーはすでに送信されました」というエラーメッセージが表示されますよね?
何が問題なのかを言っていないので、開始方法をみんなに教えてください
堅牢なコードを書くことは非常に重要です
*******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() を使用していませんか? ?