首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
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
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
123
篇与
的结果
2021-07-08
TP3.2框架中如何使用多个mysql函数 如FIND_IN_SET 和 !FIND_IN_SET
数据查询中可能会用到数据表中的多个字段去做匹配 可能会用到多个FIND_IN_SET 也可能需要拼接多个条件$user_ids = [1,2,3]; //获取需要匹配的值 if ($user_ids ){ foreach ($user_ids as $val){ $map[] = " FIND_IN_SET($val,show_user_id) "; } } $where['_string'] = implode(" OR ",$map); # 预览sql效果: WHERE FIND_IN_SET('1', show_user_id) OR FIND_IN_SET('2', show_user_id) OR FIND_IN_SET(3, show_user_id) 但是如果我们想除了这个函数还有其他函数要使用的时候并且$where['_string']已经被使用的时候怎么拼接? $where['_logic'] = 'or';//and 或者 OR 就是看你的需要 $map['_string'] = " !FIND_IN_SET(4,show_user_id) "; $where['_complex'] = $map; # 预览sql效果: WHERE FIND_IN_SET('1', show_user_id) OR FIND_IN_SET('2', show_user_id) OR FIND_IN_SET(3, show_user_id) AND ( ( !FIND_IN_SET(4, show_user_id) //就是与FIND_IN_SET相反的意思 ) )
2021年07月08日
180 阅读
0 评论
1 点赞
2021-07-07
微信小程序播放视频卡顿问题
一、默认初次加载卡顿情况明显微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,加一个custom-cache=”{{false}}“即可解决,这个属性文档上没有,是从小程序开发社区中get到的<video src="{{url}}" id="videoOne" custom-cache="{{false}}"> </video>二、视频卡顿,还有一种情况就是视频内容画面分辨率太大。解决方案:使用视频压缩工具,处理视频内容,建议720P就可以了。如果以上问题还不能解决。可以尝试提交代码片段给官方处理https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
2021年07月07日
834 阅读
0 评论
2 点赞
2021-07-05
【laravel】 操作文件上传
1、获取上传的文件$file=$request->file('file');2、获取上传文件的文件名(带后缀,如abc.png)$filename=$file->getClientOriginalName();3、获取上传文件的后缀(如abc.png,获取到的为png)$fileextension=$file->getClientOriginalExtension();4、获取上传文件的大小$filesize=$file->getClientSize();5、获取缓存在tmp目录下的文件名(带后缀,如php8933.tmp)$filaname=$file->getFilename();6、获取上传的文件缓存在tmp文件夹下的绝对路径$realpath=$file->getRealPath();7、将缓存在tmp目录下的文件移到某个位置,返回的是这个文件移动过后的路径$path=$file->move(path,newname);move()方法有两个参数,第一个参数是文件移到哪个文件夹下的路径,第二个参数是将上传的文件重新命名的文件名8、检测上传的文件是否合法,返回值为true或false$file->isValid()
2021年07月05日
182 阅读
0 评论
0 点赞
2021-06-29
【PHP】RSA非对称加密解密
PHP服务端与客户端交互或者提供开放API时,通常需要对敏感的数据进行加密,这时候rsa非对称加密就能派上用处了。举个通俗易懂的例子,假设我们再登录一个网站,发送账号和密码,请求被拦截了。密码没加密,那攻击者就直接拿到了密码,这是最搓的。密码加密了,是不可逆加密,那攻击者只需要模拟那个请求即可登录。密码加密了,是可逆加密,其中携带有时间等参数,后台可以根据时间等参数来判断是否有效,但因为是在前端加密,其加密方式也能在代码中找到,找到加密方式就可以得出解密方式。但是如果我们使用非对称加密就可以避免以上问题。非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。工作过程如下,甲乙之间使用非对称加密的方式完成了重要信息的安全传输。乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。在传输过程中,即使攻击者截获了传输的密文,并得到了乙的公钥,也无法破解密文,因为只有乙的私钥才能解密密文。同样,如果乙要回复加密信息给甲,那么需要甲先公布甲的公钥给乙用于加密,甲自己保存甲的私钥用于解密。在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。下面我们通过一个例子来说明如何用PHP来实现RSA的加密解密。<?php class Rsa { public $privateKey = ''; public $publicKey = ''; public function __construct() { $resource = openssl_pkey_new(); openssl_pkey_export($resource, $this->privateKey); $detail = openssl_pkey_get_details($resource); $this->publicKey = $detail['key']; } public function publicEncrypt($data, $publicKey) { openssl_public_encrypt($data, $encrypted, $publicKey); return $encrypted; } public function publicDecrypt($data, $publicKey) { openssl_public_decrypt($data, $decrypted, $publicKey); return $decrypted; } public function privateEncrypt($data, $privateKey) { openssl_private_encrypt($data, $encrypted, $privateKey); return $encrypted; } public function privateDecrypt($data, $privateKey) { openssl_private_decrypt($data, $decrypted, $privateKey); return $decrypted; } } $rsa = new Rsa(); echo "公钥:\n", $rsa->publicKey, "\n"; echo "私钥:\n", $rsa->privateKey, "\n"; // 使用公钥加密 $str = $rsa->publicEncrypt('hello', $rsa->publicKey); // 这里使用base64是为了不出现乱码,默认加密出来的值有乱码 $str = base64_encode($str); echo "公钥加密(base64处理过):\n", $str, "\n"; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; // 使用私钥加密 $str = $rsa->privateEncrypt('world', $rsa->privateKey); // 这里使用base64是为了不出现乱码,默认加密出来的值有乱码 $str = base64_encode($str); echo "私钥加密(base64处理过):\n", $str, "\n"; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; 大家执行一下可以看到公钥加密的数据,只有私钥能解密,反之亦然,私钥加密的数据只有公钥能解码。这是PHP端的实现,可用在第三方跟平台之间的数据传输,但如果是前端传到后端该怎么办呢,搜索了一下,发现了这个库https://github.com/travist/jsencrypt使用jsencrypt加密解密的例子如下:<!DOCTYPE html> <html> <head> <title>JSEncrypt Example</title> <base id="basetag" href="/jsencrypt-2.3.0/"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="jquery.js"></script> <script type="text/javascript" src="bin/jsencrypt.js"></script> </head> <body> <div class="container"> <script type="text/javascript"> // Call this code when the page is done loading. $(function() { // Run a quick encryption/decryption when they click. $('#testme').click(function() { // Encrypt with the public key... var encrypt = new JSEncrypt(); encrypt.setPublicKey($('#pubkey').val()); var encrypted = encrypt.encrypt($('#input').val()); console.log(encrypted) // Decrypt with the private key... var decrypt = new JSEncrypt(); decrypt.setPrivateKey($('#privkey').val()); var uncrypted = decrypt.decrypt(encrypted); console.log(uncrypted) // Now a simple check to see if the round-trip worked. if (uncrypted == $('#input').val()) { alert('It works!!!'); } else { alert('Something went wrong....'); } }); }); </script> <label for="privkey">Private Key</label><br/> <textarea id="privkey" rows="15" cols="65">-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkaTKbAERvJGE0 jGsdPXUI1FpO1uDkBkuuQU4LRv0Quw9r8j+fVNkN9rZVXMV7MiGOgb80Z0k9zRxZ 5KWOqMnSlrpyO3WjhFpDJeSmqZ4wLMFwmxrr31AjabD5Nkf9dQ7RiEIuM49g27+M 3OFvdIPcLgCyXnkl8FwBceBs38QbCXY5MrwlZr13yWZnyj6fbbG8t4atAzJ6bnj3 FZuvynC3QnMaVi6YnTIlBOUOHtqt/jsUTOCWkwKqkZh+RZF2fx3IFkSpJAOMgT5p jSnfEJkK5E4JJHobLo/dFO0J7Gve+qb/lfJ9UpnZe78N1TAvbJiNZoN22ghbuIAW M5qqIqOzAgMBAAECggEBAItUJFtqoVQOpADy+s/+UirNpjzbVJmjwXyNN3cnmW0g PjsBrY+aqUCcUwLlMU2B+fg86w6jRokdWgL3t4m7Kkl8SkUuQgc5z/mP3tdPNkB6 vJDc/GIPeYnwidSrKOTSB/UGoiAesYJK6aCaiCV9tIWVxjUH7eyXnvf+qAChyrUW PG/FirLyYmz1yRG99VKKE+iEIzemGSswU0DI0bwTFQ0MunLeJf0EdT20XppNwnl4 uoRgOBpMkW02vxDDWke2YIpk128KFRtPE3zF7W+Prb3ifMuQHSqDdqTgZA5+G3A9 D+lwczy95+0mIBpJ8rKQGjJ51ZT5WVMET9+Hb9+nUIECgYEA9NluRzIi9tZxwQa2 KdU8WAtWZZQZfG18mSFg8/QYrAGF2TyLAW0mEIe7nQXxPzm50HdpxTJCkUrXGm3u hfPayx18H4oVVYRepSSfV+xe7wdogJWV6i5h/LaZsiTk1O8vF9Cwc3yUyVoMtKsg yVcsONOzo/Kg/vwejQJb1C8dNvMCgYEA7tAewjA25vDmfiWZ0lrWKlwGQZ97+pMU X+N12DWxL1Lvi6jBKXlK+Eiz19Qm/mBz9RxrDDY4/o0IjtTxdOh5thDaiqIcnqQn PiBpm7zbheZOlPBGjFJ1vwueIWvqbx9vcqHik/4xHwuFNwQ+YCSpVpVoqrgoN/h/ fX5+hKm1kEECgYEAzn69UZAICtLKNveZE+jBLqPJJnvjjpur1F1hLfzz/cR/BLnZ pcdOrew7Hu+PCTp+6kB7VJLRr0VF6gVCf3gsUta4AsVqvqeXRoF/XSB84+wEh0Ug nNKnUwEQ2DvjPW3G8rfOyGcN+E5YntogGY3KPtbUDvWmL8WjYlrV5Toi0l8CgYAQ Ujr37JGkAOzPzEQSA1FFvdpTm9G+U1T+JK6GI01DvbhPZC4nZnnAND/OTVqI4hCq vNF4GTCV/Q+Lq3QBGG5RCh/Vf7TTBscD0PVGxoZ+RTozpaQ8rNoNP38EK7ru80gL npK8qI+03nWxR+H3cin8l+N6X3GoOZyE+CMvb+XPwQKBgEeDjwTWxVhH/uksO3pw MgbHjauD6AjuW9jc2a7ngFCWSQxQ3+xK1Spn6pbVdLPiBgInxCIl8d6S1yFU0Uan iZHgy4fs1hdJRSuJ6qydqSwlS2C+gDpyY8ye0i+jq5VYYhKcpJCrCgaQGbleuaUd ldp7v1FD8uyeemknGA35f6Id -----END PRIVATE KEY-----</textarea><br/> <label for="pubkey">Public Key</label><br/> <textarea id="pubkey" rows="15" cols="65">-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GkymwBEbyRhNIxrHT11 CNRaTtbg5AZLrkFOC0b9ELsPa/I/n1TZDfa2VVzFezIhjoG/NGdJPc0cWeSljqjJ 0pa6cjt1o4RaQyXkpqmeMCzBcJsa699QI2mw+TZH/XUO0YhCLjOPYNu/jNzhb3SD 3C4Asl55JfBcAXHgbN/EGwl2OTK8JWa9d8lmZ8o+n22xvLeGrQMyem549xWbr8pw t0JzGlYumJ0yJQTlDh7arf47FEzglpMCqpGYfkWRdn8dyBZEqSQDjIE+aY0p3xCZ CuROCSR6Gy6P3RTtCexr3vqm/5XyfVKZ2Xu/DdUwL2yYjWaDdtoIW7iAFjOaqiKj swIDAQAB -----END PUBLIC KEY-----</textarea><br/> <label for="input">Text to encrypt:</label><br/> <textarea id="input" name="input" type="text" rows=4 cols=70>This is a test!</textarea><br/> <input id="testme" type="button" value="Test Me!!!" /><br/> </div> </body> </html>其中的公钥和私钥都是上面PHP代码中生成的,这边好像只有公钥加密,私钥解密。拿到其中打印出的加密后的数据,尝试在PHP中进行解密,可以看到也能解密成功。代码如下:<?php class Rsa { public $privateKey = '-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDkaTKbAERvJGE0 jGsdPXUI1FpO1uDkBkuuQU4LRv0Quw9r8j+fVNkN9rZVXMV7MiGOgb80Z0k9zRxZ 5KWOqMnSlrpyO3WjhFpDJeSmqZ4wLMFwmxrr31AjabD5Nkf9dQ7RiEIuM49g27+M 3OFvdIPcLgCyXnkl8FwBceBs38QbCXY5MrwlZr13yWZnyj6fbbG8t4atAzJ6bnj3 FZuvynC3QnMaVi6YnTIlBOUOHtqt/jsUTOCWkwKqkZh+RZF2fx3IFkSpJAOMgT5p jSnfEJkK5E4JJHobLo/dFO0J7Gve+qb/lfJ9UpnZe78N1TAvbJiNZoN22ghbuIAW M5qqIqOzAgMBAAECggEBAItUJFtqoVQOpADy+s/+UirNpjzbVJmjwXyNN3cnmW0g PjsBrY+aqUCcUwLlMU2B+fg86w6jRokdWgL3t4m7Kkl8SkUuQgc5z/mP3tdPNkB6 vJDc/GIPeYnwidSrKOTSB/UGoiAesYJK6aCaiCV9tIWVxjUH7eyXnvf+qAChyrUW PG/FirLyYmz1yRG99VKKE+iEIzemGSswU0DI0bwTFQ0MunLeJf0EdT20XppNwnl4 uoRgOBpMkW02vxDDWke2YIpk128KFRtPE3zF7W+Prb3ifMuQHSqDdqTgZA5+G3A9 D+lwczy95+0mIBpJ8rKQGjJ51ZT5WVMET9+Hb9+nUIECgYEA9NluRzIi9tZxwQa2 KdU8WAtWZZQZfG18mSFg8/QYrAGF2TyLAW0mEIe7nQXxPzm50HdpxTJCkUrXGm3u hfPayx18H4oVVYRepSSfV+xe7wdogJWV6i5h/LaZsiTk1O8vF9Cwc3yUyVoMtKsg yVcsONOzo/Kg/vwejQJb1C8dNvMCgYEA7tAewjA25vDmfiWZ0lrWKlwGQZ97+pMU X+N12DWxL1Lvi6jBKXlK+Eiz19Qm/mBz9RxrDDY4/o0IjtTxdOh5thDaiqIcnqQn PiBpm7zbheZOlPBGjFJ1vwueIWvqbx9vcqHik/4xHwuFNwQ+YCSpVpVoqrgoN/h/ fX5+hKm1kEECgYEAzn69UZAICtLKNveZE+jBLqPJJnvjjpur1F1hLfzz/cR/BLnZ pcdOrew7Hu+PCTp+6kB7VJLRr0VF6gVCf3gsUta4AsVqvqeXRoF/XSB84+wEh0Ug nNKnUwEQ2DvjPW3G8rfOyGcN+E5YntogGY3KPtbUDvWmL8WjYlrV5Toi0l8CgYAQ Ujr37JGkAOzPzEQSA1FFvdpTm9G+U1T+JK6GI01DvbhPZC4nZnnAND/OTVqI4hCq vNF4GTCV/Q+Lq3QBGG5RCh/Vf7TTBscD0PVGxoZ+RTozpaQ8rNoNP38EK7ru80gL npK8qI+03nWxR+H3cin8l+N6X3GoOZyE+CMvb+XPwQKBgEeDjwTWxVhH/uksO3pw MgbHjauD6AjuW9jc2a7ngFCWSQxQ3+xK1Spn6pbVdLPiBgInxCIl8d6S1yFU0Uan iZHgy4fs1hdJRSuJ6qydqSwlS2C+gDpyY8ye0i+jq5VYYhKcpJCrCgaQGbleuaUd ldp7v1FD8uyeemknGA35f6Id -----END PRIVATE KEY-----'; public $publicKey = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5GkymwBEbyRhNIxrHT11 CNRaTtbg5AZLrkFOC0b9ELsPa/I/n1TZDfa2VVzFezIhjoG/NGdJPc0cWeSljqjJ 0pa6cjt1o4RaQyXkpqmeMCzBcJsa699QI2mw+TZH/XUO0YhCLjOPYNu/jNzhb3SD 3C4Asl55JfBcAXHgbN/EGwl2OTK8JWa9d8lmZ8o+n22xvLeGrQMyem549xWbr8pw t0JzGlYumJ0yJQTlDh7arf47FEzglpMCqpGYfkWRdn8dyBZEqSQDjIE+aY0p3xCZ CuROCSR6Gy6P3RTtCexr3vqm/5XyfVKZ2Xu/DdUwL2yYjWaDdtoIW7iAFjOaqiKj swIDAQAB -----END PUBLIC KEY-----'; public function __construct() { } public function publicEncrypt($data, $publicKey) { openssl_public_encrypt($data, $encrypted, $publicKey); return $encrypted; } public function publicDecrypt($data, $publicKey) { openssl_public_decrypt($data, $decrypted, $publicKey); return $decrypted; } public function privateEncrypt($data, $privateKey) { openssl_private_encrypt($data, $encrypted, $privateKey); return $encrypted; } public function privateDecrypt($data, $privateKey) { openssl_private_decrypt($data, $decrypted, $privateKey); return $decrypted; } } $rsa = new Rsa(); // 使用公钥加密的内容 $str = 'IUMBGcLwJECdxUu3LMbeEhGQdoRjCLqFwfZQBO/Odh3tClbq76Tva7yYqTVxexXLmZ3uY8DrOk/XwcVVRr6g9rBnv/zxBxUShCdN0CwkoguvI+6Oju2aUBlM4FhUp+gmasa5YfqylEp1RpsVAp67GMGlxZvp0ekfhFXkjSqAguPd7dKq5YjftP12xOyuJHAzzg7U+eHxffxnneKqXkK7QrfQD6VrLpbYmayPSjMza/RbjXF+d85UeUZUaF25PZ7Y7kD4Yo7/hY/L6peeOkI5//tpl6U4QY9VsFsjAbIpNMsZuNjE/cZ57Kc5WScPsmy0o9wsp5DUEJmu+YYmr6adoA=='; $str = base64_decode($str); $pubstr = $rsa->publicDecrypt($str, $rsa->publicKey); echo "公钥解密:\n", $pubstr, "\n"; $privstr = $rsa->privateDecrypt($str, $rsa->privateKey); echo "私钥解密:\n", $privstr, "\n"; 参考资料百度百科:非对称加密: https://baike.baidu.com/item/%E9%9D%9E%E5%AF%B9%E7%A7%B0%E5%8A%A0%E5%AF%86/9874417?fr=aladdinphp加密扩展: https://www.php.net/manual/zh/book.openssl.php
2021年06月29日
231 阅读
0 评论
1 点赞
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-26
【mysql】解决报错:SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
错误信息提示SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client原因由于MySQL 8默认使用了新的密码验证插件:caching_sha2_password,而低版本的PHP版本中所带的mysqlnd无法支持这种验证。故报“请求客户端未知的身份验证方法”。解决方案一可以通过phpinfo()函数了解当前安装的PHP是否支持caching_sha2_password方案二更改加密方式 alter user 'root'@'localhost' identified with mysql_native_password by '123456'; flush privileges;
2021年06月26日
359 阅读
1 评论
2 点赞
2021-06-24
【html】Layui 静态表格复选框全选
html<table class="layui-table" > <thead> <tr> <th><input type="checkbox" name="" lay-skin="primary" lay-filter="allChoose"></th> <th>id</th> </tr> </thead> <tbody> {foreach $data_list as $key=>$vo } <tr> <td><input type="checkbox" name="id_array[]" value="{$vo.id}" lay-skin="primary" lay-filter="itemChoose" ></td> <td>{$vo.id}</td> </tr> {/foreach} </tbody> </table> js <script> layui.use(['form', 'layedit','jquery','element','table'], function() { var form = layui.form; table = layui.table; form.render(); //全选or 取消全选 form.on('checkbox(allChoose)', function(data){ //所有 var all_child = $(data.elem).parents('table').find('tbody input[type="checkbox"]'); //data.elem.checked 值为 true 或者 false all_child.each(function(index, item){ item.checked = data.elem.checked; }); form.render('checkbox'); //获取已选中 var checked_child = $(data.elem).parents('table').find('tbody input[type="checkbox"]:checked'); layer.msg('选中了:'+ checked_child.length + ' 个'); //获取选中的值 var arr_box = []; checked_child.each(function() { arr_box.push($(this).val()); }); console.log(arr_box.toString()); }); //全选和部分选中时候,表头全选按钮的样式变化 form.on('checkbox(itemChoose)', function (data) { var sib = $(data.elem).parents('table').find('tbody input[type="checkbox"]:checked').length; var total = $(data.elem).parents('table').find('tbody input[type="checkbox"]').length; if (sib == total) { $(data.elem).parents('table').find('thead input[type="checkbox"]').prop("checked", true); } else { $(data.elem).parents('table').find('thead input[type="checkbox"]').prop("checked",false); } form.render('checkbox'); //获取已选中 var child = $(data.elem).parents('table').find('tbody input[type="checkbox"]:checked'); layer.msg('选中了:'+ child.length + ' 个'); //获取选中的值 var arr_box = []; child.each(function() { arr_box.push($(this).val()); }); console.log(arr_box.toString()); }); }); </script>
2021年06月24日
261 阅读
0 评论
3 点赞
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 点赞
1
...
6
7
8
...
13