诗和田野

生活不苟且


  • 首页

  • 标签

  • 分类

  • 归档

mac下phpstorm配置xdebug

发表于 2017-09-18 | 分类于 php

mac下phpstorm配置xdebug

准备工作

  • 你有phpstrom,同时安装了homebrew

开始工作

习惯了用echo和var_dump(),但是每一次都需要去查找是哪个部分出了错误,这样你就要去写好多的echo或者var_dump去定位到底是哪里出了错误,同时,我们用的是phpstorm IDE啊这样的编辑器必要要好好利用下了

1、安装xdebug

1
2
这个应该简单了
brew install xdebug //根据你自己的php版本进行选择xdebug的版本

2、配置xdebug
因为是用brew安装的所以这个文件是在 /usr/local/etc/php/5.6/conf.d目录中ext-xdebug.ini

1
2
3
4
5
6
7
8
xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host= localhost
xdebug.idekey = PHPSTORM
xdebug.remote_autostart=1 //主要 这个一定要配置,
xdebug.remote_enable=1
xdebug.remote_mode="req"
xdebug.remote_port=9001 //这个是在phpstorm中配置debug端口和http代理端口

3、配置phpstorm

  • 进入File>Settings>PHP>Debug,看到XDebug选项卡,port填9001,其他默认
  • 进入File>Settings>PHP>Servers,host 填localhost,port 填80
  • 进入File>Settings>PHP>Debug>DBGp Proxy,IDE key 填 PHPSTORM,host 填localhost,port 填80

4、下面就可以进行测试了哦,在phpstorm的右上角有个debug的配置,然后填写你要启动的页面就可以了

总结

good luck

mac配置ssh秘钥登录

发表于 2017-09-16 | 分类于 linux服务器

mac配置ssh秘钥登录

准备工作

  • 已经安装了ssh以及sh-copy-id(用于将秘钥copy到远处服务器)

开始工作

  • 生成本地秘钥

    1
    2
    3
    ssh-keygen -t rsa -C 'message'
    -t :秘钥的类型
    -C :描述 可省略
  • 将秘钥上传到远处服务器

    1
    2
    3
    scp ~/.ssh/id_rsa.pub 你服务器登录名@IP地址:~/
    注意的是这里默认是你的~/下面有.ssh目录,如果没有,请
    mkdir .shh
  • 配置config快速登录

    现在配置完成后是要需要

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ssh Username@HostIP
    然后输入密码的
    ```
    so
    下一步我们要省去这一步
    ```bash
    vim ~/.ssh/config 建立config文件
    内容为:
    Host alias #自定义别名
    HostName hostname #你的ssh服务器ip
    Port port #ssh服务器端口,默认为22
    User user #ssh服务器用户名
    IdentityFile ~/.ssh/id_rsa #的公钥文件对应的私钥文件

    我们这样就可以用

    1
    ssh 你定义的别名进行免密码登录了

总结

这种方式方便快捷而且不会忘记密码哦

php spl_autoload_register 与命名空间

发表于 2017-09-13 | 分类于 php

php spl_autoload_register 与命名空间

准备工作

  • 无

开始工作

打开php官方文档:

spl autoload register — 注册给定的函数作为 __autoload 的实现

将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。

如果在你的程序中已经实现了autoload()函数,它必须显式注册到autoload()队列中。因为 spl_autoload_register()函数会将Zend Engine中的__autoload()函数取代为spl_autoload()或spl_autoload_call()。

如果需要多条 autoload 函数,spl_autoload_register() 满足了此类需求。 它实际上创建了 autoload 函数的队列,按定义时的顺序逐个执行。相比之下, __autoload() 只可以定义一次。

我们实现一个自动加载类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
我们新建一个lib.php
class CommonLib{
public static function start(){
spl_autoload_register('Lib\CommonLib::autoLoad');
}
public static function autoLoad($className){
if(false !== strpos($className,'\\')){
$name=strstr($className,'\\',true);
if(in_array($name,array('db','cache'))){
$path='./frame';
}else{
$path=dirname($path);
}
}
$fileName= path.DIRECTORY_SEPARATOR. str_replace('\\', '/', $className) . '.php';
if(file_exists($fileName)){
$fileName= strtolower(str_replace("\\", "/", $fileName));
require_once $fileName;
}
}
}

在上面的代码中我们做了对命名空间的处理,我们知道当我们引用

