在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 相关文章推荐
截获网站title标签之家内容的例子
Oct 09 PHP
php的curl实现get和post的代码
Aug 23 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 PHP
php addslashes和mysql_real_escape_string
Jan 24 PHP
PHP用GD库生成高质量的缩略图片
Mar 09 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
PHP+jQuery+Ajax实现用户登录与退出
Apr 27 PHP
php发送邮件的问题详解
Jun 22 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
PHPMailer发送邮件
Dec 28 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 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
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
PHP的PDO预定义常量讲解
2019/01/24 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
JS获取父节点方法
2009/08/20 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
Easyui Treegrid改变默认图标的方法
2016/04/29 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
关于js中的鼠标事件总结
2017/07/11 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
解决vue项目刷新后,导航菜单高亮显示的位置不对问题
2019/11/01 Javascript
vue中使用带隐藏文本信息的图片、图片水印的方法
2020/04/24 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:01:29]2018DOTA2亚洲邀请赛 4.4 淘汰赛 VP vs Liquid 第一场
2018/04/05 DOTA
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
使用Python简单的实现树莓派的WEB控制
2016/02/18 Python
Python中规范定义命名空间的一些建议
2016/06/04 Python
浅谈对python中if、elif、else的误解
2020/08/20 Python
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
Vrbo英国:预订度假屋
2020/08/19 全球购物
四风存在的原因分析
2014/02/11 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
人民的好儿女观后感
2015/06/18 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python