超碰在线天天性国产视频|无码人妻玩麻豆中出一区有奶水|日日日日日日日日日日日日网96|91视频农村妇女网站|精品美女日本一区|日韩无码一区视频|精品素人AV婷婷色视频|日本精品视频手机在线|少妇高清无码一二区|激情四射综合婷婷

貨幣問答:php如何實(shí)現(xiàn)

孫朗

php如何實(shí)現(xiàn)視頻聊天?

  1,配置文件  復(fù)制代碼代碼如下:  <?php  define('PATH',dirname($_SERVER['SCRIPT_NAME'])); //聊天室目錄  define('CHAT_NAME','PHP聊天室'); //聊天室名稱  define("MESS", "mess.txt"); //聊天信息  define("PERSON", "person.txt"); //在線人名單  define("RETIME",3); //刷新時(shí)間  define("LINE",11); //公共窗口顯示的行數(shù)  define("PRLINE",5); //私聊窗口顯示的行數(shù)  define("MAX",50); //聊天室人數(shù)限制  define("MAXTIME",600000); //最大不發(fā)言時(shí)間,單位是毫秒  define("WELCOME","<font color=blue>歡迎光臨".CHAT_NAME.",請遵守聊天室規(guī)則,不要惡意刷新,不要使用不文明用語。</font>"); //歡迎語  ?>  2,公共函數(shù)文件  (1)chklogin()函數(shù)檢查用戶昵稱是否重復(fù)。參數(shù)$user是登錄用戶的昵稱。當(dāng)函數(shù)返回值為True時(shí),昵稱不可用;返回值為False時(shí),昵稱可用?! ?fù)制代碼代碼如下:  function chklogin($file,$user){  $boo = false;  if(file_exists($file)){  $userarr = file($file);  /* 判斷昵稱是否重復(fù) */  foreach($userarr as $value){ //判斷昵稱是否重復(fù)  $tmparr = explode('#',$value); //使用“#”作為分隔符來拆分字符串  if($user == $tmparr[0]){ //如果用戶數(shù)組中包含此用戶  $boo = true;  break;  }  }  }  return $boo;  }  (2)addlogin()函數(shù)將登錄的用戶昵稱寫入文件中,保存格式為:昵稱#IP#性別,參數(shù)$file是保存的文件地址,$user是用戶昵稱,$ip是登陸IP,$sex表示用戶性別。  復(fù)制代碼代碼如下:  function addlogin($file,$user,$ip,$sex){  $tmp = $user.'#'.$ip.'#'.$sex.chr(13).chr(10); //chr(13) 是一個(gè)回車,Chr(10) 是個(gè)換行符,chr(32) 是一個(gè)空格符  $fp = fopen($file,'a'); //寫入方式在文件末尾追加信息  $boo = fwrite($fp,$tmp);  fclose($fp);  return $boo;  }  (3)storeuser()函數(shù)的作用是將用戶信息存為一個(gè)數(shù)組。格式為“用戶名,用戶性別”,參數(shù)$file是用戶列表文件。代碼如下:  復(fù)制代碼代碼如下:  function storeuser($file){  $tmparr = file($file); //將文件內(nèi)容寫入數(shù)組  $userarr = array(); //創(chuàng)建數(shù)組  foreach($tmparr as $value){ //循環(huán)輸出數(shù)組內(nèi)容  $tmparr = explode('#',$value); //使用#拆分字符串  $userarr[] = $tmparr[0].','.$tmparr[2]; //將用戶名和用戶性別保存到新數(shù)組中  }  return $userarr;  }  (4)addmess()函數(shù)將發(fā)言內(nèi)容寫入文件中。參數(shù)$file是保存的文件地址,$mess是要保存的內(nèi)容  復(fù)制代碼代碼如下:  function addmess($file,$mess){  $fp = fopen($file,'a'); //以追加的形式打開文件  $boo = fwrite($fp,$mess.chr(13).chr(10)); //將信息寫入文件中  fclose($fp); //關(guān)閉文件  return boo;  }  (5)deluser()函數(shù)的作用是刪掉用戶。參數(shù)$file是保存的文件地址,$user是要?jiǎng)h除的用戶  復(fù)制代碼代碼如下:  function deluser($file,$user){  $tmparr = file($file); //將文件內(nèi)容寫入數(shù)組  $rearr = array(); //創(chuàng)建數(shù)組  foreach($tmparr as $value){ //循環(huán)輸出數(shù)組內(nèi)容  $tmp = explode('#',$value); //使用#拆分字符串  if($tmp[0] != $user){ //如果變量中的用戶名和當(dāng)前用戶不相等  $rearr[] = $value; //將該用戶信息保存到新數(shù)組中  }  }  $fp = fopen($file,'w+'); //以只寫的方式打開文件  foreach($rearr as $value){ //循環(huán)數(shù)組  fwrite($fp,$value); //寫入數(shù)組內(nèi)容  }  fclose($fp); //關(guān)閉文件  }  (6)getRows()函數(shù)的作用是返回文件的行數(shù),參數(shù)$file是文件名  復(fù)制代碼代碼如下:  function getRows($file){  if(file_exists($file)){ //如果文件存在  $fl = file($file); //將文件按行寫入數(shù)組  return count($fl); //求出數(shù)組長度并返回  }else{  return 0; //如果文件不存在,返回0