1
2
3
4
5
6
namespace A
class Test1{
}
我们实例化Test1的时候
必须是new A\Test1();或者用use 引用 use A\Test 这样才可以是new Test1()

但是在spl autoload register加入了命名空间后,实际上是include或者require的是A\Test1.php。很显然这个文件是不存在的所以加上namespace后spl autoload register就不好用了

在这样的情况下我们需要单独进行处理,我们对实例化的类分离出namespace和类名

1
2
3
4
$name=strstr($className,'\\',true);//获取文件夹名字
然后处理特殊的路径,比如我们需要加载系统自带的db类,或者缓存类
然后判断文件是否存在,注意:在linux中系统自带的斜杠是不一样的
require_once $fileName;

总结

其实好多人关于命名空间和自动加载的认识是错误的,因为他们之间没有关系,之所以用命名空间自动加载不好用是因为你没有引入正确的文件,如此而已

使用xhprof测试php代码性能

发表于 2017-09-12 | 分类于 php

mac下使用xhprof测试php代码性能

准备工作

  • 安装了brew

开始工作

关于xhprof:

XHProf 是一个分层PHP性能分析工具。它报告函数级别的请求次数和各种指标,包括阻塞时间,CPU时间和内存使用情况。一个函数的开销,可细分成调用者和被调用者的开销。原始数据收集部分是用纯C实现的,是一个名叫xhprof的 Zend扩展 。XHProf有一个简单的HTML的用户界面( PHP写成的)。基于浏览器的性能分析用户界面能更容易查看,或是与同行们分享成果。也能绘制调用关系图。

XHProf 报告往往可以有助于理解被执行的代码的结构。的等级性质的报告可用来确定,例如,什么链要求导致了所谓的特殊功能得到。

XHProf 可以比较两次运行的结果(又名“差异报告”)或是从多次运行得到的汇总数据。差异和汇总报告,就像单一运行报告一样,也提供“平板”以及“分层”的性能分析视图。
XHProf 是一种轻量级的性能分析工具。在数据收集阶段,它记录调用次数的追踪和包容性的指标弧在动态callgraph的一个程序。它独有的数据计算的报告/后处理阶段。在数据收集时,XHProfd通过检测循环来处理递归的函数调用,并通过给递归调用中每个深度的调用一个有用的命名来避开死循环。

XHProf 的轻量级性质和汇聚功能,使得它非常适合用于收集“生产环境”的性能统计数据的统计

利用brew安装xhprof

1
brew install homebrew/php/php56-xhprof

然后在电脑中brew默认的安装位置会出现xhprof_html和xhprof_lib两个文件夹,将这个两个文件夹copy到你自己的www目录中你自己建立的文件夹中

1
2
cp -r xhprof_html /usr/local/www/xhprof
cp -r xhprof_lib /usr/local/www/xhprof

同时在www目录中的xhprof中建立一个xhprof_run文件夹,这里是作为测试文件的输出文件
然后在php的配置文件中配置

1
xhprof.output_dir=/usr/local/www/xhprof/xhprof_runs/

因为是使用了brew所以配置文件是在conf.d中的ext-xhprof.conf中的
以上配置完成后我们再利用Nginx配置一个现实的网站,

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name www.xhproftest.com xhproftest.com;
root /usr/local/www/xhprof/xhprof_html;
index index.html index.php;
location ~ \.php$ {
fastcgi_pass php_pool;
fastcgi_index index.php;
include fastcgi.conf;
}
}

重启php和nginx

下一步我们就是在代码中使用xhprof了,

1
2
3
4
5
6
7
8
9
xhprof_enable();//开启xhprof
‘..........'这里是你要测试的代码
$xhprof_data = xhprof_disable();//开启展示
include_once "/usr/local/www/xhprof_lib/utils/xhprof_lib.php";
include_once "/usr/local/www/xhprof_lib/utils/xhprof_runs.php";
//引入以上两个文件,这里的文件在xhprof_lib中
$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof");
echo $run_id//输出的文件会根据run_id在xhprof中生成展示文件。我们可以利用run_id查看图形化输出

我们可以访问http:///index.php?run=run_id&source=xhprof这里的我们就是在Nginx配置的域名xhproftest.com,run_id就是输出的run_id
至此我们已经配置完成了

最后给出php官方文档中的地址:http://php.net/manual/zh/book.xhprof.php

  • ps:安装graphviz,生成程序运行的流程图
1
brew install graphviz

