九月 21st, 2016 by lanxinxichen@126.com

 
最近做的一个二开开源项目,项目本身使用的是“优雅”的laravel框架开发的,我也顺带着了解了一下laravel框架。由于项目需要多平台的会员数据统一,所以第一时间想到用UCenter进行会员整合。
上次使用UCenter的时候还是2014年,那时候的会员整合我不负责,也就没在这上面下太多功夫,终于这次揭开了UCenter神秘的面纱。
安装后的首页
ucenter1
应用列表
ucenter2
首先,先添加一个新应用,填写相应的表单。应用接口文件名称需要填写应用的路由地址,这个可以先空着,填写完毕之后保存,此时的通信情况应该是通信失败的。
在github上面我们能找到好几个关于laravel – Ucenter的项目,我自己根据看根据别人的项目修改了bug:https://github.com/lanxinxichen/laravel5-ucenter ,另外推荐尝试https://github.com/binaryoung/ucenter,个人感觉比我fork的这个好一些。

安装UCenter

只要在你的 composer.json 文件require中加入下面内容,就能获得最新版.
“goodspb/laravel5-ucenter”: “dev-master”
然后需要运行 “composer update” 来更新你的项目
安装完后,在 app/config/app.php 文件中找到 providers 键,添加:
Goodspb\Laravel5Ucenter\UcenterServiceProvider::class,
找到 aliases 键,添加:
‘Ucenter’ => Goodspb\Laravel5Ucenter\Facades\Ucenter::class,
 
他这个版本config::get是有问题的,可以参看我的修改记录进行修改。
https://github.com/lanxinxichen/laravel5-ucenter/commit/01d4714174ae4acba3aa9fcfef6bfb6b931e1aa2
在config文件中增加一个ucenter.php的文件,然后添加以下内容
 
