Mac下快速搭建PHP开发环境步骤详解
最近做了一个后端的项目,是用PHP+MySQL+Nginx做的,所以把搭建环境的方法简单总结一下。
备注:
物料:Apache/Nginx+PHP+MySQL+MAMPMac OS 10.12.1 自带Apache,Nginx和PHP
1.运行Apache
查看Apache版本,在终端根目录输入如下命令:
sudo apachectl -v
终端会输出Apache的版本及built时间
Server version: Apache/2.4.23 (Unix) Server built: Aug 8 2016 16:31:34
开启Apache
sudo apachectl start
开启后,可以通过浏览器访问:http://localhost,页面显示“It works” 表示已经成功。
关闭Apache
sudo apachectl stop
重启Apache
sudo apachectl restart
2.配置PHP
编辑Apache的配置文件,终端输入:
sudo vi /etc/apache2/httpd.conf
找到:
#LoadModule php5_module libexec/apache2/libphp5.so
去掉前面的“#”号注释,然后 :wq 保存退出即可
复制一份php.ini.default并将其命名为php.ini即可
sudo cp /etc/php.ini.default /etc/php.ini
重启Apache,使其生效
sudo apachectl restart
3.安装MySQL
下载MySQL:http://dev.mysql.com/downloads/mysql/ 下载后双击安装,成功之后,会弹出提示框:
017-02-12T09:00:08.587153Z 1 [Note] A temporary password is generated for root@localhost: s;QVTg#=i7wP If you lose this password, please consult the section How to Reset the Root Password in the MySQL reference manual.
这个临时密码不好记,可以把它改掉。
以安全模式启动MySQL,并且跳过安全密码,终端输入如下命令:
sudo mysqld_safe --skip-grant-tables &
修改MySQL密码:
原理是修改database:mysql 的table:user 中的User字段为root的密码,5.7版本的mysql的密码字段是authentication_string,低版本的叫password;
update user set authentication_string=PASSWORD("your password") where User="root";
刷新权限,退出重启:
MySQL flush privileges; MySQL quit; 终端:service mysql start
密码修改完成,已经将密码修改为root了。
打开系统偏好配置最下面那一行- MySQL,
开启MySQL:Start MySQL Server 关闭MySQL:Stop MySQL Server
注意:Automatically Start MySQL Server On Startup是默认勾选的,勾选后打开电脑会默认开启MySQL,建议不需要的可以不用默认勾选
嫌终端查看数据库不方便的,可以下载Navicat Lite管理软件,管理MySQL超级方便。
4.大招来了,安装MAMP安装MAMP后,你会发现你上面做的事情基本都是浪费……因为这个一个装完,其他基本都不需要动了,除了稍微改改配置什么的。安装地址:https://www.mamp.info/en/ 安装免费版的就足够了
通过Preferences设置可以设置项目是用的是Apache还是Nginx,可以设置端口号,也可以设置是用PHP的版本号,然后可以将文件夹指向自己的项目,如果没有就新建一个,最后只需要点一下start即可。
超级方便有木有!
这样,一个完整的工程环境就搭建好了,接下来,就可以愉快的编码啦!
- CaseStudy(showcase)布局篇-列表的排放与遮罩
- [Silverlight动画]转向行为 - 追捕行为
- 前端三大框架vue,angular,react大杂烩
- CaseStudy(showcase)布局篇-如何做一个自适应窗口大小的布局
- WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel
- [Silverlight动画]转向行为 - 到达行为
- Asp.Net统一前后端提示信息方案
- 人工智能:未来决策制定的机遇与影响
- CaseStudy(showcase)界面篇-导出xaml以及放入Blend的技巧
- [Silverlight动画]转向行为 - 避开行为
- CaseStudy(showcase)界面篇-desing设计界面
- [Silverlight动画]转向行为 - 寻找行为
- 【数字货币】数字黄金
- [Silverlight动画]转向行为 - 转向机车
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Fuzz中的javascript大小写特性
- 通过RxJava看kotlin协程(二)
- Android 黑科技 |Gradle Plugin使用场景
- php5全版本绕过open_basedir读文件脚本
- CameraX 封装二维码扫描组件
- Kotlin拓展函数的真身
- 一个一年没解决的ClassNotFoundException|类加载机制探索
- 我有个大胆的方案可以提高ARouter和WMRouter的编译速度
- Tornado模板对空白字符的处理与解决方案
- View的有效曝光监控(上)|RecyclerView 篇
- PHP绕过open_basedir列目录的研究
- View的有效曝光监控(下)|ScrollView NestScrollView篇
- 聊聊AbstractProcessor和Java编译流程
- Okhttp如何开启的Http2.0
- PHP Execute Command Bypass Disable_functions