首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
Search
1
【javascript】JS-向当前url追加参数
2,345 阅读
2
【PHP】生成随机昵称
2,219 阅读
3
【PHP】判断一个字符串是否属于序列化后的数据
2,024 阅读
4
【css】html+css给文章页,做阅读全文
1,975 阅读
5
【PHP】 设计模式(23种)
1,910 阅读
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍭文艺范
🍏mac
AI
LLM
image
audio
yolo
3D
code
登录
Search
标签搜索
php
typecho
代码注释
redis
mysql
go
golang
nginx
thinkphp
docker
gin
linux
curl
html
mamp
算法
短网址
构造函数
webhook
代码片段
依然范儿特西
累计撰写
145
篇文章
累计收到
1
条评论
首页
栏目
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍭文艺范
🍏mac
AI
LLM
image
audio
yolo
3D
code
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
19
篇与
的结果
2021-06-28
【PHP】cURL error 60: SSL certificate unable to get local issuer certificate
导致该问题的原因在于没有配置curl.cainfo,该配置位于php.ini中解决方案:1 下载cacert.pemhttps://curl.haxx.se/ca/cacert.pem2 配置 php.ini[curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo = 【你的绝对路径】记得重启php
2021年06月28日
196 阅读
0 评论
1 点赞
2021-06-24
【PHP】二维数组根据多个字段进行排序
函数 array_multisort()array_multisort() 函数返回一个排序数组。您可以输入一个或多个数组。函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序。函数 array_column()array_column()从记录集中取出 last_name 列:代码<?php $data = [ ['name'=>'laofan1','age'=>18,'space'=>3], ['name'=>'laofan2','age'=>19,'space'=>1], ['name'=>'laofan3','age'=>19,'space'=>2], ['name'=>'laofan4','age'=>17,'space'=>4], ]; array_multisort(array_column($data, 'age'),SORT_DESC,array_column($data, 'space'),SORT_DESC, $data); print_r($data); ?> 结果Array ( [0] => Array ( [name] => laofan3 [age] => 19 [space] => 2 ) [1] => Array ( [name] => laofan2 [age] => 19 [space] => 1 ) [2] => Array ( [name] => laofan1 [age] => 18 [space] => 3 ) [3] => Array ( [name] => laofan4 [age] => 17 [space] => 4 ) )
2021年06月24日
130 阅读
0 评论
0 点赞
2021-06-24
【PHP】隐藏真实的视频播放地址
前言在做视频站,往往不想让用户看到视频真实地址,于是就有了这个代码代码示例html 代码<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>videojs</title> </head> <body> <video class="video-js vjs-big-play-centered" controls data-setup="{}" width="960" height="400" preload="auto" > <source src="https://richerdyoung.com/test.php" type="video/mp4"></source> </video> <link href="//cdn.bootcss.com/video.js/7.0.0-alpha.1/alt/video-js-cdn.css" rel="stylesheet"> <script src="//cdn.bootcss.com/video.js/7.0.0-alpha.1/video.min.js"></script> </body> </html> test.php<?php ini_set('memory_limit', '1024M'); //修改脚本的最大运行内存 set_time_limit(600); //设置超时限制为 10分钟 //视频地址可以换成你的来测试 $play_url = 'https://richerdyoung.com/test.mp4'; //输出视频流 outPutStream($real_paly_url);die(); //输出视频流 function outPutStream($videoUrl) { if(!$videoUrl){ header('HTTP/1.1 500 Internal Server Error'); echo "Error: Video cannot be played !"; exit(); } //获取视频大小 $header_array = get_headers($videoUrl, true); $sizeTemp = $header_array['Content-Length']; if (is_array($sizeTemp)) { $size = $sizeTemp[count($sizeTemp) - 1]; } else { $size = $sizeTemp; } //初始参数 $start = 0; $end = $size - 1; $length = $size; $buffer = 1024 * 1024 * 10; // 输出的流大小 10m //计算 Range $ranges_arr = array(); if (isset($_SERVER['HTTP_RANGE'])) { if (!preg_match('/^bytes=\d*-\d*(,\d*-\d*)*$/i', $_SERVER['HTTP_RANGE'])) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); } $ranges = explode(',', substr($_SERVER['HTTP_RANGE'], 6)); foreach ($ranges as $range) { $parts = explode('-', $range); $ranges_arr[] = array($parts[0], $parts[1]); } $ranges = $ranges_arr[0]; $start = (int)$ranges[0]; if ($ranges[1] != '') { $end = (int)$ranges[1]; } $length = min($end - $start + 1, $buffer); $end = $start + $length - 1; }else{ // php 文件第一次浏览器请求不会携带 RANGE 为了提升加载速度 默认请求 1 个字节的数据 $start=0; $end=1; $length=2; } //添加 Range 分段请求 $header = array("Range:bytes={$start}-{$end}"); #发起请求 $ch2 = curl_init(); curl_setopt($ch2, CURLOPT_URL, $videoUrl); curl_setopt($ch2, CURLOPT_TIMEOUT, 60); curl_setopt($ch2, CURLOPT_HTTPHEADER, $header); //设置读取的缓存区大小 curl_setopt($ch2, CURLOPT_BUFFERSIZE, $buffer); // 关闭安全认证 curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch2, CURLOPT_SSL_VERIFYHOST, false); //追踪返回302状态码,继续抓取 curl_setopt($ch2, CURLOPT_HEADER, false); curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch2, CURLOPT_CONNECTTIMEOUT, 60); curl_setopt($ch2, CURLOPT_NOBODY, false); curl_setopt($ch2, CURLOPT_REFERER, $videoUrl); //模拟来路 curl_setopt($ch2, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36 Edg/85.0.564.44"); $content = curl_exec($ch2); curl_close($ch2); #设置响应头 header('HTTP/1.1 206 PARTIAL CONTENT'); header("Accept-Ranges: bytes"); header("Connection: keep-alive"); header("Content-Type: video/mp4"); header("Access-Control-Allow-Origin: *"); //为了兼容 ios UC这类浏览器 这里加个判断 UC的 Content-Range 是 起始值-总大小减一 if($end!=1){ $end=$size-1; } header("Content-Range: bytes {$start}-{$end}/{$size}"); //设置流的实际大小 header("Content-Length: ".strlen($content)); //清空缓存区 ob_clean(); //输出视频流 echo $content; //销毁内存 unset($content); } function PutMovie($file) { ini_set('memory_limit','512M'); header("Content-type: video/mp4"); header("Accept-Ranges: bytes"); ob_start(); // ------ 开启缓冲区 $size = filesize($file); if(isset($_SERVER['HTTP_RANGE'])){ header("HTTP/1.1 206 Partial Content"); list($name, $range) = explode("=", $_SERVER['HTTP_RANGE']); list($begin, $end) =explode("-", $range); if($end == 0) $end = $size - 1; }else { $begin = 0; $end = $size - 1; } header("Content-Length: " . ($end - $begin + 1)); header("Content-Disposition: filename=".basename($file)); header("Content-Range: bytes ".$begin."-".$end."/".$size); try { $fp = fopen($file, 'r'); } catch (\Exception $e) { echo $e->getTraceAsString();exit; } fseek($fp, $begin); $contents = ''; while(!feof($fp)) { $p = min(1024, $end - $begin + 1); //$begin += $p; $contents .= fread($fp, $p); //echo fread($fp, $p); } //$contents = ltrim($contents, "\XEF\XBB\XBF"); ob_end_clean(); // ------ 清除缓冲区 ob_clean(); //$contents = substr($contents, 3); fclose($fp); exit($contents); } ?> 亲测可用! ,有问题可联系我一起讨论
2021年06月24日
259 阅读
0 评论
3 点赞
2021-06-22
【PHP】zfaka部署时候关闭pathinfo
开源项目地址:https://github.com/zlkbdotnet/zfaka部署的时候,会提示重定向次数过多,解决办法:1 PHP 配置修改,关闭 cgi.fix_pathinfo2 注释掉 include pathinfo.conf 文件位置: /www/server/nginx/conf/enable-php-72.conf location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi-72.sock; fastcgi_index index.php; include fastcgi.conf; # include pathinfo.conf; } 重启PHP 即可
2021年06月22日
155 阅读
0 评论
0 点赞
2021-06-08
【Typecho】Typecho 添加是否被百度收录
我们是否经常在一些网友的博客内容页看到 "百度已收录" 等字样?其实这样加上去有多少效果也没有多少,但是对于有些个人来说他喜欢的,或者可以在考核编辑的时候可以看看他们的文案是否达到有效的收录率。如果你有使用 Typecho 程序,可以通过下面的方法实现。第一、添加脚本/** * 提示文章百度是否收录 * */ function baidu_record() { $url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if(checkBaidu($url)==1){ echo "百度已收录"; }else{ echo "<a style=\"color:red;\" rel=\"external nofollow\" title=\"点击提交收录!\" target=\"_blank\" href=\"http://zhanzhang.baidu.com/sitesubmit/index?sitename=$url\">百度未收录</a>";} } function checkBaidu($url) { $url = 'http://www.baidu.com/s?wd=' . urlencode($url); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $rs = curl_exec($curl); curl_close($curl); if (!strpos($rs, '没有找到')) { //没有找到说明已被百度收录 return 1; } else { return -1; } } 将脚本添加到当前 Typecho 主题中的 Functions.php 文件中。第二、调出效果<?php echo baidu_record() ?>在合适的位置调出即可,如果我们有特定样式可以用一个 span 标签包含处理。
2021年06月08日
148 阅读
0 评论
2 点赞
2021-06-08
【Typecho】 Typecho去掉 index.php
Typecho 后台设置永久链接后,会在域名后加上 index.php,很多人都接受不了。例如如下网址: https://richerdyoung.com/index.php/p/75.html 但我们希望最终的形式是这样: https://richerdyoung.com/p/75.html 那么我们如何做到这样的效果?1. 配置服务器的 rewrite 规则nginx server { listen 80; server_name richerdyoung.com; root /home/laofan/www/; index index.html index.htm index.php; if (!-e $request_filename) { rewrite ^(.*)$ /index.php$1 last; } location ~ .*\.php(\/.*)*$ { include fastcgi.conf; fastcgi_pass 127.0.0.1:9000; } access_log logs/richerdyoung.com.log combined; }apache 配置 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1] </IfModule> 2. 后台配置 typecho 伪静态在 typecho 后台,开启伪静态,并选择你喜好的 url形式:网站设置-》永久链接,选择启用地址重写功能
2021年06月08日
196 阅读
0 评论
0 点赞
2019-12-01
【PHP】 PHP中插件机制的一种实现方案
插件,亦即Plug-in,是指一类特定的功能模块(通常由第三方开发者实现),它的特点是:当你需要它的时候激活它,不需要它的时候禁用/删除它;且无 论是激活还是禁用都不影响系统核心模块的运行,也就是说插件是一种非侵入式的模块化设计,实现了核心程序与插件程序的松散耦合。一个典型的例子就是 Wordpress中众多的第三方插件,比如Akimet插件用于对用户的评论进行Spam过滤。
2019年12月01日
1,211 阅读
0 评论
0 点赞
2019-11-23
【Webhook】各类网站的自动化部署校验脚本-PHP版本
目录只有这几个平台:github、gitlab、gitee、coding
2019年11月23日
1,569 阅读
0 评论
0 点赞
2019-05-31
【PHP】短网址生成算法
源码如下<?php //短网址生成算法 class ShortUrl { //字符表 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static $main_host = "http://t.cn/"; //可以自定义 public static function encode($url) { $key = 'abc'; //加盐 $urlhash = md5($key . $url); $len = strlen($urlhash); //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接 for ($i = 0; $i < 4; $i++) { $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4); //将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零 //此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常 $hex = hexdec($urlhash_piece) & 0x3fffffff; //域名根据需求填写 $short_url = self::$main_host; //生成6位短网址 for ($j = 0; $j < 6; $j++) { //将得到的值与0x0000003d,3d为61,即charset的坐标最大值 $short_url .= self::$charset[$hex & 0x0000003d]; //循环完以后将hex右移5位 $hex = $hex >> 5; } $short_url_list[] = $short_url; } return $short_url_list; } } $url = "https://www.jb51.net/article/92541.htm"; $short = ShortUrl::encode($url); echo "<pre>"; print_r($short); ?>
2019年05月31日
1,087 阅读
0 评论
0 点赞
1
2