王骏的博客 http://blog.okbase.net/JO2000 PHP数组常用操作备忘 http://blog.okbase.net/JO2000/archive/56608.html JO2000 2018/4/1 10:20:32 添加元素
1)方式1
$arr = array();
$arr[] = 1;
$arr[] = 2;

 

2)方式2
array_push($arr,1,2,3);

 

3)在头部添加
array_unshift($arr, 'joe', 'hank');

 

4)任意位置插入
$arr = array('A', 'B', 'C');
$arr2 = 'abc';
$t = array_splice($arr, 1, 0, $arr2);


array_splice方法,参数一是被操作的数组,参数二是操作元素的索引值,参数三是长度,参数四是要替换成的元素。该方法的效果是删除$arr中以1为起始位置,长度0的连贯的元素,然后用$arr2补上。假如长度为0,那么效果就相当于在指定索引值处插入指定元素了。

 

删除元素
$array = array(0 => "a", 1 => "b", 2 => "c");
array_splice($array, 1, 1); //删除了b

 

 

数组遍历
用foreach(速度最快):
$urls= array('aaa','bbb','ccc','ddd');
foreach ($urls as $url){
echo "This Site url is $url! <br />";
}

 

用for:
for ($i= 0;$i< count($urls); $i++){
$str= $urls[$i];
echo "This Site url is $str.<br />";
}

 

]]>
curl_exec返回false故障一例 http://blog.okbase.net/JO2000/archive/56603.html JO2000 2018/3/27 19:11:56 故障现象:

curl请求http正常,请求https返回false

var_dump(curl_errno($ch)

显示 string(28) "TCP connection reset by peer"

 

加上
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
也没有效果。

 

解决:

指定SSL版本
curl_setopt($ch, CURLOPT_SSLVERSION, 6);

 

 

SSL版本对应的值如下:

CURL_SSLVERSION_DEFAULT (0)
CURL_SSLVERSION_TLSv1 (1)
CURL_SSLVERSION_SSLv2 (2)
CURL_SSLVERSION_SSLv3 (3)
CURL_SSLVERSION_TLSv1_0 (4)
CURL_SSLVERSION_TLSv1_1 (5)
CURL_SSLVERSION_TLSv1_2 (6)

 

]]>
RequestCoreException: cURL resource: Resource id #51; cURL error: SSL certificate problem: unable to get local issuer certificat http://blog.okbase.net/JO2000/archive/56580.html JO2000 2018/3/8 8:15:03 在调试阿里云OSS客户端应用的时候出现错误:

RequestCoreException: cURL resource: Resource id #51; cURL error: SSL certificate problem: unable to get local issuer certificate

 

解决方法:

证书下载地址:
http://curl.haxx.se/ca/cacert.pem

放到服务器,例如:d:/php/php5.5

 

在php.ini添加:
curl.cainfo = "d:/php/php5.5/cacert.pem"

]]>
引用requirejs后Uncaught ReferenceError: BootstrapDialog is not defined http://blog.okbase.net/JO2000/archive/56574.html JO2000 2018/3/5 17:11:46 Require.js和BootstrapDialog有冲突,需要这样:

requirejs(['jquery', 'bootstrap-dialog'], function($, BootstrapDialog) {
    BootstrapDialog.alert('test');
});

]]>
大文件断点续传(几个JS开源库及文章) http://blog.okbase.net/JO2000/archive/56546.html JO2000 2018/2/10 21:24:21 http://www.zhangxinxu.com/wordpress/2013/11/xmlhttprequest-ajax-localstorage-%E6%96%87%E4%BB%B6%E6%96%AD%E7%82%B9%E7%BB%AD%E4%BC%A0/

 

https://github.com/transloadit/uppy

 

https://github.com/23/resumable.js

 

https://github.com/flowjs/flow.js

 

]]>
thinkphp5中的模板引擎 http://blog.okbase.net/JO2000/archive/56506.html JO2000 2017/12/24 14:32:00 1、thinkphp5自带的模板引擎

和tp3中的模板引擎基本一致

 

2、twig模板引擎
http://www.thinkphp.cn/topic/43078.html

 

3、Laravel Blade模板引擎

http://www.thinkphp.cn/extend/946.html

 

