$xml = simplexml_load_file($xmlfile);
$k = 0;
foreach ($xml->match as $item){
$matchTime = $item->attributes()['matchTime'];//<match matchTime="" ...></match>节点属性
if(DateDiff('h',$matchTime,$curTime) >= 3) {//数据筛选条件
$delArr[] = $k;
}
$k++;
}
if(!empty($delArr)){//循环删除 因删除后match主键的变动 依次删除
foreach ($delArr as $d=>$v) {
unset($xml->match[$v-$d]);
}
}
$xml->asXML($xmlfile);
...
使用curl_multi_exec并发请求外部接口
有时候在一个PHP方法中要多次调用外部的接口,为了优化代码,提高效率,我们不妨使用curl_multi_exec并发处理多个请求,这样可以明显地提高获取响应数据的速度,减少程序执行的时间,下面是一个实际运行的例子。
<?php
/**
* 使用curl并行发送多个请求获取数据
* @param array $urls 多个请求数组
* @return array
*/
function sendMultiRequest(array $urls)
{
$conn = [];
$res = [];
//创建批处理curl句柄
$mh = curl_multi_init();
foreach ($urls as $k => $item) {
$conn[$k] = curl_init(); //初始化各个子连接
//...
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://xxxxx.xxx');//使用一个不存在的地址
curl_exec($ch);
此时会返回一个错误码:curl_errno($ch)
对应的使用$errlist[curl_errno($ch)]就能返回中文的错误说明
$errlist = array(
'1'=>'CURLE_UNSUPPORTED_PROTOCOL (1) – 您传送给 libcurl 的网址使用了此 libcurl 不支持的协议。 可能是您没有使用的编译时选项造成了这种情况(可能是协议字符串拼写有误,或没有指定协议 libcurl 代码)。',
'2'=>'CURLE_FAILED_INIT (2) – 非常早期的初始化代码失败。 可能是内部错误或问题。',
'3'=>'CURLE...
构思
由于互联网的机制,在不使用 Websocket 的情况下,是不能够长时间与用户持续保持连接的。所以我这里打算使用 COOKIE 与数据库信息进行校验。 其中用户端储存的 Token 是经过 hash 加密过的数据,数据库存储的数据是不经过 hash 加密的原始数据。最终通过一系列计算后使用 PHP 自带的 hash 校验函数进行 Token 验证。
为什么我前面说实现一端登录,另一端自动注销呢? Token 在执行登陆之前,会生成初始 Token 数据,这部分数据是没有经过加密而且没有进行组合的,存储在 SESSION 中。在用户执行登陆时候,自行生成4位随机数做基础计算数据,随后检查目前服务器时间戳与用户端生成的 Token 数据进行比对,以及获...
一、用户认证问题
最初互联网用户认证一般流程如下:
1、用户登录,向服务器发送用户名和密码。
2、服务器验证用户信息通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,客户端获取后将这个session_id写入 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。
这种模式的问题在于:
1.扩展性不好。单机当然没有问题,如果是服务器集群,或者是跨域的服务导向架构,就要求 session 数据共享,每台服务器都能够读取 session
2.服务端为了存贮...
随着互联网和移动互联网的快速发展,网站和应用的用户量不断增加,用户数据的安全性和权限控制变得尤为重要。而传统的基于用户名和密码的鉴权方式在一定程度上存在安全风险和复杂性。而基于Token的鉴权机制,既安全又简单。
什么是Token鉴权机制?
Token鉴权机制是一种无状态的鉴权方式,用户登录认证成功后,后端服务器生成一个Token并返回给客户端。客户端每次请求都在请求头中携带Token,后端通过校验Token的合法性来鉴权,从而保证了用户的权限和安全性。
下面我们来手把手教你使用PHP实现基于Token的鉴权。
步骤一:生成Token
要实现Token鉴权,首先我们需要生成Token。
在PHP中,我们可以使用JWT(JSO...
$a = 'aaaaaaaaaaa';
正常情况下,如果出现php和html混合输出的时候,我们一般这样写:
echo '<pre>输出变量a的值'.$a.'</pre>';
我们也可以这样写,就不用连字符了
echo "<pre>{$a}</pre>";
这里要注意,一定要使用双引号,如果使用单引号,则不会输出变量值
/**
* 纯真 IP 数据库查询
*
* 参考资料:
* - 纯真 IP 数据库 http://www.cz88.net/ip/
* - IpLocation https://github.com/nauxliu/IpLocation/
* - 基于本地数据库的 IP 地址查询
*
* 使用示例:
* $ip = new IPQuery();
* $addr = $ip->query('IP地址');
* print_r($addr);
*/
class IPQuery {
private $fh; // IP数据库文件句柄
private $first; // 第一条索引
private $last; // 最后一条索引
private $total; // 索引总数
private $dbFile = __DIR__ . DIRECTORY_SEPARATOR . 'qqwry.dat'; // 纯真...
function sort_query($arr1,$arr2) { //这是排序用的,按修改时间
if ($arr1['updatetime'] == $arr2['updatetime']) return 0;
return ($arr1['updatetime'] > $arr2['updatetime'] ) ? -1 : 1;
}
$rootFolder = 'upload';
$directory = !empty($_GET['path'])?$_GET['path']:$rootFolder;
$mydir = dir($directory);
$arrImageType = array('jpg','jpeg','gif','bmp','png','tif');
while ($file = $mydir->read()) {
if ((is_dir($directory.'/'.$file))) {
$nodess[] = array('text'=>$file, 'path'=>$directory.'/'.$file, 'updatetime'=>filemtime($directory.'/'.$file), '...
功能需求:通过设置一个websocket服务端与客户端连接,增加一个后端接口,当接口触发时,推送消息到客户端
客户端JS通过new WebSocket时,会在服务端完成握手。而php接口通过socket_create、socket_connect连接,不会完成握手,也不需要。所以通过传递参数 from 来判断是从客户端还是从接口传来的消息
PHP服务端代码:server.php
<?php
class socketServer
{
const LISTEN_SOCKET_NUM = 9;
const LOG_PATH = "./log/"; //日志
private $_ip = "127.0.0.1"; //ip
private $_port = 8080; //端口 要和前端创建WebSocket连接时的端口号一致
private $_socketPool =...
(一)WebSocket数据的收发协议 首先,对于客户端向服务器发送数据,都是以数据帧形式传输,下面给出数据帧格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| &nbs...
(一)什么是WebSocket?
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
(二)WebSocket的作用?
WebSock其实在平常使用,我们是时常见到的,用于实时通讯,例如我们常用的实时聊天、服务端向客户端消息推送、也可以实现踢用户下线功能。实时弹幕功能等等。
(三)...
HTTP协议的特性:属于“请求-响应”模型,只有客户端发起了请求消息,服务器才能给出响应消息,没有请求,就没有响应;一个请求消息,服务器只能返回一个响应消息。有些特殊应用场景中,如“在线股票”、“聊天室”等,需要模拟呈现出“客户端不发请求,服务器也在不停的给出响应”效果,若使用HTTP协议,只能使用“AJAX+定时器”来近似的实现——心跳请求,问题:心跳过慢则信息的实效性差,心跳过快则服务器压力太大!
WebSocket协议的特性:属于“广播-收听”模型,只要客户端连接到服务器上,就不再断开(永久连接),一方可以不停的给对方发消息,...
批量下载文件一般使用循环的方式,逐一执行下载。但在带宽与服务器性能允许的情况下,使用多进程进行下载可以大大提高下载的效率。本文介绍php利用curl的多进程请求方法,实现多进程同时下载文件。
原理:使用curl的批处理方法,开启多进程,实现批量下载文件。
主要方法:
curl_multi_init
返回一个新cURL批处理句柄
curl_multi_add_handle
向curl批处理会话中添加单独的curl句柄
curl_multi_exec
运行当前 cURL 句柄的子连接
curl_multi_getcontent
如果设置了CURLOPT_RETURNTRANSFER,则返回获取的输出的文本流
curl_multi_remove_handle
移除curl批处理句柄资源中的某个句柄资源
cu...
问题:使用GD库imagettftext()函数时,报“Warning: imagettftext(): Could not find/open font in ”警告 。
解决方案:找了很久,发现是GD库加载字体文件时,需求提供绝对路径,给font路径用realpath()将相对路径转成绝对路径即可。
imagettftext($im,mt_rand(12,14),mt_rand(-30,30),20*$i+10,18,$fontcolor,realpath($fontface),$codex);
imagettftext() 函数是 PHP 中的一个内置函数,用于使用 TrueType 字体将文本写入图像。
句法:
数组 imagettftext($image,float $size,float $angle,int $x,int $y,int $color,string $fontfile,string $text)
参数:此函数接受上述八个参数,如下所...
$arr_chu = array(
array('1.02','0.25','0.8'),
array('0.96','0.25','0.88'),
array('0.92','0.25','0.92'),
array('0.76','0.5','1.10'),
array('0.82','0.25','1.03'),
array('0.83','0.5','0.92'),
array('1.00','0.25','0.82'),
array('0.85','0.5','1.00')
);
echo '<pre>';
print_r(array_count_values(array_column($arr_chu,1)));...