问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

php如何实现视频聊天?

发布网友 发布时间:2022-04-25 15:21

我来回答

3个回答

懂视网 时间:2022-04-29 10:20

php怎么实现聊天功能

1、在前端使用Ajax定时轮询访问php脚本,php再进行查询聊天数据进行返回给前端,最后前端将其进行渲染;

代码示例:

<html>
<head>
<title>聊天室</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="../jquery.min.js"></script>
<script>
$(function(){
 $("#post").click(function(){
 
 var content=$("#content").val();
 if(!$.trim(content)){
 alert('请填写内容');
 return false;
 }
 $("#content").val("");

 $.post("ajax.php", {content:content});});
})
 
 function getData(msg){
 if(msg == undefined)
 {
  msg = ''; 
 }
 $.post("get.php",{"msg":msg},function(data){
  //var myjson = eval("("+data+")");
  if(data){
  var chatcontent = '';
  var obj = eval('('+data+')');
  $.each(obj,function(key,val){
   chatcontent += "<div class='username'>"+val['username']+" 说:</div>";
   chatcontent += "<div class='content'>"+val['content']+"</div>";
  })
  $("#chatshow").html(chatcontent);
  }
  
  getData(); 
 }) 
 }
 
 // function getUser(msg){
 // if(msg == undefined){
 //  msg = ''; 
 // }
 // $.post("getuser.php",{"msg":msg},function(data){
 //  //var myjson = eval("("+data+")");
 //  if(data){
 //  var chatcontent = '';
 //  var obj = eval('('+data+')');
 //  $.each(obj,function(key,val){
 //   chatcontent += "<div class='username'>"+val['username']+" 说:</div>";
 //   chatcontent += "<div class='content'>"+val['content']+"</div>";
 //  })
 //  $("#chatshow").html(chatcontent);
 //  }
 //  getData(); 
 // }) 
 // }
 
 getData("one");
 
 

 // $(function(){
 // $("#userlist p").click(function(){
 //  $("#content").val("@"+$(this).text()+" "); 
 // }) 
 // })
 
 // $(function(){
 // $(document).keypress(function(e){
 //  if(e.ctrlKey && e.which == 13 || e.which == 10) { 
   
 //  var content=$("#content").val();
 //  if(!$.trim(content)){
 //  alert('请填写内容');
 //  return false;
 //  }
 //  $("#content").val(""); 
 //  $.post("ajax.php", {content:content});
 //  } 
 // })
 // //alert(event.clientX+document.body.clientWidth);
 // })
 
 /*window.onbeforeunload=function (){ 
 //return("===onbeforeunload==="); 
 if(event.clientX>document.body.clientWidth && event.clientY < 0 || event.altKey){ 
  return("你关闭了浏览器"); 
 }else{ 
  return(document.body.clientWidth); 
 } 
 } */
 