4、think-angular 模板引擎
此模板引擎针对能够使用angularjs的php开发者编写, 主要特点是 不需要额外的标签定义, 全部使用属性定义, 写好模板文件在IDE格式化代码的时候很整洁, 因为套完的模板文件还是规范的html
https://www.kancloud.cn/shuai/php-angular

 

5、Smarty
比较古老了。

 

【对比】
smarty与twig的性能对比,结论是twig比smarty慢
http://blog.csdn.net/jaketseng/article/details/7829431

 

twig模板引擎与thinkphp自带模板引擎比较
https://www.jianshu.com/p/d7c931978e37

 

 

]]>
PHP判断是不是通过HTTPS访问 http://blog.okbase.net/JO2000/archive/56505.html JO2000 2017/12/22 19:48:19 有时候$_SERVER['HTTPS']是无法取得值的,保险起见应该这样:

 

$ishttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;

]]>
微擎数据库表结构 http://blog.okbase.net/JO2000/archive/56504.html JO2000 2017/12/20 20:19:21 微擎数据库表结构,供参考!

 

字段名功能
ims_account 公众号账户表
ims_account_wechats 微信公众号账户详情表
ims_account_yixin 易信公众号账户详情表
ims_activity_coupon 折扣券活动表
ims_activity_coupon_allocation 卡券活动投放表
ims_activity_coupon_modules 卡券活动模版表
ims_activity_coupon_password 卡券核销人员密码表设置微信核销人员的帐号信息和密码
ims_activity_coupon_record 卡券使用记录表
ims_activity_exchange 积分兑换表
ims_activity_exchange_trades 兑换商品记录表
ims_activity_exchange_trades_shipping 商品兑换详情表
ims_activity_modules 活动模版使用表
ims_activity_modules_record 兑换记录模版表
ims_activity_stores 门店列表
ims_album 相册列表
ims_album_category 相册分类表
ims_album_photo 相册详情表
ims_album_reply 相册回复表
ims_article_category 文章分类表
ims_article_news 文章新闻表
ims_article_notice 文章提示表
ims_article_reply 文章回复表
ims_article_unread_notice 文章未阅读提示表
ims_basic_reply 基础回复表
ims_bbb_reply
ims_bbb_share
ims_bbb_user
ims_bbb_winner
ims_bi_restaurant_sysset 私厨系统设置表
ims_bigwheel_award 大转盘奖励表
ims_bigwheel_fans 大转盘粉丝表
ims_bigwheel_reply 大转盘回复表
ims_business 商户表
ims_core_attachment 核心文件-附件表
ims_core_cache 核心文件-缓存表
ims_core_menu 核心文件-菜单表
ims_core_paylog 核心文件-支付日志表
ims_core_performance 核心文件-运行情况表
ims_core_qqrobot 核心文件—QQ机器人发送管理表
ims_core_queue 核心文件—队列表
ims_core_queue_backup 核心文件—备用队列表
ims_core_resource 核心文件-资源表
ims_core_sessions 核心文件-进程表
ims_core_settings 核心文件-设置表
ims_core_wechats_attachment 核心文件-微信附件表
ims_coupon 卡券表
ims_coupon_location 店铺信息表
ims_coupon_modules 卡券模块表
ims_coupon_record 卡券核销表卡券核销情况
ims_coupon_setting 卡券设置表主要包括LOGO和白名单
ims_coupon_shakearound 摇一摇周边表
ims_coupon_shakearound_log 摇一摇周边表(日志)
ims_cover_reply 菜单响应表
ims_custom_reply 用户回应表
ims_dqq_award
ims_dqq_reply
ims_dqq_winner
ims_egg_award 砸蛋-奖励表
ims_egg_reply 砸蛋-回复表
ims_egg_winner 砸蛋-胜利表
ims_ewei_exam_course 测试项目表
ims_ewei_exam_course_category 测试项目分类表
ims_ewei_exam_course_reserve 测试项目服务表
ims_ewei_exam_member 测试会员列表
ims_ewei_exam_paper 测试文件表
ims_ewei_exam_paper_category 测试文件-分类表
ims_ewei_exam_paper_member_data 测试文件-会员数据表
ims_ewei_exam_paper_member_record 测试文件-会员记录表
ims_ewei_exam_paper_question 测试文件-提问表
ims_ewei_exam_paper_type 测试文件-分类表
ims_ewei_exam_pool
ims_ewei_exam_question 测试问题表
ims_ewei_exam_reply 测试回复表
ims_ewei_exam_sysset 测试系统设置表
ims_guitar_chord 吉他-和弦表
ims_guitar_english 吉他-中英文对照表
ims_guitar_shoponline 吉他-门店列表
ims_guitar_shopsearch 吉他-门店搜索表
ims_heka_list
ims_heka_reply
ims_hotel2
ims_hotel2_brand
ims_hotel2_business
ims_hotel2_member
ims_hotel2_order
ims_hotel2_reply
ims_hotel2_room
ims_hotel2_room_price
ims_hotel2_set
ims_hx_stores
ims_hx_subscribe_apply
ims_hx_subscribe_article
ims_hx_subscribe_data
ims_ibeacon_activities
ims_ibeacon_activity_gifts
ims_ibeacon_devices
ims_ibeacon_fans
ims_ibeacon_gifts
ims_ibeacon_profiles
ims_ibeacon_records
ims_images_reply
ims_lxy_marry_info
ims_lxy_marry_list
ims_lxy_marry_reply
ims_mc_card 用户卡券表
ims_mc_card_care 用户卡券-关怀表
ims_mc_card_credit_set 用户卡券-信用设置表
ims_mc_card_members 用户卡券-会员表
ims_mc_card_notices 用户卡券-提醒表
ims_mc_card_notices_unread 用户卡券-提醒未阅读表
ims_mc_card_recommend 用户卡券-推荐表
ims_mc_card_record 用户卡券-记录表
ims_mc_card_sign_record 用户卡券-签名记录表
ims_mc_cash_record 用户卡券-现金日志表
ims_mc_chats_record
ims_mc_credits_recharge
ims_mc_credits_record 积分日志表
ims_mc_fans_groups
ims_mc_groups
ims_mc_handsel
ims_mc_mapping_fans
ims_mc_mapping_ucenter
ims_mc_mass_record
ims_mc_member_address
ims_mc_member_fields 微信端用户信息字段设置表
ims_mc_members
ims_mc_oauth_fans
ims_menu_event
ims_mobilenumber
ims_modules
ims_modules_bindings
ims_music_reply
ims_news_reply
ims_old_weixin_fakeid
ims_profile_fields 用户信息字段设置表
ims_qrcode
ims_qrcode_stat
ims_research
ims_research_data
ims_research_fields
ims_research_reply
ims_research_rows
ims_restaurant_address
ims_restaurant_adminset
ims_restaurant_biz_set
ims_restaurant_cart
ims_restaurant_category
ims_restaurant_express
ims_restaurant_fans
ims_restaurant_fans_like
ims_restaurant_genius
ims_restaurant_goods
ims_restaurant_merchant
ims_restaurant_order
ims_restaurant_order_goods
ims_restaurant_reply
ims_restaurant_set
ims_restaurant_shop
ims_restaurant_supply
ims_restaurant_sysset
ims_rule
ims_rule_keyword
ims_shake_member
ims_shake_reply
ims_shopping3_address
ims_shopping3_adminset
ims_shopping3_biz_set
ims_shopping3_cart
ims_shopping3_category
ims_shopping3_express
ims_shopping3_fans
ims_shopping3_fans_like
ims_shopping3_genius
ims_shopping3_goods
ims_shopping3_order
ims_shopping3_order_goods
ims_shopping3_reply
ims_shopping3_set
ims_shopping3_shop
ims_shopping3_sysset
ims_site_article
ims_site_category
ims_site_multi
ims_site_nav
ims_site_page
ims_site_slide
ims_site_styles
ims_site_styles_vars
ims_site_templates
ims_solution_acl
ims_stat_keyword
ims_stat_msg_history
ims_stat_rule
ims_survey
ims_survey_data
ims_survey_fields
ims_survey_reply
ims_survey_rows
ims_uni_account
ims_uni_account_group
ims_uni_account_modules
ims_uni_account_users
ims_uni_group 套餐表
ims_uni_settings
ims_uni_verifycode
ims_userapi_cache
ims_userapi_reply
ims_users 后台登录用户表
ims_users_group 后台登录用户组表
ims_users_invitation
ims_users_permission
ims_users_profile 后台登陆用户信息表
ims_video_reply
ims_voice_reply
ims_vote_fans
ims_vote_option
ims_vote_reply
ims_we7car_album
ims_we7car_album_photo
ims_we7car_brand
ims_we7car_care
ims_we7car_message_list
ims_we7car_message_set
ims_we7car_news
ims_we7car_news_category
ims_we7car_order_data
ims_we7car_order_fields
ims_we7car_order_list
ims_we7car_order_set
ims_we7car_series
ims_we7car_services
ims_we7car_set
ims_we7car_type
ims_weblogin_fakeid
ims_weblogin_fakeid_t
ims_weblogin_mapping_fakeid
ims_weblogin_queue
ims_weihaom_wb_reply
ims_weihaom_wb_user
ims_weipos_employee
ims_weipos_goods
ims_weipos_goods_category
ims_weipos_goods_store
ims_weipos_ibeacon
ims_weipos_ibeacon_log
ims_weipos_member
ims_weipos_member_group
ims_weipos_member_group_mapping
ims_weipos_member_location_log
ims_weipos_member_log
ims_weipos_merchant
ims_weipos_store
ims_weipos_wifi_log
ims_weixin_cookie
ims_weixin_flag
ims_weixin_member
ims_weixin_shake_toshake
ims_weixin_vote
ims_weixin_wall
ims_weixin_wall_num
ims_weixin_wall_reply
ims_wxwall_award
ims_wxwall_members
ims_wxwall_message
ims_wxwall_reply
ims_zzz_reply
ims_zzz_share
ims_zzz_user
ims_zzz_winner
pre_blueidea_weixin_member
pre_weixin_fakeid
pre_weixin_member
]]>
记一次MySQL高并发时CPU占用率达到100%问题的解决 http://blog.okbase.net/JO2000/archive/56493.html JO2000 2017/12/10 19:43:25 系统是在ecshop基础上做的定制,siege进行压力测试访问category.php时,50用户100次就使CPU占用率达到100%,系统停止响应。

