和平简朴的生活,纳言敏行,随遇而安。

Apache PHP MySQL on Mac OS X

Apache PHP MySQL on Mac OS X

发表时间 2010年10月24日 评论 3

忍了很久,还是没有忍住mac的诱惑,买了一个mbp 374,13寸的本本到手感觉也很不错。用习惯了 windows 还有 debian,刚开始发现还真的有点不习惯 mac 系统,首先是鼠标,拿到手的 magic mouse 没有左右键,还真有点不习惯,无奈我就又接上另外一个 usb鼠标,用上了右键的功能。不过用了一段时间之后发现 magic mouse 还挺好用的,鼠标还能当触控板来用,很爽,或许以后熟悉了 mac 的键盘命令后,就可以完全抛弃双键鼠标了。另外 mac book pro 外观设计就不说了,很漂亮的外观。即便是金属外壳也没有太重的重量。还有让我觉得比我其他本本爽的就是电池,待机时间比我两个本本都长。

不过也又不习惯的地方,就是配置 apache php mysql 的时候,由于 Mac OS X 的封装度很高,所以觉得配置起来不是很灵活,完成一些配置之后,做如下记录:

1、apache 的安装

Mac OS X 系统的封装程度非常高。系统自带了apache和php,开启apache只需要在“系统设置”——“共享”——“web共享”里开启即可。mac os x 10.6.4 自带的 apache 的配置文件存放在/etc/apache2/httpd.conf,mac 默认是开启了以用户名为目录的虚拟机,apache 的默认目录是 /Library/WebServer/Documents,这个目录操作起来很不方便,所以 mac 默认开启了虚拟机,在 apache 的配置文件里加载了 /private/etc/apache2/extra/httpd-userdir.conf 和 /private/etc/apache2/user/.conf,这里就加载了用户的虚拟机,目录是/Users//Sites,这个目录操作起来就方便多了。

但每次访问的时候需要通过访问诸如 127.0.0.1/~user 的地址来访问这个目录让我觉得很不方便,我习惯了直接使用 localhost,所以我就把 apache 的默认目录也设置到这里,这样就可以直接使用 localhost 来访问了。

2、php 的加载

php的加载也很方便,mac自带了php支持,只需要在 apache 的配置文件中找到

“#LoadModule php5_module libexec/apache2/libphp5.so”

将前面的“#”去掉即可,然后在终端运行 sudo apachectl restart 重启 apache 即可。mac 会在系统升级的过程中升级 php。我目前我写这篇文章的时候我的 mac 自带的 php 是 php5.3.2。

3、mysql 的安装

mysql 的安装也很方便。直接在官网下载 mysql 的 dmg 文件,打开之后里面又两个程序,一个是 mysql 的安装程序,一个是在系统设置中加入 mysql 服务设置的程序。为了方便,这两个程序都安装一下。安装好的 mysql 位于 /usr/local/ 目录,一个是 mysql 的原本目录,诸如 mysql-5.1.51-osx10.6-x86 的目录,另外一个是 mysql 的符号链接目录。这点和我使用 debian 的习惯一样,我使用 debian 的时候都把自己编译的程序放在 /usr/local 目录,方便管理升级。通过安装在“系统设置”——“其他”——“mysql”的服务控制器来启动 mysql,启动 mysql 之后,通过终端进入 /usr/local/mysql 的目录,通过使用命令为 root 用户添加密码:

shell>bin/mysqladmin -u root password 新密码

这时就可以通过命令行来查看 mysql 的一些环境了

shell>bin/mysql -u root -p shell>enter password: mysql>show variables;

这里看到mysql的默认编码不是utf8,这或许在有些程序设置上会有麻烦,所以我们需要修改一下。

mac os x 系统安装的mysql默认是不用my.cnf配置文件的,仅是使用默认的数据库配置值。如要进行数据库定制,可到’/usr/local/mysql/support-files/‘文件夹底下,把里面的任一个.cnf(看你需要什么样的服务器了,mysql 自带有三个不同等级的模板)配置文件复制到/etc/目录底下并修改文件名称为my.cnf。

这里将default-character-set=utf8加入