总结

有些时候php程序运行太慢了我们就可以看到到底是什么拖慢了运行速度了

mac下vim安装YouCompleteMe

发表于 2017-09-09 | 分类于 便捷工作

mac下vim安装YouCompleteMe

准备工作

  • 有一台mac电脑
  • 安装了vim
  • 安装了brew

开始工作

很久以前,我一直在用vi命令来进行文件的操作,因为vi只有两个字母,后来才发现其实用vim远比vi命令要好用的多,因为vim是vi命令的升级版,所以那些用vi的朋友,建议还是用vim来代替吧

闲话不多说,开始工作了!

YouCompleteMe是一个神一样存在的自动补全插件,堪比IDE的自动补全功能,所以在我们用vim编写一些代码的时候(当然可能很少)可以给我们提示,我相信大多数的程序猿是记不住那么多的语言的函数的,即便记住可能也不会拼写对吧,所以这个就有用了。

YouCompleteMe至少得vim7.4.1+以上才能支持,而我的mac是7.4所以我们先要升级下自己的vim版本

1
2
brew install mercurial
brew install vim

然后重启终端,输入

1
vim --version

你会发现vim已经升级到8.0了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
安装Vundle
$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
创建配置文件
vim ~/.vimrc
在配置文件中写入,在begin和end之间写入要加载的插件
call vundle#begin()
Plugin 'Valloric/YouCompleteMe'
call vundle#end()
打开vim 运行
PluginInstall
这样就安装完成了
下面进行编译,这里需要用到cmake,如果没有安装,请用brew安装
cd ~/.vim/bundle/YouCompleteMe
./install.sh
下面是在.vimrc中的一些配置,当然你也可以不用哦
" 自动补全配置
set completeopt=longest,menu
" "让Vim的补全菜单行为与一般IDE一致(参考VimTip1228)
autocmd InsertLeave * if pumvisible() == 0|pclose|endif
" 离开插入模式后自动关闭预览窗口
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
" 回车即选中当前项
" 上下左右键的行为 会显示其他信息
inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>"
inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>"
inoremap <expr> <PageDown> pumvisible() ? \<PageDown>\<C-p>\<C-n>" : "\<PageDown>"
inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" :"\<PageUp>"

总结

have a good time

python Django部署

发表于 2017-09-06 | 分类于 python

准备工作

  • python环境(pip等)
  • Django已经按照完成
  • nginx按照

以上是基本的条件,如果没有安装,请安装完

开始工作

我们使用的是gunicorn+supervisor进行部署和进行进程管理
首先安装gunicorn

1
pip install gunicorn

gunincorn的基本用法

1
gunicorn -w 4 -b 0.0.0.0:8001 XXX.wsgi #XXX为你自己的项目的项目名

安装supervisor,supervisor是一个专门进行项目进程管理的插件
安装命令

1
pip install supervisor

我们首先要建立一个基本的配置目录

1
echo_supervisord_conf > /etc/supervisord.conf #生成默认的配置文件

在目录的最底部我们修改成,然后在相应的位置建立/etc/supervisor/conf.d/ 目录

