在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程


Posted in PHP onFebruary 23, 2016

因为甲骨文的尿性。mariadb应该要顶替mysql了。所以抛弃mysql

1,编译nginx
分别下载nginx,openssl,pcre
编译openssl的时候会提示

WARNING! If you wish to build 64-bit library, then you have to
invoke ‘./Configure darwin64-x86_64-cc' *manually*.

如果你不停止编译就会出错。这个问题应该是 openssl/config脚本猜对你的系统是64位,但是 会根据$KERNEL_BITS来判断是否开启x86_64编译,默认 是不开启的(很奇怪的设置,虽然会给你5秒时间停止编译并手动开启),所以你生成的openssl库文件是32位的,最后静态链接到nginx会出错。目前看来没有很好的方法把x86_64的参数传到openssl配置文件中 (openssl/config 猜测os架构,设置编译的参数是32位还是64位,默认是32位,然后调用openssl/Configure生成Makefile)

可以在configure之前export KERNEL_BITS=64,如果还是不起作用
就要手到修改了
进入nginx目录

$ ./configure ./configure ?prefix=/usr/locale/nginx ?with-openssl=../openssl-1.0.1i ?with-pcre=../pcre-8.33

手动修改 objs/Makefile:

./config ?prefix=/Users/xxx/Downloads/openssl-1.0.1e/.openssl no-shared no-threads

改成

./Configure darwin64-x86_64-cc ?prefix=/Users/xxx/Downloads/openssl-1.0.1e/.openssl no-shared no-threads

再make
2,编译php
下载php源码和一些类库
zlib:http://www.zlib.net/
GD库:https://bitbucket.org/libgd/gd-libgd/downloads/libgd-2.1.0.tar.gz 不好下
freetype:http://sourceforge.net/projects/freetype/
libpng:http://www.libpng.org/pub/png/libpng.html
libjpeg:http://www.ijg.org/

curl: http://curl.haxx.se/download.html

mhash: http://sourceforge.net/projects/mhash/
mcrypt: http://mcrypt.hellug.gr/
还有bzip2。 gettext 和libtool 在gnu官网,不过速度不行,其他的库我用了系统自带。懒得再折腾,到时候没啥补啥。
除了libtool直接扔在了/usr,其他我都装在了/usr/local的一个个单独目录里面。比如jpeg就是/usr/local/jpeg方便以后修改

./configure ?prefix=/Users/saint/bin/php ?enable-inline-optimization ?enable-fpm ?with-mcrypt=/usr/local/libmcrypt ?with-zlib ?enable-mbstring ?with-openssl ?with-mysql ?with-mysqli ?with-mysql-sock ?with-gd ?with-jpeg-dir=/usr/local/jpeg ?enable-gd-native-ttf ?enable-pdo ?with-gettext ?with-curl ?with-pdo-mysql ?enable-sockets ?enable-bcmath ?enable-xml ?with-bz2=/usr ?enable-zip ?enable-freetype ?with-png-dir=/usr/local/libpng ?with-pcre-regex ?with-iconv-dir=/usr ?with-gettext=/usr/local/gettext

3.编译mariadb

编译mariabd需要先安装cmake。去www.cmake.org下载安装tar zxf mariadb-5.5.32.tar.gz

cd mariadb-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DMYSQL_DATADIR=/data/mariadb \
-DSYSCONFDIR=/usr/local/mariadb \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_BIG_TABLES=1 \
-DWITH_DEBUG=0
make && make install

/bin/cp support-files/my-small.cnf /usr/local/mariadb/my.conf
cp support-files/mysql.server /usr/local/mariadb/mysqld

