在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 相关文章推荐
实用函数7
Nov 08 PHP
PHP编程中字符串处理的5个技巧小结
Nov 13 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
php中的数组操作函数整理
Aug 18 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
PHP实现小偷程序实例
Oct 31 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
PHP实现的ID混淆算法类与用法示例
Aug 10 PHP
php和html的区别点详细总结
Sep 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+MYSQL开发工具及资源收藏
2007/01/02 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php分页思路以及在ZF中的使用
2012/05/30 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
使用jquery prev()方法找到同级的前一个元素
2014/07/11 Javascript
jQuery实现跨域
2015/02/03 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
Angular发布1.5正式版,专注于向Angular 2的过渡
2016/02/18 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
2018/03/15 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
Python金融数据可视化汇总
2017/11/17 Python
Python排序算法之选择排序定义与用法示例
2018/04/29 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
Python for循环生成列表的实例
2018/06/15 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
Python流程控制 while循环实现解析
2019/09/02 Python
多版本python的pip 升级后, pip2 pip3 与python版本失配解决方法
2019/09/11 Python
python爬虫scrapy图书分类实例讲解
2020/11/23 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
综合内勤岗位职责
2014/04/14 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
汽车转让协议书
2015/01/29 职场文书
教师年度考核个人总结
2015/02/12 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL
分享python函数常见关键字
2022/04/26 Python