<?php
return [
‘url’       => env(‘ucenter_url’,’/api/ucapi’), // 网站UCenter接受数据地址
‘api’       => env(‘ucenter_api’,’http://www.ucn.net’), // UCenter 的 URL 地址, 在调用头像时依赖此常量
‘connect’   => env(‘ucenter_connect’,’mysql’), // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen()
‘dbhost’    => env(‘ucenter_dbhost’,’localhost’), // UCenter 数据库主机
‘dbuser’    => env(‘ucenter_dbuser’,’root’), // UCenter 数据库用户名
‘dbpw’      => env(‘ucenter_dbpw’,”), // UCenter 数据库密码
‘dbname’    => env(‘ucenter_dbname’,’ucenter’), // UCenter 数据库名称
‘dbcharset’ => env(‘ucenter_dbcharset’,’utf8′),// UCenter 数据库字符集
‘dbtablepre’=> env(‘ucenter_dbtablepre’,’uc_’), // UCenter 数据库表前缀
‘key’       => env(‘ucenter_key’,’76bc3bbK5aoWVrb26juV1vk4uq4c2aSNQvzv70Zs12′), // 与 UCenter 的通信密钥, 要与 UCenter 保持一致
‘charset’   => env(‘ucenter_charset’,’utf-8′), // UCenter 的字符集
‘ip’        => env(‘ucenter_ip’,’127.0.0.1′), // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值
‘appid’     => env(‘ucenter_appid’,2), //当前应用的 ID
‘ppp’       => env(‘ucenter_ppp’,20), //当前应用的每页数量
];
注意:上面的配置根据自己实际环境进行修改。
 

配置路由

在项目中的相应位置添加通信api的路由
Route::any(Config::get(‘ucenter.url’), function(){
return \Goodspb\Laravel5Ucenter\UcenterApi::execute();
});
 
这时候就可以返回UCenter应用管理中心,把之前空的接口文件路由修改为自己定义的路由,比如我设置的路由是/api/ucapi那么在填写的时候需要填写ucapi,不带/api/。因为我在这里被坑了,所以附上通信接口调试文章https://my.oschina.net/ppss/blog/744743    
ucenter3
通信成功!
 
可以通过以上链接里面的办法把接口通信调试成功,然后就是实现自己的业务逻辑了。

Posted in PHP Tagged with: , ,

九月 21st, 2016 by lanxinxichen@126.com

laravel
最近一直在专心复习java,而且打算完全转型java,所以自认为这是我PHP项目生涯的末期。然而在这段日子里,我有幸接触了大名鼎鼎的Laravel。
从开始接触到现在也不过短短三天时间,只简单把运行原理搞懂了,所以如果本文有失偏驳,与您观点不符,那实在是抱歉,反正我也不改。
接触Laravel之前,只听外界她的优雅,接触之后才感慨实至名归。当然也发现了另外一个与优雅齐名的缺点:慢。本篇文章并不打算介绍Laravel的入门,单纯吐槽一下最近使用的真实感受。
Laravel 对PHP版本要求比较高,放眼国内,虚拟主机的php版本都还停留在5.3的水平,再加上composer这种新概念的冲击(还有网络访问比较困难),Laravel在国内出现了水土不服的现象。熟悉java,Python,Nodejs的人对包管理一定不会陌生,java的Maven,Python的pip,Nodejs的npm都是使用起来特别爽的,简简单单的命令行就能实现下载/更新依赖了,composer也是如此,只不过是专门针对PHP的包管理。Laravel 注重快捷高效的开发,当你通过composer全局安装Laravel,并将其加入到环境变量之后,直接通过“laravel new project”就能创建项目了,并且内置了artisan实用的命令行工具,配合Phpstorm让开发效率进一步提升。配置Phpstorm 配置artisan命令行
Laravel依托于composer,所以项目搬迁以及升级都会非常方便。方便是建立在熟悉并知道如何使用的情况下,我在整合laravel和UCenter的时候也遇到了很多问题,一来是文档不够完善,二来就是提问的人太少了,很难找到解决问题的办法,只能靠自己一点儿一点儿琢磨。
Laravel 实在是太慢了。只要在google上面搜索laravel slow,就能找到很多吐槽文章。针对我目前这个项目,平均每个网页访问时间都要在1.3~1.7秒,这速度根本不能忍吧。尽管了我已经做了一些优化工作,比如routes cache,config cache,class optimize,开启opcache,也只是略微改善,并没有提高多少速度,相比以前开发的项目,她的速度简直是惨不忍睹。想到这里我把标题中的“优雅”两个字删掉了。据说Lumen是速度很快,没有亲自体验。
客观来讲,对Laravel接触时间还是太短了,我这只能算个Laravel的初体验。毋庸置疑的是,借助composer上面优秀的库,Laravel对大项目的开发速度肯定会有所提高,包括她对RESTful 的友好支持都是让人心动的,对于小项目而言,选择其他框架可能是更好的选择。
 
最后,恶趣味的我专门在博客园找了一篇对Laravel的吐槽十分精彩的文章(包括评论):
http://www.cnblogs.com/yjf512/p/4031782.html#top

Posted in PHP Tagged with: ,

四月 25th, 2016 by lanxinxichen@126.com

apache-tomcat
我之前的技术方向是PHP,现在是做java,暂且不提两门语言谁优谁劣,我就是感觉什么方便就用什么,适合用什么就用什么.现在做的NLP项目是基于java的web项目,想要在PHP的官网上面挂出来,方法有很多,比如:后端json API转化;无视端口的不一样,前端直接jsonp,当然最简单的办法就是今天提到的apache跟tomcat的整合.博主本身只是刚刚学会了,过程太顺利了,反而害怕以后会不会有什么隐患.遇到问题,以后继续更新在这里.
由于是tomcat跟apache的整合,那我就默认环境中已经有了这两个服务器软件,单纯运行的服务器配置就不再讲解了,只着重讲整合中需要做的工作.
首先打开apache的配置文件:http.conf
在http.conf中打开模块支持:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

如果在你的Apache/modules路径下没有这两个模块,请从我提供的百度云盘上面下载.百度云盘-php-apache-module,我这一步配置走的很顺,如果做完这一步apache启动不起来,就自己找匹配的模块吧.我用的集成环境,没有花时间在这个上面折腾.
然后配置转发请求到tomcat.
在http.conf中引入一个额外的配置文件httpd-proxy.conf,引入方式:Include conf/extra/httpd-proxy.conf,注意路径跟你放置的文件匹配起来.在配置文件中写入你要转发的请求.比如我现在的配置是:
ProxyPass /java/ ajp://127.0.0.1:8009/java/
ProxyPassReverse /java/ ajp://127.0.0.1:8009/java/
这个配置文件的意思是当我收到/java/的请求的时候通过ajp协议转发到ajp://127.0.0.1:8009/java/的URL请求中,其他的就没有什么可玩的了.具体的ProxyPass和ProxyPassReverse使用可以参看这里Apache配置中的ProxyPass 和 ProxyPassReverse .
总结以下:其实来讲这些东西思路都是一样的,就是代理的思想,我们平时遇到的负载均衡,cname请求转发,fq软件都是这个道理,只不过在服务器层间的转发或者封装了的转发要省很多事.需要注意的是路径的映射,从apache中配置的路径转发到tomcat的路径的时候需要对应起来,如果有同名的注意会不会覆盖请求.
参考文章:
Tomcat: Connector中HTTP与AJP差别与整合 – arun_yh – 博客园
整合apache和tomcat构建Web服务器 – iTech – 博客园

Posted in Java, PHP, 服务器 Tagged with: , , ,

五月 26th, 2015 by lanxinxichen@126.com

在做第三方接口对接的时候,有些数据返回的都是json字符串,所以在处理的时候,有时候需要将json字符串给存到数据库中,因为在ecshop 中全部用的都是sql语句插入的,所以有时候json字符串中有一些非法字符,会吧sql语句给中断,比如”()”这种.
为了避免出现这种问题,使用mysql_real_escape_string函数给转化成对数据库安全的字符串.
然而在转化的时候,把一些不希望存入数据库的一些字符串页给转化了一下.之后在用explore处理该字符串的时候,一直报错,并且看到的字符串是乱码的.
开始以为是编码方式和字符集的问题,于是使用iconv 和mb_detect_encoding mb_convert_encoding 去转化,都无法生效,同样的explore也无法分割.直到发现是mysql_real_escape_string的原因…
所以转移字符并不是什么地方都可以使用的.

Posted in 数据库 Tagged with: , , ,