mysql5.1.5以后好像这个选项设置改为character-set-server了。

还有一个选项,skip-locking 改为 skip-external-locking 了。

至此,很简单的配置就可以配置好 apache+php+mysql了。

4、php 加载 mcrypt

卸载编译环境的最前面,如果单独安装mac os x的时候没有安装xcode,那么再编译软件的时候会提示缺失gcc环境,所以在自己编译软件之前确保你已安装了xcode,如果没有,那么使用mac os x 的安装盘装上。

通常我都会在机器上配置好 phpmyadmin 来通过 web 方式管理 mysql,很方便,于是我就下载了一个 phpmyadmin,安装的时候发现 php 没有加载 mcrypt 库,MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin 依赖这个 PHP 扩展库。这时我就很怀念 debian 的包管理 apt,解决依赖问题,一个apt即可搞定,到了mac os x却不同了,需要你自己编译解决。google 了一些 加载 php mcrypt库的文章,记录如下:

mcrypt 依赖 libmcrypt 和 mhash,所以下载 libmcrypt,和使用 debian 一样,进入解压后后的libmcrypt 目录,./configure make make install 搞定,然后是 mhash 的编译,之后再编译 mcrypt,结果仍旧是无法解决软件包的依赖问题,所幸的是还可以通过别的办法解决 php 的 mcrypt 库加载问题。libmcrypt 和 mhash 安装之后,到 php 官网下载与你机器相同版本的 php 源代码包,解压后进入 php/ext/mcrypt 目录,执行如下命令:

shell>phpize shell>./configue shell>make shell>cd modules shell>sudo cp mcrypt.so /usr/lib/php/extensions/no-debug-non-zts-20090626/(这个 php 的扩展库目录可以通过使用 phpinfo(); 函数来获取)

然后找到 php.ini 的位置(位于 /etc/php.ini)编辑它

加入如下代码:extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so

然后重启 apache 服务器,再查看 phpmyadmin 的时候就不会提示 mcrypt 的问题了。但会出现另外一个错误,无法连接 mysql 服务器。是因为 unix sock的问题,mysql 默认的 sock 位于/tmp/mysql.sock,而 php 默认的 mysql sock 位于/var/mysql/mysql.sock,这时我们可以修改 mysql 或是 php 的配置让这两个位置统一即可,这时我选择修改 php 的配置。

修改/etc/php.ini里的

mysql.default_socket = /var/mysql/mysql.sock

mysql.default_socket = /tmp/mysql.sock

就可以解决这个 sock 的问题。

5、.htaccess 配置 rewrite 的问题

我的 blog 使用的是 typecho 平台,下载安装之后在设置伪静态的时候无论如何都无法完成。这时我检查了我的 apache 配置,配置如下:

Options Indexes MultiViews AllowOverride All Order allow,deny Allow from all

而且我的 LoadModule rewrite_module libexec/apache2/mod_rewrite.so 也是打开的,很奇怪 typecho 的伪静态设置竟然无法完成。正常情况下 AllowOverride 设置为 all ,rewrite 模块加载,伪静态都是没问题的。结果这个问题竟然无法解决,到 typecho 官网搜索也没知道答案,所以我就下载了一个 wordpress 来测试,结果在测试 wordpress 的时候发现了这个问题的症结,竟然是程序无法自动生成 .htaccess 文件,于是我在 wordpress 下手动建立了 .htaccess 文件,结果再访问 wordpress 出现了 403 错误,说我没有权限:

You don’t have permission to access /wordpress on this server.

很奇怪的问题,查看了服务器的 log,发现了这样一段:

Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /User/user/Sites/wordpress

于是乎,google了一下才明白

如果没有启用mod_rewrite,可以用Options None 来保证安全性。

如果启用了mod_rewrite, 那么Options就一定要启用FollowSymLinks或者SymLinksifOwnerMatch, 否则会出现Fobidden页面禁止访问的错误。

于是把 Options 的选项加上 FollowSymLinks 就没问题了。

但 typecho 或是 wordpress 程序无法自动生成 .htaccess 的问题仍然每能解决,不知到为何,根目录的权限也都设置成为 777 了,哪位能给个答案吗?