在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之COOKIE支持详解
Sep 20 PHP
PHP session会话的安全性分析
Sep 08 PHP
php实现最简单的MVC框架实例教程
Sep 08 PHP
php常用的安全过滤函数集锦
Oct 09 PHP
php的curl封装类用法实例
Nov 07 PHP
PHP实现链式操作的核心思想
Jun 23 PHP
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
Jul 06 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
Feb 15 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 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中的float类型使用说明
2010/07/27 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
2019/09/10 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
Jquery 改变radio/checkbox选中状态,获取选中的值(示例代码)
2013/12/12 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
jQuery中not()方法用法实例
2015/01/06 Javascript
ajax+jQuery实现级联显示地址的方法
2015/05/06 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
原生jQuery实现只显示年份下拉框
2020/12/24 jQuery
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python写的Tkinter程序屏幕居中方法
2015/03/10 Python
利用ctypes提高Python的执行速度
2016/09/09 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
对numpy.append()里的axis的用法详解
2018/06/28 Python
Python3匿名函数用法示例
2018/07/25 Python
django框架单表操作之增删改实例分析
2019/12/16 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
python按照list中字典的某key去重的示例代码
2020/10/13 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
学习之星事迹材料
2014/05/17 职场文书
效能监察建议书
2014/05/19 职场文书
毕业生应聘求职信
2014/07/10 职场文书
实习生工作证明范本
2014/09/14 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
2015年父亲节活动总结
2015/02/12 职场文书
开会通知
2015/04/20 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
快速学习Oracle触发器和游标
2021/06/30 Oracle