</script>
<style>
#chat{margin:0 auto;}
#chatshow{width:500px;height:400px;overflow:auto;border:1px solid #ccc;float:left;}
#userlist{width:100px;height:400px;overflow:auto;border:1px solid #ccc;float:left;margin-right:2px;}
#userlist p{color:#0F0; cursor:pointer;}
.clearboth{clear:both;}
.username{font-weight:bold;color:#00F;font-size:12px;margin-bottom:3px;margin-top:8px;}
</style>
</head>
<body>
<div id="chat">
<div id="userlist">
<div style="font-size:12px;font-weight:bold;">在线用户列表</div>
<div class="userlist">
<?php 
 // $dsn = "mysql:host=localhost;dbname=test;charset=utf8'";
 // $db = new PDO($dsn, 'root', 'root');
 $db = new PDO('mysql:dbname=test;host=127.0.0.1;charset=utf8', 'root', 'adminroot');
 $rs = $db->prepare("select * from chat where is_login = '1'");
 $rs->execute();
 while($row = $rs->fetch()){
 echo '<p>'.$row['username'].'</p>'; 
 }
?>
</div>
</div>
<div id="chatshow"></div>
</div>
<div class="clearboth"></div>
<div>
<textarea name="content" id="content" style="width:600px;height:100px"></textarea>
<input type='button' name='tj' id="post" value='发布' >
</div>
</body>
</html>
<?php
/*session_start();
$mem = new Memcache;
$mem->connect("localhost",11211);
if(isset($_POST['content'])){
 $con['username'] = $_SESSION["username"];
 $con['content'] = $_POST["content"];
 
 $data = $mem->get('chat');
 $data[] = $con;
 $mem->set("chat",$data,0,0); 
}
$mem->close();
*/
 if(isset($_POST['content'])){
 session_start();
 $filename = date("Ymd",time()).".txt";
 if(file_exists($filename)){
  $content = file_get_contents($filename);
  $data = json_decode($content,true); 
  $con['username'] = $_SESSION["username"];
  $con['content'] = $_POST["content"];
  $data[] = $con;
  $file = fopen($filename,"w");
  fwrite($file,json_encode($data));
  fclose($file); 
 }else{
  $file = fopen($filename,"w");
  $con['username'] = $_SESSION["username"];
  $con['content'] = $_POST["content"];
  $data[] = $con;
  fwrite($file,json_encode($data));
  fclose($file); 
 }
  
 }



?>
<?php 
/*require 'conn.inc';
function getData(){
 $sql="SELECT count(*) FROM `talkroom`";
 $res=mysql_query($sql);
 $count = mysql_fetch_row($res);
 
 return $count; 
}
$old = getData();

while(true){
 $new = getData();
 if($new[0]>$old[0]){
 //echo json_encode($new['data']);
 //print_r($new);
 echo '2222222222'.'<br/>';
 }
 //echo '<br />11111111111111111111111111111111111111111111111111111111111111111111';
 usleep(1000);
}
*/
/*set_time_limit(0);
$mem = new Memcache;
$mem->connect("localhost",11211);

$count = count($mem->get("chat"));
$com = true;
//$mem->delete('chat');
if($_POST['msg'] == "one"){
 exit(json_encode($mem->get("chat"))); 
}
if($_POST['msg'] == "break"){
 $com = false; 
}
$time1 = time();
while(true){
 if($com){
 $data = $mem->get("chat");
 if(count($data)>$count){
  echo json_encode($data);
  break;
 }
 usleep(300);
 }else{
 break; 
 }
}
$mem->close();*/


set_time_limit(0);
$filename = date("Ymd",time()).".txt";
if(file_exists($filename)){
 $content = file_get_contents($filename);
 $data = json_decode($content,true); 
 $count = count($data);
 // echo $count;die;
 if($_POST['msg'] == "one"){
 exit(json_encode($data)); 
 }
 
 while(true){
 
 $contents = file_get_contents($filename);
 $datas = json_decode($contents,true);
 $counts = count($datas); 
 if($counts>$count){
  echo json_encode($datas);
  break;
 }
 usleep(300);
 }
}else{
 $file = fopen($filename,"w");
 $con['username'] = "系统消息";
 $con['content'] = "欢迎来到EPGO聊天室";
 $data[] = $con;
 fwrite($file,json_encode($data));
 fclose($file);
 
 exit(json_encode($data)); 
 
}

?>

2、使用WebSocket和服务器进行长连接,来实现聊天功能。

客户端代码:

<!DOCTYPE html>
<html>
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <title>websocket聊天室</title>
 <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600" rel="stylesheet">
 <link rel="stylesheet" href="css/reset.min.css">
 <link rel="stylesheet" href="css/style.css">
 <style>
 .message img {
  float: left;
  width: 40px;
  height: 40px;
  margin-right: 12px;
  border-radius: 50%;
 }

 .you {
  margin-left: 60px;
  margin-top: -39px;
 }

 .me-header {
  float: right !important;
  margin-right: 0 !important;
 }

 .me {
  margin-right: 60px;
  margin-top: -39px;
 }

 .active-chat::-webkit-scrollbar, .left::-webkit-scrollbar {
  width: 2px;
 }
 </style>
</head>
<body>

<div>
 <div>
 <div>
  <div style="padding: 20px 29px;height: auto;">
  <div class="" style="font: 400 13.3333px Arial;font-weight: 400;">在线人数:<span id="numbers">0</span> 人
  </div>
  </div>
  <ul>
  </ul>
 </div>
 <div>
  <div><span>Tips: <span>PHP之websocket聊天室</span></span></div>
  <div class="chat active-chat" data-chat="person1"
   style="height: auto;border-width: 0px;padding: 10px;height: 483px; padding: 10px;overflow-y: auto;scrollTop: 100px">
  </div>
  <div>
  <a href="javascript:;" class="write-link attach"></a>
  <input type="text" id="input-value" onkeydown="confirm(event)"/>
  <a href="javascript:;" class="write-link smiley"></a>
  <a href="javascript:;" class="write-link send" onclick="send()"></a>
  </div>
 </div>
 </div>
</div>

<script src="js/index.js"></script>
<script>
 var uname = prompt('请输入用户名', 'user' + uuid(8, 16));
 var avatar = ['bo-jackson.jpg', 'dog.png', 'drake.jpg', 'louis-ck.jpeg', 'michael-jordan.jpg', 'thomas.jpg'];
 if (avatar[Math.round(Math.random() * 10)]) {
 var headerimg = "img/" + avatar[Math.round(Math.random() * 10)];
 } else {
 var headerimg = "img/" + avatar[0];
 }

 // 创建一个 websocket 连接
 var ws = new WebSocket("ws://127.0.0.1:1238");

 // websocket 创建成功事件
 ws.onopen = function () {
 var data = "系统消息:建立连接成功";
 console.log(data);

 };

 // websocket 接收到消息事件
 ws.onmessage = function (e) {
 var data = JSON.parse(e.data);
 switch (data.type) {
  case 'handShake':
  console.log(data.msg);
  //发送用户登录
  var user_info = {'type': 'login', 'msg': uname, 'headerimg': headerimg};
  sendMsg(user_info);
  break;
  case 'login':
  userList(data.user_list);
  systemMessage('系统消息: ' + data.msg + ' 已上线');
  break;
  case 'logout':
  userList(data.user_list);
  if (data.msg.length > 0) {
   systemMessage('系统消息: ' + data.msg + ' 已下线');
  }
  break;
  case 'user':
  messageList(data);
  break;
  case 'system':
  systemMessage();
  break;
 }
 }

 // websocket 错误事件
 ws.onerror = function () {
 var data = "系统消息 : 出错了,请退出重试.";
 alert(data);
 };

 function confirm(event) {
 var key_num = event.keyCode;
 if (13 == key_num) {
  send();
 } else {
  return false;
 }
 }

 function systemMessage(msg) {
 var html = `<div>
  <span>` + msg + `</span>
 </div>`;
 var active_chat = document.querySelector('div.active-chat');
 var oldHtml = active_chat.innerHTML;
 active_chat.innerHTML = oldHtml + html;
 active_chat.scrollTop = active_chat.scrollHeight;
 }

 function send() {
 var msg = document.querySelector("input#input-value").value;
 var reg = new RegExp("
", "g");
 msg = msg.replace(reg, "");
 sendMsg({type: "user", msg: msg});
 document.querySelector("input#input-value").value = "";
 }

 function sendMsg(msg) {
 var data = JSON.stringify(msg);
 ws.send(data);
 }

 function userList(user) {
 var html = '';
 for (var i = 0; i < user.length; i++) {
  html += `<li data-chat="person1">
   <img src="` + user[i].headerimg + `" alt=""/>
   <span>` + user[i].username + `</span>
   <span>` + user[i].login_time + `</span>
   <span style="color: green;font-size: 7px;">在线</span>
  </li>`;
 }
 document.querySelector('ul.people').innerHTML = html;
 document.querySelector('span#numbers').innerHTML = user.length;
 }

 function messageList(data) {
 if (data.from == uname) {
  var html = `<div>
   <img src="` + data.headerimg + `" alt=""/>
   <div class="bubble me">` + data.msg + `</div>
  </div>`;
 } else {
  var html = `<div>
   <img src="` + data.headerimg + `" alt=""/>
   <div class="bubble you">` + data.msg + `</div>
  </div>`;
 }
 var active_chat = document.querySelector('div.active-chat');
 var oldHtml = active_chat.innerHTML;
 active_chat.innerHTML = oldHtml + html;
 active_chat.scrollTop = active_chat.scrollHeight;
 }

 /**
 * 生产一个全局唯一ID作为用户名的默认值;
 *
 * @param len
 * @param radix
 * @returns {string}
 */
 function uuid(len, radix) {
 var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
 var uuid = [], i;
 radix = radix || chars.length;

 if (len) {
  for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
 } else {
  var r;

  uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
  uuid[14] = '4';

  for (i = 0; i < 36; i++) {
  if (!uuid[i]) {
   r = 0 | Math.random() * 16;
   uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
  }
  }
 }

 return uuid.join('');
 }
</script>
</body>
</html>

服务端代码:

<?php
/**
 * Created by PhpStorm.
 * User: 25754
 * Date: 2019/4/23
 * Time: 14:13
 */

class socketServer
{

 const LISTEN_SOCKET_NUM = 9;
 const LOG_PATH = "./log/";
 private $_ip = "127.0.0.1";
 private $_port = 1238;
 private $_socketPool = array();
 private $_master = null;

 public function __construct()
 {
 $this->initSocket();
 }

 private function initSocket()
 {
 try {
  //创建socket套接字
  $this->_master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  // 设置IP和端口重用,在重启服务器后能重新使用此端口;
  socket_set_option($this->_master, SOL_SOCKET, SO_REUSEADDR, 1);
  //绑定地址与端口
  socket_bind($this->_master, $this->_ip, $this->_port);
  //listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接,其中的能存储的请求不明的socket数目。
  socket_listen($this->_master, self::LISTEN_SOCKET_NUM);
 } catch (Exception $e) {
  $this->debug(array("code: " . $e->getCode() . ", message: " . $e->getMessage()));
 }
 //将socket保存到socket池中
 $this->_socketPool[0] = array('resource' => $this->_master);
 $pid = getmypid();
 $this->debug(array("server: {$this->_master} started,pid: {$pid}"));
 while (true) {
  try {
  $this->run();
  } catch (Exception $e) {
  $this->debug(array("code: " . $e->getCode() . ", message: " . $e->getMessage()));
  }
 }
 }

 private function run()
 {
 $write = $except = NULL;
 $sockets = array_column($this->_socketPool, 'resource');
 $read_num = socket_select($sockets, $write, $except, NULL);
 if (false === $read_num) {
  $this->debug(array('socket_select_error', $err_code = socket_last_error(), socket_strerror($err_code)));
  return;
 }
 foreach ($sockets as $socket) {
  if ($socket == $this->_master) {
  $client = socket_accept($this->_master);
  if ($client === false) {
   $this->debug(['socket_accept_error', $err_code = socket_last_error(), socket_strerror($err_code)]);
   continue;
  }
  //连接
  $this->connection($client);
  } else {
  //接受数据
  $bytes = @socket_recv($socket, $buffer, 2048, 0);
  if ($bytes == 0) {
   $recv_msg = $this->disconnection($socket);
  } else {
   if ($this->_socketPool[(int)$socket]['handShake'] == false) {
   $this->handShake($socket, $buffer);
   continue;
   } else {
   $recv_msg = $this->parse($buffer);
   }
  }
  $msg = $this->doEvents($socket, $recv_msg);
  echo($msg);
  socket_getpeername ( $socket , $address ,$port );
  $this->debug(array(
   'send_success',
   json_encode($recv_msg),
   $address,
   $port
  ));
  $this->broadcast($msg);
  }
 }
 }

 /**
 * 数据广播
 * @param $data
 */
 private function broadcast($data)
 {
 foreach ($this->_socketPool as $socket) {
  if ($socket['resource'] == $this->_master) {
  continue;
  }
  socket_write($socket['resource'], $data, strlen($data));
 }
 }

 /**
 * 业务处理
 * @param $socket
 * @param $recv_msg
 * @return string
 */
 private function doEvents($socket, $recv_msg)
 {
 //联系我
 }

 /**
 * socket握手
 * @param $socket
 * @param $buffer
 * @return bool
 */
 public function handShake($socket, $buffer)
 {
 $acceptKey = $this->encry($buffer);
 $upgrade = "HTTP/1.1 101 Switching Protocols
" .
  "Upgrade: websocket
" .
  "Connection: Upgrade
" .
  "Sec-WebSocket-Accept: " . $acceptKey . "

";

 // 写入socket
 socket_write($socket, $upgrade, strlen($upgrade));
 // 标记握手已经成功,下次接受数据采用数据帧格式
 $this->_socketPool[(int)$socket]['handShake'] = true;
 socket_getpeername ( $socket , $address ,$port );
 $this->debug(array(
  'hand_shake_success',
  $socket,
  $address,
  $port
 ));
 //发送消息通知客户端握手成功
 $msg = array('type' => 'handShake', 'msg' => '握手成功');
 $msg = $this->frame(json_encode($msg));
 socket_write($socket, $msg, strlen($msg));
 return true;
 }

 /**
 * 帧数据封装
 * @param $msg
 * @return string
 */
 private function frame($msg)
 {
 $frame = [];
 $frame[0] = '81';
 $len = strlen($msg);
 if ($len < 126) {
  $frame[1] = $len < 16 ? '0' . dechex($len) : dechex($len);
 } else if ($len < 65025) {
  $s = dechex($len);
  $frame[1] = '7e' . str_repeat('0', 4 - strlen($s)) . $s;
 } else {
  $s = dechex($len);
  $frame[1] = '7f' . str_repeat('0', 16 - strlen($s)) . $s;
 }
 $data = '';
 $l = strlen($msg);
 for ($i = 0; $i < $l; $i++) {
  $data .= dechex(ord($msg{$i}));
 }
 $frame[2] = $data;
 $data = implode('', $frame);
 return pack("H*", $data);
 }

 /**
 * 接受数据解析
 * @param $buffer
 * @return mixed
 */
 private function parse($buffer)
 {
 $decoded = '';
 $len = ord($buffer[1]) & 127;
 if ($len === 126) {
  $masks = substr($buffer, 4, 4);
  $data = substr($buffer, 8);
 } else if ($len === 127) {
  $masks = substr($buffer, 10, 4);
  $data = substr($buffer, 14);
 } else {
  $masks = substr($buffer, 2, 4);
  $data = substr($buffer, 6);
 }
 for ($index = 0; $index < strlen($data); $index++) {
  $decoded .= $data[$index] ^ $masks[$index % 4];
 }
 return json_decode($decoded, true);
 }

 // 提取 Sec-WebSocket-Key 信息
 private function getKey($req)
 {
 $key = null;
 if (preg_match("/Sec-WebSocket-Key: (.*)
/", $req, $match)) {
  $key = $match[1];
 }
 return $key;
 }

 //加密 Sec-WebSocket-Key
 private function encry($req)
 {
 $key = $this->getKey($req);
 return base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
 }

 /**
 * 连接socket
 * @param $client
 */
 public function connection($client)
 {
 socket_getpeername ( $client , $address ,$port );
 $info = array(
  'resource' => $client,
  'userInfo' => '',
  'handShake' => false,
  'ip' => $address,
  'port' => $port,
 );
 $this->_socketPool[(int)$client] = $info;
 $this->debug(array_merge(['socket_connect'], $info));
 }

 /**
 * 断开连接
 * @param $socket
 * @return array
 */
 public function disconnection($socket)
 {
 $recv_msg = array(
  'type' => 'logout',
  'msg' => @$this->_socketPool[(int)$socket]['username'],
 );
 unset($this->_socketPool[(int)$socket]);
 return $recv_msg;
 }

 /**
 * 日志
 * @param array $info
 */
 private function debug(array $info)
 {
 $time = date('Y-m-d H:i:s');
 array_unshift($info, $time);
 $info = array_map('json_encode', $info);
 file_put_contents(self::LOG_PATH . 'websocket_debug.log', implode(' | ', $info) . "
", FILE_APPEND);
 }
}

new socketServer();

推荐教程:《PHP教程》

热心网友 时间:2022-04-29 07:28

  1,配置文件
  复制代码代码如下:
  <?php
  define('PATH',dirname($_SERVER['SCRIPT_NAME'])); //聊天室目录
  define('CHAT_NAME','PHP聊天室'); //聊天室名称
  define("MESS", "mess.txt"); //聊天信息
  define("PERSON", "person.txt"); //在线人名单
  define("RETIME",3); //刷新时间
  define("LINE",11); //公共窗口显示的行数
  define("PRLINE",5); //私聊窗口显示的行数
  define("MAX",50); //聊天室人数*
  define("MAXTIME",600000); //最大不发言时间,单位是毫秒
  define("WELCOME","<font color=blue>欢迎光临".CHAT_NAME.",请遵守聊天室规则,不要恶意刷新,不要使用不文明用语。</font>"); //欢迎语
  ?>
  2,公共函数文件
  (1)chklogin()函数检查用户昵称是否重复。参数$user是登录用户的昵称。当函数返回值为True时,昵称不可用;返回值为False时,昵称可用。
  复制代码代码如下:
  function chklogin($file,$user){
  $boo = false;
  if(file_exists($file)){
  $userarr = file($file);
  /* 判断昵称是否重复 */
  foreach($userarr as $value){ //判断昵称是否重复
  $tmparr = explode('#',$value); //使用“#”作为分隔符来拆分字符串
  if($user == $tmparr[0]){ //如果用户数组中包含此用户
  $boo = true;
  break;
  }
  }
  }
  return $boo;
  }
  (2)addlogin()函数将登录的用户昵称写入文件中,保存格式为:昵称#IP#性别,参数$file是保存的文件地址,$user是用户昵称,$ip是登陆IP,$sex表示用户性别。
  复制代码代码如下:
  function addlogin($file,$user,$ip,$sex){
  $tmp = $user.'#'.$ip.'#'.$sex.chr(13).chr(10); //chr(13) 是一个回车,Chr(10) 是个换行符,chr(32) 是一个空格符
  $fp = fopen($file,'a'); //写入方式在文件末尾追加信息
  $boo = fwrite($fp,$tmp);
  fclose($fp);
  return $boo;
  }
  (3)storeuser()函数的作用是将用户信息存为一个数组。格式为“用户名,用户性别”,参数$file是用户列表文件。代码如下:
  复制代码代码如下:
  function storeuser($file){
  $tmparr = file($file); //将文件内容写入数组
  $userarr = array(); //创建数组
  foreach($tmparr as $value){ //循环输出数组内容
  $tmparr = explode('#',$value); //使用#拆分字符串
  $userarr[] = $tmparr[0].','.$tmparr[2]; //将用户名和用户性别保存到新数组中
  }
  return $userarr;
  }
  (4)addmess()函数将发言内容写入文件中。参数$file是保存的文件地址,$mess是要保存的内容
  复制代码代码如下:
  function addmess($file,$mess){
  $fp = fopen($file,'a'); //以追加的形式打开文件
  $boo = fwrite($fp,$mess.chr(13).chr(10)); //将信息写入文件中
  fclose($fp); //关闭文件
  return boo;
  }
  (5)deluser()函数的作用是删掉用户。参数$file是保存的文件地址,$user是要删除的用户
  复制代码代码如下:
  function deluser($file,$user){
  $tmparr = file($file); //将文件内容写入数组
  $rearr = array(); //创建数组
  foreach($tmparr as $value){ //循环输出数组内容
  $tmp = explode('#',$value); //使用#拆分字符串
  if($tmp[0] != $user){ //如果变量中的用户名和当前用户不相等
  $rearr[] = $value; //将该用户信息保存到新数组中
  }
  }
  $fp = fopen($file,'w+'); //以只写的方式打开文件
  foreach($rearr as $value){ //循环数组
  fwrite($fp,$value); //写入数组内容
  }
  fclose($fp); //关闭文件
  }
  (6)getRows()函数的作用是返回文件的行数,参数$file是文件名
  复制代码代码如下:
  function getRows($file){
  if(file_exists($file)){ //如果文件存在
  $fl = file($file); //将文件按行写入数组
  return count($fl); //求出数组长度并返回
  }else{
  return 0; //如果文件不存在,返回0

热心网友 时间:2022-04-29 08:46

你可以用workerman框架来做。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
面试成绩什么时候能查出来 问一下这是什么花,有毒吗? ...的小球,以另一端O为圆心,使小球在竖直平面内做半径为R 的圆周运 ... ...另一端固定在光滑的水平轴上,使小球在竖直平面内做圆周运动... ...的小球,以另一端O为圆心,使小球在竖直面内做半径为 R的圆周运动... ...的小球,以另一端O为圆心,使得小球在竖直平面内做圆周运动,小球... 账号已重置是什么意思? 跳远需要练什么 我的衣服是白色纯棉的我想把他染成别的颜色该怎么办啊 白色布料有哪些种类 甜菜根炖鸡汤怎样做好吃? 如何搬运大文件? 支付宝一定要实名注册吗?原来不用啊 自媒体能直接搬运政府文件吗 微信的语音聊天视频聊天是怎么做的,java后端应该怎么做 怎么一视频聊天就没打字聊天的时候那么好玩了。我也不一样了。视频聊天我就不像聊天那样大胆跟 投入了。 只用邮箱怎么注册支付宝不实名?只要能登录就可以 网上有没有成熟的Web版视频通话产品和框架,收费的也可以! 支付宝可以不验证实名吗?可以不绑定银行卡进行交易吗? 电脑怎么连手机上的网络? 软件视频会议的架构是什么? 请问支付宝可以只开通快捷支付,不进行实名认证吗? 使用asp.net 搭建视频聊天室 请问一下,电脑网络可以连接手机网络吗? 开通支付宝后要实名认证才能用吗,不认证就不能用吗? 为什么手机放正视频聊天,在框架里看到自己是歪的 请问一下,笔记本电脑可以连接手机网络进行上网吗?请帮帮我。感谢... flutter语言框架如何快速搭建视频通话场景? 用邮箱注册支付本支付宝怎么跳过实名? 有好用的语音视频框架吗?能用来快速开发视频聊天系统的? 办公室铁皮文件柜搬运时需要注意什么 甜菜根怎么吃好?生吃可以天天吃吗? 如何搬运文件??? pdf怎么查字数啊! 求大神,移动硬盘文件搬运速度只有2,3兆每秒,什么情况? c盘中哪些文件、软件可以转移到其他盘中,如何转移,最好说具体点,我的是windows10的系统 和快盘一样功能的还有什么软件 360系统盘瘦身文件搬运怎么搬运 360安全卫士文件搬运途中关闭电脑会怎样 pdf格式怎么打开手机怎么查看PDF格式文件 美团众包不取餐一直挂着 美团众包我是骑手今天下午我自己买了一个外卖我这个订单被我自己抢了对我的账号没有影响吧?_百度问一问 懒人面包最简单做法 懒人小面包的做法,懒人小面包怎么做好吃,懒人 懒人面包怎么做 真正懒人面包的做法,不用揉面更不用揉出膜,新手也能一次做成功 惠普打印机如果接电脑 惠普打印机如果连接电脑 青石板地砖怎么样?生产厂家推荐举例 懒人免揉黑麦面包的做法步骤图,怎么做好吃
  • 焦点

最新推荐

猜你喜欢

热门推荐