首页
直播
美图
视频
更多
统计
推荐
电子书站
免费视频站
好书推荐
Search
1
yii2框架融合workman 消息推送socketIO 插件
246 阅读
2
模板 源码 下载地址 集合
210 阅读
3
wordpress 插件 (主题)在线安装失败 解决办法探索
150 阅读
4
PHP使用json_encode()处理数组时,不转义 中文和 反斜线 等字符串
143 阅读
5
mysql 精准匹配时;字符串字段不区分大小写解决办法
125 阅读
我的博客
错误记录
登录
Search
标签搜索
php
mysql
wordpress
nginx
mysql安全
linux
typecho
redis
index.php
多继承
trait
微信公众号
微信
图片
文字
图文
用户权限
navicat
mysql用户权限
弱类型语言
周周
累计撰写
28
篇文章
累计收到
2
条评论
首页
栏目
我的博客
错误记录
页面
直播
美图
视频
统计
推荐
电子书站
免费视频站
好书推荐
搜索到
13
篇与
的结果
2024-11-05
苹果cms 的生成xml文件总是报错
xml文件报错:This page contains the following errors: error on line 1 at column 6: XML declaration allowed only at the start of the document Below is a rendering of the page up to the first error.解决办法:简而言之,你应该:ob_clean()//清理(擦除)输出缓冲区 print($xml->asXML());解释:如果任何包含的文件打印新行,您将得到第2行第6列出错:XML声明仅允许在文档的开头这可能是因为在某些文件中<?php标签在空行后开始。因此,与其搜索导致错误的文件,不如简单地清理输出缓冲区。参考:https://stackoverflow.com/questions/21261627/error-on-line-1-at-column-6-xml-declaration-allowed-only-at-the-start-of-the-do
2024年11月05日
2 阅读
0 评论
0 点赞
2022-07-28
php+nginx 服务器项目接口出现大量的504,502状态错误 (某种原因)
php+nginx 服务器项目接口出现大量的504,502状态错误 (某种原因)
2022年07月28日
101 阅读
0 评论
0 点赞
2022-01-08
yii2框架融合workman 消息推送socketIO 插件
yii2框架融合workerman的socketIo插件,编写自己的程序与逻辑,实现实时推送
2022年01月08日
246 阅读
0 评论
5 点赞
2022-01-08
弱类型语言的php对于 0 、"0"、"000" 、"00" 判断与处理问题
弱类型语言-php 对 0,"0","000","00" ,判断与处理问题,对变量类型的特殊判断处理逻辑
2022年01月08日
77 阅读
0 评论
1 点赞
2021-12-02
mysql 用户设置访问权限 (命令篇)
问题:为了数据库的安全,设置特定用户访问数据库或者数据库表的权限?解决方法:1、新增数据库用户数据方式1:// 添加无限制访问用户以及密码 CREATE USER 'your_username'@'%' IDENTIFIED BY 'your_password';// 添加本地访问用户以及密码 CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password'; 注: user 是用户的名称,host 设置用户连接的方式;host:% 表示无限制(允许任何主机)登录数据库;localhost 表示服务器本地登录数据库 指定ip 表示指定某个ip终端访问数据库。还有人把host 设置成127.0.0.1,与localhost类似,但是两个存在着明显区别。 mysql -h 127.0.0.1 的时候,使用 TCP/IP 连接, mysql server 认为该连接来自于127.0.0.1或者是"localhost.localdomain" mysql -h localhost 的时候,是 不使用TCP/IP 连接的,而使用 Unix socket ;此时,mysql server则认为该client是来自"localhost" mysql权限管理中的"localhost"有特定含义: 需要根据自己的环境设置成localhost 还是选择127.0.0.1 ; 这个我们后面再说明。方式2: 通过sql 写入mysql user 表中INSERT INTO `mysql`.`user` (`Host`, `User`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`, `password_last_changed`, `password_lifetime`, `account_locked`) VALUES ('%', 'testadmin', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', 0, 0, 0, 0, 'mysql_native_password', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9', 'N', '2021-12-01 22:15:24', NULL, 'N');2、用户授权(grant)grant Alter, Create, Delete, Drop, INDEX, Insert, Select, Update on `your_db_name`.* TO 'your_username'@'%'; // Alter, Create, Delete, Drop, INDEX, Insert, Select, Update 用户操作数据库或者数据库表的具体权限; // `your_db_name`.* :表示`your_db_name`库下所有的表的权限都赋予 ; // `your_db_name`.table_name :表示`your_db_name`库下table_name表权限的赋予 ; 或者 授予用户数据库表的全部权限 ,不需要一个个授予;如下:grant All privileges on `your_db_name`.* TO 'your_username'@'%'; // All privilege :表示全部权限 授予全部数据库表的全部权限 ,不需要一个个授予;如下:grant All privileges on *.* TO 'your_username'@'%'; // All privilege :表示全部权限mysql> grant all privileges on `apple_cms`.ac_actor TO 'testadmin'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) 如图效果 3、刷新MySQL的系统权限相关表,或者重启数据库服务flush privileges; // sql 命令或者systemctl restart mysql ;// linux 命令 不同版本linux 命令不同,根据自己服务器而定,切勿死记4、撤销用户权限(REVOKE)REVOKE privilege ON databasename.tablename FROM 'username'@'host';注: 删除用户的对应的表或者库的权限5、删除用户 根据条件删除指定的用户drop user your_name DROP USER 'your_username'@'host'; DROP USER 'your_username'@'%';综上就可以自己设置用户的访问操作权限 ,
2021年12月02日
96 阅读
0 评论
0 点赞
2021-12-02
微信公众号发送图文和图片 , 微信公众号被动回复用户信息
微信公众号回复用户信息有两种方式: 1、被动回复用户消息; 2、通过客服接口发送消息;(可以通过调用客服接口发送)本文不做阐述,可以看看微信文档,一、发送图片 1、可以将图片上传服务器上,代码如下:/** * 上传到本地服务器 * @param $content * @param $type * @return array * */ public static function filePathUrl($content,$type){ $ext_path = isset(self::$ext_path[$type]) ? self::$ext_path[$type] : '/file' ; $local_doc_dir = dirname(__DIR__) . "/web".$ext_path;//本地文件夹 if (!is_dir($local_doc_dir)){ mkdir($local_doc_dir,0777,true);//本地如果没有文件夹则创建文件夹 } // $name = uniqid().time().'.jpg' ; $name = uniqid().time().'.png' ; $res = file_put_contents($local_doc_dir.$name,$content) ; if($res){ return [ 'status' => 1 , 'url' => $local_doc_dir.$name , ] ; } else { return [ 'status' => 0 , 'msg' => '上传失败' , 'url' => $local_doc_dir.$name , ] ; } } 2、得到图片的绝对地址通过微信临时素材接口上传到微信服务器得到临时素材的media_id,/** * @todo * @param $media_path * @param string $type * @return mixed * @throws \Exception * */ public static function uploadWeChatWeb($media_path,$type = 'image'){ $access_token = getWeChatAccessToken(self::weChatAppId, self::weChatAppSecret); $url = "https://api.weixin.qq.com/cgi-bin/media/upload?access_token={$access_token}"; if(class_exists('CURLFile')){ //7.0 $param = [ 'media' => new \CURLFile($media_path) , 'access_token' => $access_token, 'type' => $type, ]; }else{ //5.6以及5.6以下 $param = array( 'media' => '@'.$media_path, 'access_token' => $access_token, 'type' => $type, ); } $json_ret = requestHttp($url,'POST',$param,'',60,1) ; $ret = json_decode($json_ret,true) ; if($ret){ $ret['param_data'] = $param ; $ret['json_ret'] = $json_ret ; } else { $ret['param_data'] = $param ; $ret['json_ret'] = $json_ret ; } return $ret ; }注意: 1、media_path 是图片的绝对的地址,不是图片的url ; 这一点需要注意。 2、php 版本的不同导致代码有所差异,这边的考虑curl 的CURLOPT_SAFE_UPLOAD参数问题 代码调整: if(class_exists('CURLFile')){ //7.0 $param = [ 'media' => new \CURLFile($media_path) , 'access_token' => $access_token, 'type' => $type, ]; }else{ //5.6以及5.6以下 $param = array( 'media' => '@'.$media_path, 'access_token' => $access_token, 'type' => $type, ); } 微信回复的xml 组装: content参数发送文本时时文本内容,发送图片时图片的media_id;有参数不明白的可以阅读微信文档,或者咨询在下/** * 微信单文本信息回复 * @param $content */ private function respond_text($content,$img = 0){ if($img == 1){ // 发送图片xml $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Image> <MediaId><![CDATA[%s]]></MediaId> </Image> </xml>"; $info = sprintf($template,$this->from_user,$this->to_user,time(),'image',$content); } else { // 发送文本消息的xml $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> </xml>"; $info = sprintf($template,$this->from_user,$this->to_user,time(),'text',$content); } exit($info); } 通过sprintf 函数将参数与xml字段替换 ; 得到想要的xml文件 ; 这样接口得到想要的功能 ; 如图 二、发送图文消息 通过组织图文的xml/** * 发送一条图文信息 * @param $title 图文标题 * @param $des 图文的介绍 * @param $picUrl 图片的url链接地址 * @param string $url 文章的第三方链接地址url * */ public static function respondOneNewsText($title,$des,$picUrl,$url){ $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <ArticleCount>1</ArticleCount> <Articles> <item> <Title><![CDATA[%s]]></Title> <Description><![CDATA[%s]]></Description> <PicUrl><![CDATA[%s]]></PicUrl> <Url><![CDATA[%s]]></Url> </item> </Articles> </xml>" ; $info = sprintf($template,self::$to_user_open_id,self::$form_user_open_id,time(),'news',$title,$des,$picUrl,$url); exit($info); } 通过sprintf 函数将参数与xml字段替换 ; 得到想要的xml文件 ; 这样接口得到想要的功能展示 ; 如图
2021年12月02日
103 阅读
0 评论
0 点赞
2021-11-28
php中trait语法的在多继承上的使用
php中trait语法的在多继承上的使用
2021年11月28日
56 阅读
1 评论
0 点赞
2021-11-13
网站服务器配置 nginx.conf 有误,导致服务器 **$_SERVER** 的 PATH_INFO 无法获取
问题 配置 maccms 时,配置 nginx.conf 成功之后,网站只能访问首页,无法访问其他的页面 ;问题分析 环境使用的 php nginx mysql ; 使用的是 tp5 的框架 ,问题发现配置好服务器之后发现无法访问其他页面,使用 debug 调试发现无法解析路由 ;原因: tp5 解析路由使用了 $_SERVER 中 PATH_INFO,但是如图配置无法获取 path_Info , 导致路由解析失败 ; 访问其他的路由,都跳转到首页 ,之前的错误配置 解决办法 调整后的服务器配置 location ~ [^/]\.php(/|$) { #fastcgi_pass remote_php_ip:9000; fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句 fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句 include fastcgi.conf; } 配置成功之后:重新启动一下 nginx 服务器; 之前的访问的问题就可以解决了。
2021年11月13日
66 阅读
0 评论
0 点赞
2021-11-13
wordpress 插件 (主题)在线安装失败 解决办法探索
问题: 从官网下载 wordpress 源码 下载地址 ; 按安装步骤安装好wordpress之后,无法安装插件 和安装主题 ; 安装插件提示 文件复制失败 ;解决办法:第一步: 使用xshell 管理工具 连接服务 进入你服务器wordpress 安装目录 , 在wp-content 创建 tmp目录 将wp-content目录下的权限放开 ;chmod 777 -R wp-content/第二步: 修改 wp-config.php ; 文件地址 :你服务器wordpress 安装根目录下; 如图: 在文件末尾加这些配置; 代码:define('WP_TEMP_DIR', ABSPATH.'wp-content/tmp'); define("FS_METHOD", "direct"); define("FS_CHMOD_DIR", 0777); define("FS_CHMOD_FILE", 0777); 这样 配置好之后,你wordpress 就可以在线安装 插件和主题了 ; 文章有什么错误的地方,望各位多多指点;感谢观看; QQ(wechat):2024662993 (Sying1775511885)
2021年11月13日
150 阅读
0 评论
0 点赞
2021-11-11
php redis 集合sadd同时写入多个键值的方法
php 使用redis 扩展,如何同时写入多个键值的应用 使用 ... 运算符定义变长参数函数 官方解释 地址实例<?php function f($req, $opt = null, ...$params) { // $params 是一个包含了剩余参数的数组 printf('$req: %d; $opt: %d; number of params: %d'."\n", $req, $opt, count($params)); } f(1); f(1, 2); f(1, 2, 3); f(1, 2, 3, 4); f(1, 2, 3, 4, 5); ?>输出$req: 1; $opt: 0; number of params: 0 $req: 1; $opt: 2; number of params: 0 $req: 1; $opt: 2; number of params: 1 $req: 1; $opt: 2; number of params: 2 $req: 1; $opt: 2; number of params: 3由此类推: 批量设置集合数值 if(is_array($value)){ $value = \Yii::$app->redis->sadd($key,…$value) ; }else{ $value = \Yii::$app->redis->sadd($key,$value) ; }
2021年11月11日
58 阅读
0 评论
0 点赞
2021-11-11
PHP使用json_encode()处理数组时,不转义 中文和 反斜线 等字符串
json_encode 语法简介: (PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0) json_encode — 对变量进行 JSON 编码 说明 json_encode(mixed $value, int $options = 0, int $depth = 512): string|false返回字符串,包含了 value 值 JSON 形式的表示。编码受传入的 options 参数影响,此外浮点值的编码依赖于 serialize_precision。 参数 value 待编码的 value ,除了 资源(resource) 类型之外,可以为任何数据类型所有字符串数据的编码必须是 UTF-8。 注意: PHP 实现了 JSON 的一个超集,参考 » RFC 7159. options 由以下常量组成的二进制掩码: JSON_FORCE_OBJECT, JSON_HEX_QUOT, JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_INVALID_UTF8_IGNORE, JSON_INVALID_UTF8_SUBSTITUTE, JSON_NUMERIC_CHECK, JSON_PARTIAL_OUTPUT_ON_ERROR, JSON_PRESERVE_ZERO_FRACTION, JSON_PRETTY_PRINT, JSON_UNESCAPED_LINE_TERMINATORS, JSON_UNESCAPED_SLASHES, JSON_UNESCAPED_UNICODE, JSON_THROW_ON_ERROR。 关于 JSON 常量详情参考 JSON 常量页面。 depth 设置最大深度。 必须大于0。 返回值 成功则返回 JSON 编码的 string 或者在失败时返回 false 。问题1: 项目经常 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似"\u*"的格式, 还会在一定程度上增加传输的数据量.$str = '中华人民共和国' ; echo json_encode($str) ; die() ; // "\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd"解决: 使用 json_encode 第二个参数 JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256) ; `$str = '中华人民共和国' ; echo json_encode($str) ; // "\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd" echo json_encode($str,JSON_UNESCAPED_UNICODE) ; // "中华人民共和国" die() ;` 问题2: 用PHP的json_encode来处理数组的时候, 不想转义其中的 /;解决2: 使用 json_encode 第二个参数 JSON_UNESCAPED_SLASHES (不要编码 /。 ,对应的数字 64) ;`$str = '中华/人民/共和国' ; echo json_encode($str,JSON_UNESCAPED_UNICODE) ; // "中华\/人民\/共和国" echo json_encode($str,JSON_UNESCAPED_UNICODE+JSON_UNESCAPED_SLASHES) ; //"中华/人民/共和国" echo json_encode($str,320) ; //"中华/人民/共和国"`
2021年11月11日
143 阅读
0 评论
1 点赞
2021-11-11
mysql 计算 一个文本字段的内容一个文字出现的次数
问题: 如何统计一个text字段内容中某个字或者词语出现的次数解决思路: 使用mysql 的内置函数计算 ; 当前需求用到的函数是length 计算字符串的长度 ; replace 替换内容的字段 ;譬如 我想统计 数据表dl_data_list_1 中tag_content 内容中 B-date 出现次数 只需要写出下面的sql 就可以达到目的SQL语句: SELECT ( LENGTH( tag_content )- LENGTH( REPLACE ( tag_content, 'B-date', '' )))/ LENGTH( 'M-date' ) AS num, tag_content FROMdl_data_list_1 WHEREid = 1205946; 这样写的原因 : 先通过length 函数获取原字段内容的长度 num1 , 将目标字段通过replace字段替换成空,在获取替换后的内容长度num2,(num1-num2)/目标字段的长度,就是字段在文本内容出现的次数;感谢观看,有错误的地方 望及时提醒我纠正,谢谢
2021年11月11日
78 阅读
0 评论
1 点赞
1
2