在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批量删除数据
Jan 18 PHP
php 变量定义方法
Jun 14 PHP
php抓取页面与代码解析 推荐
Jul 23 PHP
PHP中获取文件扩展名的N种方法小结
Feb 27 PHP
PHP数据类型的总结分析
Jun 13 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP连接sql server 2005环境配置及问题解决
Aug 08 PHP
php上传大文件失败的原因及应对策略
Oct 20 PHP
Yii2中YiiBase自动加载类、引用文件方法分析(autoload)
Jul 25 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
PHP分享图片的生成方法
Apr 25 PHP
PHP的mysqli_ssl_set()函数讲解
Jan 23 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
分享一下贝贝成长进度的php代码
2012/09/14 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
JavaScript之自定义类型
2012/05/04 Javascript
jQuery 翻牌或百叶窗效果(内容三秒自动切换)
2012/06/14 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
Javascript设计模式之观察者模式(推荐)
2016/03/29 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
详解javascript常用工具类的封装
2018/01/30 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
小程序Request的另类用法详解
2019/08/09 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
Canvas globalCompositeOperation
2018/12/18 HTML / CSS
Solaris操作系统的线程机制
2012/12/23 面试题
公司活动总结怎么写
2014/06/25 职场文书
作风整顿剖析材料
2014/09/30 职场文书
小学生暑假安全公约
2015/07/14 职场文书
新学期家长寄语2016
2015/12/03 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
Python合并pdf文件的工具
2021/07/01 Python