在win7中搭建Linux+PHP 开发环境


Posted in PHP onOctober 08, 2014

我用了 3 年多的 Linux 桌面,很是不爽,主要是各个软件的体验不够统一,太分裂,太多选择让人无从选择。
而回到 Windows, 则更糟糕,使用 *nix 工具集变得非常折腾,部署 Web 环境也很麻烦,而且我的服务器都是 Linux 的,代码里有些功能是不能运行在 Windows 上的。

因为我偶尔还打打游戏,一个月前,我还是选择回到 Windows 桌面。
但我下面的这些软件几乎都是跨平台的,如果你使用 Linux 桌面,也不会有什么影响的。

我的主机是 Windows 7 x64, 然后跑一个 Arch 的虚拟机,所有代码的运行和调试都在虚拟机中进行。

Arch 虚拟机

Arch 安装略折腾,但我喜欢它 KISS 的哲学,我用 VirtualBox, 分配 512MiB 甚至 256MiB 就够用了。
网络改成「桥接网卡」然后在路由器设置一个 MAC 绑定的固定 IP, 我给虚拟机的是 192.168.0.105, 而我主机的是 192.168.0.100.

需要装的软件包最核心的有:openssh, nginx, mariadb, php, xdebug.
至于其他一些:vim, mongodb, php-mongo, phpmyadmin 就看个人需要了。

直接在 VirtualBox 的虚拟机窗口上敲命令很不方便,我会装一个叫 VirtuaWin 的虚拟桌面软件,类似于 KDE 的 Workspace(工作区), 把 VirtualBox 的窗口丢到另一个桌面。
然后用 XShell 连 SSH 上去敲命令。

当然你还需要建一个非 root 账户来日常使用,我建了一个 jysperm.
然后你可以修改 /etc/php/php-fpm.conf:

user = jysperm
group = jysperm
这样 PHP-FPM 的进程会以你的用户来跑,读写文件不会遇到任何权限问题。

作为开发服务器,可能同时需要开发测试多个项目,每次都要去 Nginx 里面新建站点是很折腾的事情,下面的配置文件可以让你一劳永逸:

server {

    listen 80;

    server_name ~(?<dir>.*)\.ab\.jyprince\.me$;
    access_log /home/jysperm/nginx.access.log;

    error_log /home/jysperm/nginx.error.log;
    index index.html index.php;

    autoindex on;
    root /home/jysperm/$dir;
    location / {

        try_files $uri $uri/ /index.php?$args;

    }
    location ~ \.php$ {

        fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;

        include fastcgi_params;

    }

}

*.ab.jyprince.me 这个域名被我解析到了 192.168.0.105, 这样下来,只需访问 test.ab.jyprince.me, 就相当于访问位于 /home/jysperm/test 中的文件了,以后就不用再修改 Nginx 的配置文件了。

PHPStorm

我见过最好的 IDE 是 PHPStorm.

PHPStorm 的 Deployment 功能可以在你每次修改文件后自动部署到服务器,你只需建一个 SFTP 类型的服务器,并把 Arch 虚拟机的信息填上去,然后勾选 Automatic Upload 就好。
每一个项目都上传到 /home/jysperm 下的一个文件夹。

然后访问 项目名.ab.jysperm.me 就行了,一切都是自动的。

远程调试

在 Arch 虚拟机中修改 /etc/php/conf.d/xdebug.ini:

zend_extension=/usr/lib/php/modules/xdebug.so

xdebug.remote_enable=on

xdebug.idekey=jysperm

xdebug.remote_host=192.168.0.100

xdebug.remote_port=9000

然后在 PHPStorm 中新建一个 PHP Remote Debug 即可。
需要调试时,先在 PHPStorm 中打开调试,设上断点,然后让请求带上 XDEBUG_SESSION=jysperm 的 Cookie 即可。
调试页面的时候,可以用 这个工具 生成书签,点击书签就可以控制调试的开关了。

调试 RESTful API 的话我一般会用一个叫 Postman 的 Chrome 扩展,这个应用似乎没有编辑 Cookie 的功能,这样的话,在 HTTP Header 里加上一项 Cookie:XDEBUG_SESSION=jysperm 就行了。

其他推荐

Robomogo - 跨平台的 Mongo GUI 客户端
SourceTree - Windows 下的 Git GUI
Secure Shell - Chrome 中的 SSH
Clover - 让 Windows 的资源管理器像 Chrome 一样
FileZilla - 跨平台的 FTP 客户端
SmartGit - 跨平台的 Git GUI
Sublime Text - 好用的跨平台编辑器

PHP 相关文章推荐
PHP 操作文件的一些FAQ总结
Feb 12 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
php通过ajax实现双击table修改内容
Apr 28 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
php中使用sftp教程
Mar 30 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP内置函数生成随机数实例
Jan 18 PHP
PHP时间函数使用详解
Mar 21 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
两千行代码的PHP学习笔记汇总
Oct 05 #PHP
PHP实现定时执行任务的方法
Oct 05 #PHP
PHP实现图片旋转效果实例代码
Oct 01 #PHP
PHP实现图片裁剪、添加水印效果代码
Oct 01 #PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 #PHP
PHP的switch判断语句的“高级”用法详解
Oct 01 #PHP
php中文字符串截取方法实例总结
Sep 30 #PHP
You might like
社区(php&amp;&amp;mysql)五
2006/10/09 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP框架性能测试报告
2016/05/08 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
2010/04/01 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
javascript常用方法汇总
2014/12/02 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
[03:09]显微镜下的DOTA2第一期——带你走进华丽的DOTA2世界
2014/06/20 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
Python装饰器简单用法实例小结
2018/12/03 Python
在Python中字典根据多项规则排序的方法
2019/01/21 Python
详解Python解决抓取内容乱码问题(decode和encode解码)
2019/03/29 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
Python实现数值积分方式
2019/11/20 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
2020/03/27 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
python如何写出表白程序
2020/06/01 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
客服端调用EJB对象的几个基本步骤
2012/01/15 面试题
王老吉广告词
2014/03/20 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
基于Golang 高并发问题的解决方案
2021/05/08 Golang