推薦
不推薦
展開
收起
靈羊峰

php路由怎么實(shí)現(xiàn)?

你這個(gè)的話 index.php  得這么寫 

<?phpheader('content-type:text/html;charset=utf-8');$actio = $_GET['actio']; $do = $_GET['do']; include $actio.'/'.$do.'.php';

推薦
不推薦
展開
收起
學(xué)藝

e^(-0.5) = 0.60653065971263 用php如何實(shí)現(xiàn)啊??

<?php    //直接輸出    echo exp(-0.5)?>

推薦
不推薦
展開
收起
易靜

php如何實(shí)現(xiàn)websocket

php有可用的websocket庫,不需要php-fpm。

目前比較成熟的有swoole(swoole.com),和workman(workman.net)

swoole是c寫的php擴(kuò)展, 效率比nodejs還要高,workman是純php實(shí)現(xiàn),兩者都號稱可以實(shí)現(xiàn)并發(fā)百萬TCP連接。

給你個(gè)例子:

這個(gè)要通過cmd運(yùn)行的 具體帶的參數(shù)有點(diǎn)忘記了<?php    error_reporting(E_ALL);    set_time_limit(0);    ob_implicit_flush();    //創(chuàng)建一個(gè)socket連接 設(shè)置參數(shù) 綁定 監(jiān)聽 并且返回    $master  = WebSocket("localhost",12345);    //標(biāo)示是否已經(jīng)進(jìn)行過握手了    $is_shaked = false;    //是否已經(jīng)關(guān)閉    $is_closed = true;    //將socket變?yōu)橐粋€(gè)可用的socket    while(true){        //如果是關(guān)閉狀態(tài)并且是沒有握手的話 則創(chuàng)建一個(gè)可用的socket(貌似第二個(gè)條件可以去除)        if($is_closed && !$is_shaked){            if(($sock = socket_accept($master)) < 0){                echo "socket_accept() failed: reason: " . socket_strerror($sock) . "\n";            }            //將關(guān)閉狀態(tài)修改為false            $is_closed = false;        }        //開始進(jìn)行數(shù)據(jù)處理        process($sock);    }    //處理請求的函數(shù)    function process($socket){        //先從獲取到全局變量        global $is_closed, $is_shaked;        //從socket中獲取數(shù)據(jù)        $buffer = socket_read($socket,2048);        //如果buffer返回值為false并且已經(jīng)握手的話 則斷開連接        if(!$buffer && $is_shaked){            disconnect($socket);        }else{            //如果沒有握手的話則握手 并且修改握手狀態(tài)            if($is_shaked == false){                $return_str = dohandshake($buffer);                $is_shaked = true;            }else{                //如果已經(jīng)握手的話則送入deal函數(shù)中進(jìn)行相應(yīng)處理                $data_str = decode($buffer);    //解析出來的從前端送來的內(nèi)容                console($data_str);                $return_str = encode(deal($socket, $data_str));                //$return_str = encode($data_str);            }            //將應(yīng)該返回的字符串寫入socket返回            socket_write($socket,$return_str,strlen($return_str));        }    }    function deal($socket, $msgObj){        $obj = json_decode($msgObj);        foreach($obj as $key=>$value){            if($key == 'close'){                disconnect($socket);                console('close success');                return 'close success';            }else if($key == 'msg'){                console($value."\n");                return $value;            }        }    }    //獲取頭部信息     function getheaders($req){        $r=$h=$o=null;        if(preg_match("/GET (.*) HTTP/"   ,$req,$match)){ $r=$match[1]; }        if(preg_match("/Host: (.*)\r\n/"  ,$req,$match)){ $h=$match[1]; }        if(preg_match("/Origin: (.*)\r\n/",$req,$match)){ $o=$match[1]; }        if(preg_match("/Sec-WebSocket-Key: (.*)\r\n/",$req,$match)){ $key=$match[1]; }        if(preg_match("/\r\n(.*?)\$/",$req,$match)){ $data=$match[1]; }        return array($r,$h,$o,$key,$data);    }    function WebSocket($address,$port){        $master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP)     or die("socket_create() failed");        socket_set_option($master, SOL_SOCKET, SO_REUSEADDR, 1)  or die("socket_option() failed");        socket_bind($master, $address, $port)                    or die("socket_bind() failed");        socket_listen($master,20)                                or die("socket_listen() failed");        echo "Server Started : ".date('Y-m-d H:i:s')."\n";        echo "Master socket  : ".$master."\n";        echo "Listening on   : ".$address." port ".$port."\n\n";        return $master;    }    function dohandshake($buffer){        list($resource,$host,$origin,$key,$data) = getheaders($buffer);        echo "resource is $resource\n";        echo "origin is $origin\n";        echo "host is $host\n";        echo "key is $key\n\n";        $response_key = base64_encode(sha1($key.'258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));        $return_str = "HTTP/1.1 101 Switching Protocols\r\n".                    "Upgrade: websocket\r\n".                    "Connection: Upgrade\r\n".                    "Sec-WebSocket-Accept: $response_key\r\n\r\n";        return $return_str;    }    function console($msg){        $msg = transToGBK($msg);        echo "$msg\n";        return $msg;    }    function decode($msg="") {        $mask = array();        $data = "";        $msg = unpack("H*",$msg);        $head = substr($msg[1],0,2);        if (hexdec($head{1}) === 8){            $data = false;        } else if (hexdec($head{1}) === 1){            $mask[] = hexdec(substr($msg[1],4,2));            $mask[] = hexdec(substr($msg[1],6,2));            $mask[] = hexdec(substr($msg[1],8,2));            $mask[] = hexdec(substr($msg[1],10,2));            $s = 12;            $e = strlen($msg[1])-2;            $n = 0;            for ($i= $s; $i<= $e; $i+= 2){                $data .= chr($mask[$n%4]^hexdec(substr($msg[1],$i,2)));                $n++;            }          }          return $data;    }    function encode($msg=""){        $frame = array();        $frame[0] = "81";        $msg .= ' is ok';        $len = strlen($msg);        $frame[1] = $len<16?"0".dechex($len):dechex($len);        $frame[2] = ord_hex($msg);        $data = implode("",$frame);        return pack("H*", $data);    }    function transToGBK($s){//UTF8->GBK        //echo $s;        return iconv("UTF-8", "GBK", $s);        return $s;    }    function ord_hex($data){        $msg = "";        $l = strlen($data);        for ($i=0; $i<$l; $i++){            //ord是返回字符串第一個(gè)字符的ascii值            //dechex把十進(jìn)制轉(zhuǎn)換為十六進(jìn)制            $msg .= dechex(ord($data{$i}));        }        return $msg;    }    function disconnect($socket){        global $is_shaked, $is_closed;        $is_shaked = false;        $is_closed = true;        socket_close($socket);    }?>