按照《解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记 https://www.xiaohui.com/weekly/20070307.htm》一文提供的方法优化了mysql的配置,情况依旧。
因没有SUPER权限,用show processlist;没啥效果,所以只能手工检查代码。

 

includes目录下的cls_mysql.php中的query函数是所有SQL执行时最终调用的函数。当DEBUG_MODE=8时会记录所有sql语句到log文件中。

 

一、发现重复执行的数据库操作函数
执行一次category.php后,得到所有SQL命令,发现里面有大量重复执行的SQL。到底是谁调用了这些SQL命令,在query函数里加上:
if(strpos($sql, '这里填SQL语句的关键词') > 0) {
$array = debug_backtrace();
print_r($array);
}

打印出调用堆栈,比较容易地找到调用源头。发现在一个循环中调用了重复的数据库操作函数,将之移出。

 

二、发现未索引的表
在SQL命令前加上EXPLAIN,例如 EXPLAIN SELECT * FROM ecs_products WHERE product_id=1000; 这样很容易找到索引没有起作用的SQL命令。

 

经过这两项修改,成功地解决了MySQL高并发时CPU占用率达到100%的问题。

]]>
重装Windows默认TCP/IP协议(亲测有效) http://blog.okbase.net/JO2000/archive/56461.html JO2000 2017/11/25 20:40:45 1、运行regedit.exe,打开注册表编辑器,删除以下两个键(删除前可以导出备份一下):

HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Winsock
HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Winsock2

 

2、用记事本打开c:\windows\inf\nettcpip.inf文件,找到:
[MS_TCPIP.PrimaryInstall]
Characteristics = 0xa0 <------把此处的0Xa0改为0x80 保存退出

 

3、打开本地连接的TCP/IP属性,添加协议,从磁盘查找,浏览找到刚刚保存的nettcpip.inf或者nettcpqmt.inf(X:/windows/inf/)文件,然后选择“TCP/IP协议”(不是选择那个TCP/IP 版本6)。
经过这一步之后,又返回网络连接的窗口,但这个时候,那个“卸载”按钮已经是可用的了。点这个“卸载”按钮来把TCP/IP协议删除,然后重启电脑。

 

4、重启后再照着第3步,重新安装一次TCP/IP协议。

 

5、再重启一次,这时就可以了,可以照着需要,设置一下IP地址。

]]>