1
2
[include]
files = /etc/supervisor/conf.d/*.conf

我们所有的配置文件都放到conf.d 目录下,在conf.d目录下建立testDjango。conf

1
2
3
4
5
6
7
[program:testDjango] #项目名
directory = /data/pyhontwww/pythonDjango/django1 ;项目目录地址
command=gunicorn -w4 -b0.0.0.0:8001 django1.wsgi ;启动项目命令
startsecs=0 ;启动0秒后没有异常退出
stopwaitsecs=0 ;等待0秒后没有异常退出
autostart=true ;在 supervisord 启动的时候也自动启动
autorestart=true ;程序异常退出后自动重启

supervisor的基本命令

1
2
supervisorctl start | stop | reatart 项目名
或者 all 启动全部

通过上面的命令 我们在8001上建立了一个项目,其实如果开启8001端口是可以在外网直接访问的,但是也可以用Nginx做映射

1
2
3
4
5
6
7
8
9
10
11
server {
listen 80;
server_name 你的服务名;
access_log /var/log/nginx/isaced.log;
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

这样我们就可以在80端口进行访问了

总结

我们用gunicorn+supervisor部署了Django系统,同时用Nginx进行了端口的映射

hexo上传到GitHub

发表于 2017-09-01 | 分类于 hexo

准备工作

  • hexo已经按照完成
  • 已经注册GitHub账户

开始工作

  • 在github账户中建立一个新的代码库名字就是你用户名+.github.io,
  • 例如我的用户名为henry2young 那么我建立的仓库为henry2young.github.io
  • 建立成成功后即便可以访问https://henry2young.github.io/

在你的hexo项目目录配置文件中找到

1
2
3
4
deploy:
type: git
repo: https://github.com/henrY2Young/henrY2Young.github.io
branch: master

然后按自己的情况进行配置,运行

1
hexo d #如果没有报错就能在网页上浏览了

下面总结下发布的总体流程吧

1
2
3
hexo new "新的文章"
hexo g 生成新的静态文件
hexo d 发布到GitHub

总结

我们可以买一个域名然后将域名指向Github,这里我就不操作了,因为我米有域名。还有就是写文章的时候用到的MarkDown语法,它是一个让你专心于码字,而不用担心排版的标记语言,有机会可以总结下方法写下来

hexo 修改主题

发表于 2017-09-01 | 分类于 hexo

准备工作

  • 查看好你想要的主题
  • 然后下载下来

开始工作

  • 我们先准备一个新的主题,比较有名的就是NexT了,下面以他为例,

下载主题

1
2
进入你的hexo项目中
git clone https://github.com/iissnan/hexo-theme-next themes/next # 下载主题到themes下面的next文件夹下

修改显示主题
在项目目录下查找_config.yml找到theme

1
theme: next 将主题名给我next,注意的是在next前面有个空格
1
hexo s --debug 重启服务,用debug的模式启动

设置语言与网站名以及语言和时区

1
2
3
4
5
6
title: 诗和田野 网站名称
subtitle: 生活不苟且 子名称
description: 网站简介
author: Herry 作者名
language: zh-Hans 简体汉语
timezone: Asia/Shanghai 时区

设置Scheme
在主题目录下找到_config.yml可以设置Scheme主题

1
2
3
4
5
# Schemes
#scheme: Muse
#scheme: Mist
scheme: Pisces
#scheme: Gemini

设置菜单
同样在主题目录的配置文件中menu配置

1
2
3
4
5
6
7
8
9
menu:
home: / || home /为url链接。home为显示的图标
#about: /about/ || user
tags: /tags/ || tags
categories: /categories/ || th
archives: /archives/ || archive
#schedule: /schedule/ || calendar
#sitemap: /sitemap.xml || sitemap
#commonweal: /404/ || heartbeat

然后可以新生成page

1
2
hexo new page tags 生成标签页 路径
hexo new page categories 生成分类页面

然后就可以测试了

1
hexo s -debug

基本的设置就是这样,如果还要有什么改动可以参考http://theme-next.iissnan.com/theme-settings.html进行配置

总结

我们跟换了主题同,下面我们将要写一些文章,然后利用GitHub免费建立一个博客

Hexo 建立你的博客

发表于 2017-09-01 | 分类于 hexo

利用hexo建立你的博客

准备条件

  • node运行环境;
  • git环境(需要去github上拉取代码,同时以后也可以用这个把代码push到github上去)

开始工作

1、全局安装hexo 如果npm太慢可以设置淘宝镜像,或者直接安装cnpm

1
npm i -g hexo

2、初始化hexo

1
2
3
4
5
hexo init hexoName #hexoName为你想建立的hexo目录
cd hexoName
npm install #安装各类包
hexo g #自动生成静态文件
hexo s #运行服务

在不报错的情况下,打开 http://localhost:4000/ 就可以访问了,如果提示端口被占用可以用

1
hexo s -p 1234 #1234为你指定的端口号

当然这个是默认的hexo的主题,下一步我们要变换主题,同时还有上传到git免费的域名上

hexo常用的命令

1
2
3
4
5
6
hexo clear 删除生成的静态文件
hexo g 生成静态文件,即你访问的页面
hexo s 启动hexo服务
hexo d 部署
hexo init 初始化
hexo new 新建立文章或者页面

总结:

hexo是一个比较简单好用的博客框架,同时有很多的主题供大家选择,提供给大家一个网站https://hexo.io/themes/里面有好多hexo 的主题,下一篇文章我们将介绍如何修改主题,

生活随笔

发表于 2017-09-01 | 分类于 生活随笔

第一篇文章

Herry

Herry

10 日志
6 分类
12 标签
© 2017 Herry
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.2