推薦
不推薦
展開
收起
妖靈之力

php如何實(shí)現(xiàn)訪問統(tǒng)計(jì)

兩種方式:

第一:使用一個(gè)文本文檔

每次讀取這個(gè)文本文檔的數(shù),然后加1,再覆蓋寫入

關(guān)鍵代碼:

<?php$txt_db = 'jsb.txt';$nums = file_get_contents($txt_db);$nums++;file_put_contents($txt_db,$nums);?>

第二:使用數(shù)據(jù)庫,設(shè)計(jì)數(shù)據(jù)表,每次更新數(shù)據(jù)庫。

個(gè)人建議:使用第一種方法。

原因:需求簡單,所以盡可能少占資源,抗壓力強(qiáng)。

推薦
不推薦
展開
收起
涼柚

PHP中怎么實(shí)現(xiàn)關(guān)鍵字搜索?

<!DOCTYPE html>body{<body><?php//設(shè)置級別錯(cuò)誤,通知類除外error_reporting('E_ALL&~E_NOTICE'); /**1---傳入頁碼,使用GET獲取**/$page=$_GET['p'];/**2---根據(jù)頁碼取出數(shù)據(jù):php->mysql處理**/$host="localhost";$username="root";$password="root";$db="db4"; //數(shù)據(jù)庫$mysql_table="person"; //數(shù)據(jù)表$table_guanjianzi="think"; //關(guān)鍵字$pageSize=10;$showPage=5; //連接數(shù)據(jù)庫,面向過程$conn=mysqli_connect($host,$username,$password);if(!$conn){echo "數(shù)據(jù)庫連接失敗";exit;}//選擇所要操作的數(shù)據(jù)庫mysqli_select_db($conn,$db);//設(shè)置數(shù)據(jù)庫編碼格式mysqli_query($conn,"SET NAMES UTF8");//編寫sql獲取分頁數(shù)據(jù) SELECT * FROM 表名 LIMIT 起始位置,顯示條數(shù)//注意:以下id,name,age,say都是字段節(jié)點(diǎn)名,person是表名,db4是數(shù)據(jù)庫名,think是指定的關(guān)鍵字.$sql = "SELECT id, name, age, sayFROM personWHERE say LIKE '%{$table_guanjianzi}%' order by id ASC LIMIT ".($page-1)*$pageSize .",{$pageSize}"; //雙引號能包單引號,反過來不行,會出錯(cuò)./// $sql = 'SELECT id, name, age, say// FROM person// WHERE say LIKE "%'think'%" order by id ASC LIMIT '.($page-1)*$pageSize .",{$pageSize}";// 節(jié)點(diǎn)名 關(guān)鍵字 節(jié)點(diǎn)名 可指定數(shù)量limit后可寫一個(gè)指定的數(shù)字//$sql="select * from $mysql_table"//$sql='select * from data where Id='.$id.' order by '.$item.' desc';//把sql語句傳送到數(shù)據(jù)庫$result=mysqli_query($conn,$sql);//將數(shù)據(jù)顯示到table中,并未table設(shè)置格式echo "<div class='content'>";echo "<table border=1 cellspacing=0 width=30% align=center>";echo "<tr><td>ID</td><td>NAME</td><td>say</td></tr>";while ($row = mysqli_fetch_assoc($result)) {echo "<tr>";echo "<td>{$row['id']}</td>";echo "<td>{$row['name']}</td>";echo "<td>{$row['say']}</td>";echo "<tr>";}echo "</table>";echo "</div>";//釋放結(jié)果mysqli_free_result($result);//獲取數(shù)據(jù)總條數(shù)$total_sql="SELECT COUNT(*)FROM $mysql_table";$total_result=mysqli_fetch_array(mysqli_query($conn,$total_sql));$total=$total_result[0];$total_pages=ceil($total/$pageSize);//關(guān)閉數(shù)據(jù)庫mysqli_close($conn);/**3---顯示數(shù)據(jù)+顯示分頁條**/$page_banner="<div class='page'>";//計(jì)算偏移量$pageoffset=($showPage-1)/2;//兩種情況下 首頁、上一頁 的顯示效果if($page>1){$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=1'>首頁</a>";$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .($page-1) . "'><上一頁</a>";}else{$page_banner .="<span class='disable'>首頁</span>";$page_banner .="<span class='disable'><上一頁</span>";}//顯示$start=1;$end=$total_pages;//當(dāng)總條數(shù)大于分頁數(shù)時(shí)if($total_pages>$showPage){if($page>$pageoffset+1){$page_banner .="...";}if($page>$pageoffset){$start=$page-$pageoffset;$end=$total_pages>$page+$pageoffset?$page+$pageoffset:$total_pages;//三段式}//最前面幾個(gè)特殊頁號的顯示。當(dāng)前指的是頁號1或者2時(shí)else{$start=1;$end=$showPage;}//最后面幾個(gè)特殊頁號的顯示,當(dāng)前顯示的是頁號7和8if($page+$pageoffset>$total_pages){$start=$start-($page+$pageoffset-$end);//注意理解這一句}}//顯示頁碼for($i=$start;$i<=$end;$i++){//當(dāng)前頁頁碼上顯示背景色if($page==$i){$page_banner .="<span class='current'>{$i}</span>";}//非當(dāng)前頁碼顯示else{$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .$i . "'>{$i}</a>"; } }if($total_pages>$showPage&&$total_pages>$page+$pageoffset){$page_banner .="..."; }//兩種情況下的尾頁、下一頁 的顯示效果if($page<$total_pages){$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=" .($page+1) . "'>下一頁></a>";$page_banner .= "<a href='".$_SERVER['PHP_SELF']."?p=$total_pages'>尾頁</a>";}else{$page_banner .="<span class='disable'>尾頁</span>";$page_banner .="<span class='disable'>下一頁></span>";}$page_banner .= "共{$total_pages}頁,";$page_banner .= "<form action='mypage.php' method='get'>";$page_banner .= " 到第<input type='text' size=2 value='1' name='p'>頁";$page_banner .= "<input type='submit' value='確定'>";$page_banner .= "</form>";$page_banner .= "</div>";echo $page_banner;?></body></html>   

推薦
不推薦
展開
收起
長風(fēng)洞

php如何實(shí)現(xiàn)數(shù)據(jù)翻倍?

代碼如下:</form> <script>$("input[name='res']").click(); </script>

推薦
不推薦
展開
收起
三盤經(jīng)

最常見的算法,用PHP如何實(shí)現(xiàn)

1、冒泡排序function bubble_sort($arr) {    $n=count($arr);    for($i=0;$i<$n-1;$i ){        for($j=$i 1;$j<$n;$j ) {            if($arr[$j]<$arr[$i]) {                $temp=$arr[$i];                $arr[$i]=$arr[$j];                $arr[$j]=$temp;            }        }    }    return $arr;}2、歸并排序function Merge(&$arr, $left, $mid, $right) {  $i = $left;  $j = $mid 1;  $k = 0;  $temp = array();  while ($i <= $mid && $j <= $right)  {    if ($arr[$i] <= $arr[$j])      $temp[$k ] = $arr[$i ];    else      $temp[$k ] = $arr[$j ];  }  while ($i <= $mid)    $temp[$k ] = $arr[$i ];  while ($j <= $right)    $temp[$k ] = $arr[$j ];  for ($i = $left, $j = 0; $i <= $right; $i , $j )    $arr[$i] = $temp[$j];} function MergeSort(&$arr, $left, $right){  if ($left < $right)  {    $mid = floor(($left $right) / 2);    MergeSort($arr, $left, $mid);    MergeSort($arr, $mid 1, $right);    Merge($arr, $left, $mid, $right);  }}3、二分查找-遞歸function bin_search($arr,$low,$high,$value) {    if($low>$high)        return false;    else {        $mid=floor(($low $high)/2);        if($value==$arr[$mid])            return $mid;        elseif($value<$arr[$mid])            return bin_search($arr,$low,$mid-1,$value);        else            return bin_search($arr,$mid 1,$high,$value);    }}4、二分查找-非遞歸function bin_search($arr,$low,$high,$value) {    while($low<=$high) {        $mid=floor(($low $high)/2);        if($value==$arr[$mid])            return $mid;        elseif($value<$arr[$mid])            $high=$mid-1;        else            $low=$mid 1;    }    return false;}5、快速排序function quick_sort($arr) {    $n=count($arr);    if($n<=1)        return $arr;    $key=$arr[0];    $left_arr=array();    $right_arr=array();    for($i=1;$i<$n;$i ) {        if($arr[$i]<=$key)            $left_arr[]=$arr[$i];        else            $right_arr[]=$arr[$i];    }    $left_arr=quick_sort($left_arr);    $right_arr=quick_sort($right_arr);    return array_merge($left_arr,array($key),$right_arr);}6、選擇排序function select_sort($arr) {    $n=count($arr);    for($i=0;$i<$n;$i ) {        $k=$i;        for($j=$i 1;$j<$n;$j ) {           if($arr[$j]<$arr[$k])               $k=$j;        }        if($k!=$i) {            $temp=$arr[$i];            $arr[$i]=$arr[$k];            $arr[$k]=$temp;        }    }    return $arr;}7、插入排序function insertSort($arr) {    $n=count($arr);    for($i=1;$i<$n;$i ) {        $tmp=$arr[$i];        $j=$i-1;        while($arr[$j]>$tmp) {            $arr[$j 1]=$arr[$j];            $arr[$j]=$tmp;            $j--;            if($j<0)                break;        }    }    return $arr;}

推薦
不推薦
展開
收起
周胤

PHP-php 怎么實(shí)現(xiàn)消息隊(duì)列

<?php /** * Memcache 消息隊(duì)列類 */ class QMC { const PREFIX = 'ASDFASDFFWQKE'; /** * 初始化mc * @staticvar string $mc * @return Memcache */ static private function mc_init() { static $mc = null; if (is_null($mc)) { $mc = new Memcache; $mc->connect('127.0.0.1', 11211); } return $mc; } /** * mc 計(jì)數(shù)器,增加計(jì)數(shù)并返回新的計(jì)數(shù) * @param string $key 計(jì)數(shù)器 * @param int $offset 計(jì)數(shù)增量,可為負(fù)數(shù).0為不改變計(jì)數(shù) * @param int $time 時(shí)間 * @return int/false 失敗是返回false,成功時(shí)返回更新計(jì)數(shù)器后的計(jì)數(shù) */ static public function set_counter( $key, $offset, $time=0 ){ $mc = self::mc_init(); $val = $mc->get($key); if( !is_numeric($val) || $val < 0 ){ $ret = $mc->set( $key, 0, $time ); if( !$ret ) return false; $val = 0; } $offset = intval( $offset ); if( $offset > 0 ){ return $mc->increment( $key, $offset ); }elseif( $offset < 0 ){ return $mc->decrement( $key, -$offset ); } return $val; } /** * 寫入隊(duì)列 * @param string $key * @param mixed $value * @return bool */ static public function input( $key, $value ){ $mc = self::mc_init(); $w_key = self::PREFIX.$key.'W'; $v_key = self::PREFIX.$key.self::set_counter($w_key, 1); return $mc->set( $v_key, $value ); } /** * 讀取隊(duì)列里的數(shù)據(jù) * @param string $key * @param int $max 最多讀取條數(shù) * @return array */ static public function output( $key, $max=100 ){ $out = array(); $mc = self::mc_init(); $r_key = self::PREFIX.$key.'R'; $w_key = self::PREFIX.$key.'W'; $r_p = self::set_counter( $r_key, 0 );//讀指針 $w_p = self::set_counter( $w_key, 0 );//寫指針 if( $r_p == 0 ) $r_p = 1; while( $w_p >= $r_p ){ if( --$max < 0 ) break; $v_key = self::PREFIX.$key.$r_p; $r_p = self::set_counter( $r_key, 1 ); $out[] = $mc->get( $v_key ); $mc->delete($v_key); } return $out; } } /** 使用方法: QMC::input($key, $value );//寫入隊(duì)列 $list = QMC::output($key);//讀取隊(duì)列 */ ?>

推薦
不推薦
展開
收起
查看更多答案
收起