# my.cf
cat > /etc/my.cnf << EOF [mysqld] basedir = /usr/local/mariadb datadir = /data/mariadb pid-file = /data/mariadb/mariadb.pid character-set-server = utf8 collation-server = utf8_general_ci user = mysql port = 3306 default_storage_engine = InnoDB innodb_file_per_table = 1 server_id = 1 log_bin = mysql-bin binlog_format = mixed expire_logs_days = 7 bind-address = 0.0.0.0 # name-resolve skip-name-resolve skip-host-cache #lower_case_table_names = 1 ft_min_word_len = 1 query_cache_size = 64M query_cache_type = 1 skip-external-locking key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M # LOG log_error = /data/mariadb/mariadb-error.log long_query_time = 1 slow_query_log slow_query_log_file = /data/mariadb/mariadb-slow.log # Oher #max_connections = 1000 open_files_limit = 65535 [client] port = 3306 EOF /usr/local/mariadb/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/data/mariadb chown mysql.mysql -R /data/mariadb export PATH=$PATH:/usr/local/mariadb/bin echo 'export PATH=$PATH:/usr/local/mariadb/bin' >> /etc/profile

source /etc/profile
/usr/local/mariadb/bin/mysql -e “grant all privileges on *.* to root@'127.0.0.1′ identified by “dbrootpwd” with grant option;”
/usr/local/mariadb/bin/mysql -e “grant all privileges on *.* to root@'localhost' identified by “dbrootpwd” with grant option;”
/usr/local/mariadb/bin/mysql -uroot -pdbrootpwd -e “delete from mysql.user where Password=”;”
/usr/local/mariadb/bin/mysql -uroot -pdbrootpwd -e “delete from mysql.db where User=”;”
/usr/local/mariadb/bin/mysql -uroot -pdbrootpwd -e “drop database test;”

4.后续安装扩展
php提供了一个phpize工具供我们安装需要的扩展。

下面介绍phpize的使用:

(1).找到自己原来编译的php安装目录,例如我的目录是/home/saint/Development/php,在该目录下,找到bin/phpize。如果没有这个工具,则说明没有安装该工具,那么需要安装php.dev,一般都会有这个工具。

(2).要扩展的话,就需要有一个和当前已安装的php的版本一样的php的源包,当前php版本可以用过phpinfo()查看。

(3).打开源包目录,进入到ext目录,例如我就进入到:/home/saint/Development/php-5.5.6/ext下,ext下有各个php带有的扩展模块,进入到ext/sockets中。

(4).cd到ext/sockets后,运行phpize程序:

/home/saint/Development/php/bin/phpize

执行后,可以看到phpize会帮我们生成了对应的configure文件

(5).通过configure来配置,执行下面的命令:

./configure --enable-sockets --with-php-config=/home/saint/Development/php/bin/php-config
 
make
 
make install

注: php-config文件与phpize是同一个目录下的

(6).更改php.ini,增加下面的语句:

extension=”/home/saint/Development/php/lib/php/extensions/no-debug-non-zts-20121226/sockets.so”

觉得难看可以将那个日期文件夹删除

(7).重启Nginx

PHP 相关文章推荐
PHP insert语法详解
Jun 07 PHP
PHP ? EasyUI DataGrid 资料存的方式介绍
Nov 07 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
Jul 01 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
PHP中feof()函数实例测试
Aug 23 PHP
PHP中异常处理的一些方法整理
Jul 03 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 PHP
phalcon框架使用指南
Feb 23 #PHP
PHP计算日期相差天数实例分析
Feb 23 #PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 #PHP
PHP编写RESTful接口
Feb 23 #PHP
PHP实现查询两个数组中不同元素的方法
Feb 23 #PHP
PHP查询并删除数据库多列重复数据的方法(利用数组函数实现)
Feb 23 #PHP
php读取txt文件并将数据插入到数据库
Feb 23 #PHP
You might like
PHP生成数组再传给js的方法
2014/08/07 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
2016/03/03 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
jQuery插件实现表格隔行换色且感应鼠标高亮行变色
2013/09/22 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
Ajax基础知识详解
2017/02/17 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
微信小程序+云开发实现欢迎登录注册
2019/05/24 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
2021/01/07 Vue.js
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
python openssl模块安装及用法
2020/12/06 Python
司机岗位职责
2013/11/15 职场文书
有个性的自我评价范文
2013/11/15 职场文书
审计工作个人的自我评价
2013/12/25 职场文书
四川成都导游欢迎词
2014/01/18 职场文书
2014年小学元旦活动方案
2014/02/12 职场文书
团队经理竞聘书
2014/03/31 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
高三语文复习计划
2015/01/19 职场文书
2015年计生协会工作总结
2015/04/24 职场文书