PHP环境配置:MacOS + Apache + PHP 5.x + MySQL 5.x

发布于 2018年11月21日 23:44:39 - 技术分享 - PHP - 环境配置

MacOS基于FreeBSD系统开发,FreeBSD是Unix分支,所以macOS内置Apache+PHP,但苹果的权限问题一直过于严格,导致在安装时有诸多限制。

大叔要不是因为工作需要才去折腾,Mac,不然它真的是一款很轻松的普通办公笔记本。

安装步骤

  1. 配置Apache
  2. 配置PHP
  3. 安装MySQL

第一步:配置Apache

启动Apache

打开“系统设置偏好(System Preferences)” -> “共享(Sharing)” -> “Web共享(Web Sharing)” PS:从Mac OS X从10.8开始取消了 “Web共享(Web Sharing)” 所以之后的版本都不同再设置这块了。

打开“终端(terminal)”,输入sudo apachectl -v,(注:sudo所需要的密码就是系统帐户root的密码),显示Apache的版本,如10.8.1中:

Server version: Apache/2.2.22 (Unix)
Server built: Jun 20 2012 13:57:09

2017年11月后的新版本号(新版本与旧版本有些许不同,本次的教程以新版为主)

Server version: Apache/2.4.27 (Unix)
Server built: Jun 15 2017 15:41:46

输入sudo apachectl start,(隔段时间就要输入系统密码来验证帐户)这样Apache就启动了。

打开Safari浏览器地址栏输入http://localhost,可以看到“It works!”的页面,其目录位于“/Library(资源库)/WebServer/Documents/”下,也就是Apache的默认根目录。

注意:开启了Apache就是开启了“Web共享”,这时联网用户就会通过“http://[本地IP]/”来访问“/Library(资源库)/WebServer/Documents/”目录,通过“http://[本地IP]/~[用户名]”来访问“/Users/[用户名]/Sites/”目录。

值得注意的是,Mac OS X在10.8后取消”Web共享(Web Sharing)”时,也移除了“/Users/[用户名]/Sites/”目录,所以10.8中访问“http://[本地IP]/~[用户名]”会显示“403 Forbidden”,但http://[本地IP]/依旧可以访问。

可以到“系统偏好设置” -> “安全(Security)” -> “防火墙(Firewall)”,开启防火墙,然后在“防火墙选项(Firewall Options)”中勾上“组织所有进入连接(block all incoming connections)”即可。

也可以通过设置httpds.conf来只允许localhost和127.0.0.1访问“/Library(资源库)/WebServer/Documents/”。

重启Apache

关于sudo apachectl -k restart和sudo apachectl restart

正常的使用过程中,使用sudo apachectl restart重启速度会很快;调试状态下,推荐使用sudo apachectl -k restart可以马上找到错误。

Apache的安装目录在:/etc/apache2/,etc 文件夹默认是隐藏的。

有三种方式查看:

  1. dock下右键Finder,选择"前往文件夹",输入/etc
  2. 在finder下 -> 前往 -> 前往文件夹,然后输入/etc
  3. 可以在terminal 输入open /etc

我们在etc目录中,主要配置4个文件:

  1. httpd.conf
  2. httpd-vhosts.conf
  3. hosts
  4. php.ini

配置:httpd.conf

在终端中运行sudo vi /etc/apache2/httpd.conf
注:如果不习惯操作终端和vi,可以在Finder中,选择“前往文件夹”,输入/etc/,然后就找到对应文件,复制到桌面,使用编辑器修改好保存后,再粘贴回文件夹内覆盖,担心配置失败,可以先备份一份文件再覆盖,在操作过程必会弹出帐号密码验证,输入确认即可。

#去掉前面的#,开启虚拟主机
Include /private/etc/apache2/extra/httpd-vhosts.conf
#去掉前面的#,开启PHP7
LoadModule php7_module libexec/apache2/libphp7.so
#去掉前面的#,开启URL重写
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
#增加一行,添加主机名localhost
#ServerName www.example.com:80
ServerName localhost
#在Options后面增加 Indexes
#Options FollowSymLinks Multiviews
Options Indexes FollowSymLinks Multiviews

搜索所有的AllowOverride,全部改成AllowOverride All,保证虚拟目录路径的正常运行。

保存覆盖后,运行sudo apachectl -k restart,重启Apache。

配置:httpd-vhosts.conf

终端运行sudo vi /etc/apache2/extra/httpd-vhosts.conf

需要注意的是该文件默认开启了两个作为例子的虚拟主机,而实际上,这两个虚拟主机是不存在的,全部在前面加上#注释掉

#<VirtualHost *:80>
# DocumentRoot "/Library/WebServer/Documents"
# ServerName localhost
# ErrorLog "/private/var/log/apache2/localhost-error_log"
# CustomLog "/private/var/log/apache2/localhost-access_log" common
#</VirtualHost>
 
#<VirtualHost *:80>
# DocumentRoot "/Users/snandy/work"
# ServerName mysites
# ErrorLog "/private/var/log/apache2/sites-error_log"
# CustomLog "/private/var/log/apache2/sites-access_log" common
 
# <Directory />
#  Options Indexes FollowSymLinks MultiViews
#  AllowOverride None
#  Order deny,allow
#  Allow from all
# </Directory>
#</VirtualHost>

在没有配置任何其他虚拟主机时,可能会导致访问localhost时出现如下提示:

Forbidden
You don&01#t have permission to access /index.php on this server

我们增加如下配置:

<VirtualHost *:80>
 DocumentRoot "/Library/WebServer/Documents"
 ServerName localhost
 ErrorLog "/private/var/log/apache2/localhost-error_log"
 CustomLog "/private/var/log/apache2/localhost-access_log" common
</VirtualHost>
 
<VirtualHost *:80>
 DocumentRoot "/Users/snandy/work"
 ServerName mysites
 ErrorLog "/private/var/log/apache2/sites-error_log"
 CustomLog "/private/var/log/apache2/sites-access_log" common
 
 <Directory />
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order deny,allow
  Allow from 127.0.0.1
  Allow from localhost
 </Directory>
</VirtualHost>

保存覆盖,运行sudo apachectl -k restart,重启Apache

配置:hosts

Apache的虚拟目录功能和IIS一样强大,可以通过增加自定义主机名来打开多个站点。

运行:sudo vi /etc/hosts

127.0.0.1 mysites
127.0.0.1 mysites1
127.0.0.1 mysites2

保存并覆盖,运行sudo apachectl -k restart,重启Apache。

这样就可以正常访问“http://mysites”了,和http://localhost/[xxxxx]完全一致。

注意:记录log的ErrorLog "/private/var/log/apache2/sites-error_log"也可以删掉,但记录日志其实是一个好习惯,在出现问题时可以帮助我们判断。如果保留这些log代码,一定log文件路径都是存在的,如果随便修改一个不存在的,会导致Apache无法服务而没有错误提示,这个比较恶心。

注意

如果做了以上操作,服务器重启也正常,但还不能访问那么需要再修改一个文件,运行“sudo vi /etc/apache2/httpd.conf” 找到

<Directory />
 AllowOverride none
 Require all denie
</Directory>

修改为

<Directory />
 AllowOverride all
 # Require all denie
 Require all granted
</Directory>

第二步:配置php.ini

运行sudo cp /etc/php.ini.default /etc/php.ini,配置php.ini

#通过下面两项来调整PHP提交文件的最大值,如phpMyAdmin中导入数据的最大值
upload_max_filesize = 2M;
post_max_size = 8M;
#通过display_errors来控制是否显示PHP程序的报错信息,这在调试PHP程序时非常有用
display_errors = Off

运行sudo apachectl -k restart,重启Apache。

/Library/WebServer/Document/目录下,新建一个info.php,写入<?php echo phpinfo();?>,保存。

如此就可以在http://localhost/info.php中看到PHP的相关信息了。

第三步:安装MySQL

下载地址

百度云盘:https://pan.baidu.com/s/1WulTecresjjAB5z0crBJyw
访问密码:90w4

官网下载:https://dev.mysql.com/downloads/mysql/

安装过程

选择第一行的【Download】(第二页是MySQL的广告坑页,选择最下面的“No thanks,just take me to downloads!”跳过。)

下载好后,打开dmg程序然后再打开pkg程序进行安装。

注意,从10.8开始Mac OS X的权限更加严格,直接点击会提示“mysql-5.5.27-osx10.6-x86_64.pkg can’t be opened because it is from an unidentified developer. Your security preferences allow installation of only apps from the Mac App Store and identified developers.”阻止了安装,你可以使用双指单击该安装文件,在弹出菜单中选择“用…打开(open with)”,再选择“安装(Installer)”就可以接着安装了。

如无特殊需求,建议大家选择为“所有用户安装”,然后继续。

安装成功后,在“/usr/local/”目录下,会有一个 mysql-5.5.27-osx10.6-x86_64 目录及一个mysql的快捷目录,如果遇到安装出错,可以将这两个目录删除,再重新开始安装。

配置MySQL

通过运行“sudo vi /etc/bashrc”,在bash配置文件中加入mysqlstartmysqlmysqladmin的别名,这样就可以在终端中比较简单地通过命令进行相应的操作。
(注意:修改完毕之后需要退出“终端(Terminal)”之后重新进入,这些命令才会生效)

#mysql 
alias mysqlstart='sudo /Library/StartupItems/MySQLCOM/MySQLCOM restart'
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladmin='/usr/local/mysql/bin/mysqladmin'

刚安装好的MySQL的root默认密码为空,要设置密码需要在终端运行mysqladmin -u root password "mysqlpassword”来设置,其中mysqlpassword即root的密码。

更多相关内容可以参考B.5.4.1. How to Reset the Root Password

安装完成,记下密码

(这个密码不是MySQL初始密码,而是MySQL程序密码,所以也没关系,删除所有软件重装就有了,但注意,数据库要先备份,不然数据就全部删除光了。)

在系统偏好设置中会出现MySQL图标,用以启动MySQL

在终端输入如下代码,就可以看到mysql的文件夹:$ cd /usr/local

输入如下代码,登陆MySQL,但是报错command not found:$ mysql -uroot -p -bash: mysql: command not found

直接写完整全路径可以登录:$ /usr/local/mysql/bin/mysql -uroot -p

例子:

prodeMacBook-Pro:local pro$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g
Your MySQL connection id is 86
Server version: 5.7.17 MySQL Community Server (GPL)
mysql>; SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.03 sec)

输入密码后即登录成功:

退出mysql:mysql> \q

如果这里正常出现的话,意味着是新装的MySQL root 密码为空,可以通用MySQL语句重置root密码。

MySQL错误汇总

新装MySQL后,空密码无法修改

解决方案

第一步:跳过MySQL验证
  1. 关闭mysql服务器
    sudo /usr/local/mysql/support-files/mysql.server stop
    也可以在系统偏好里有个MySQL里关闭。
  2. cd /usr/local/mysql/bin 进入目录
  3. sudo su 获取权限
  4. ./mysqld_safe --skip-grant-tables & 重启服务器
  5. 重开个终端
第二步:配置短命令并用终端修改密码
  1. alias mysql=/usr/local/mysql/bin/mysql
  2. 输入mysql 进入mysql命令模式
  3. use mysql进入mysql数据库
  4. flush privileges;大概就是获取权限,要不他不让你改。
  5. set password for 'root'@'localhost'=password('新密码');完成修改
    • 如果你知道密码:mysqladmin -u root -p password 新密码
  6.  完成修改
第二步失败后跳至第三步:一般在第二步时用图形终端修改密码会无效,建议使用phpMyAdmin
  1. 也可以从第二步的第3小步开始,使用网页打开"http://localhost/phpmyadmin/index.php",会进入登录界面,这里只需输入root,密码为空,即可登录。
  2. 打开"mysql"数据库
  3. 打开"user"表
  4. 默认会有1到3条表数据,分别是
    • root
    • mysql.session
    • mysql.sys
  5. 找到两个字段
    • authentication_string字段,即是以前的Password字段
    • password_expired字段,密码过期字段
  6. 通过你自己的手段,将MySQL的root密码设出来,填入authentication_string字段,三个都覆盖掉,因为初始密码很长,而且不知道是什么
  7. password_expired字段设为“Y”,使密码不过期,可以用。
  8. 刷新表,确认数据已更新成功。
  9. 关闭MySQL所有终端,重启一个窗口,输入sudo /usr/local/mysql/support-files/mysql.server restart
  10. 显示成功后,就可以使用MySQL密码,正常的使用MySQL了。

MySQL启动报错(一)

在MySQL没有启动时,直接运行mysql或mysqladmin命令会提示“Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解决方案

我们需要通过控制面板或者直接运行mysqlstart命令来启动MySQL,之后再运行mysql或mysqladmin命令就正常了。

MySQL启动报错(二)

提示“Warning:The /usr/local/mysql/data directory is not owned by the 'mysql' or '_mysql'

解决方案

一般情况下是/usr/local/mysql/data的宿主发生了改变,只需要运行sudo chown -R mysql /usr/local/mysql/data即可。

PHP程序连接MySQL报错

报错Can't connect to local MySQL server through socket '/var/mysql/mysql.sock'
使用localhost无法连接MySQL

解决方案

原因是连接时php默认去找/var/mysql/mysql.sock了,因为Mac版的MySQL改动了文件位置,放在/tmp下了

  • 将localhost改成127.0.0.1,
  • 修改php.ini:mysql.default_socket = /tmp/mysql.sock

第四步:phpMyAdmin

下载地址

百度云盘:https://pan.baidu.com/s/1fOTpZQnBXU10R4yoCKLxKg
访问密码:8px5

官网下载:https://www.phpmyadmin.net/donate/

安装

把phpMyAdmin-x.x.xx-all-languages.tar.bz2文件解压到“/Library/WebServer/Documents/”中,并改名为phpMyAdmin。

复制“/Library/WebServer/Documents/phpmyadmin/”中的config.sample.inc.php重命名为config.inc.php。

编辑 config.inc.php:

用于Cookie加密,随意的长字符串

$cfg['blowfish_secret'] = 'a8b7c6d';

当phpMyAdmin中出现“#2002 无法登录 MySQL 服务器(#2002 Cannot log in to the MySQL server)”时,

$cfg['Servers'][$i]['host'] = 'localhost';

把localhost改成127.0.0.1,因为MySQL守护程序做了IP绑定(bind-address =127.0.0.1)造成

$cfg['Servers'][$i]['AllowNoPassword'] = false;

把false改成true,这样就可以访问无密码的MySQL了,即使MySQL设置了密码也可以这样设置,然后登录phpMyAdmin时输入密码

第五步:MCrypt扩展

http://localhost/phpmyadmin访问phpMyAdmin时,可能会看到一个提示“无法加载 mcrypt 扩展,请检查您的 PHP 配置。(The mcrypt extension is missing. Please check your PHP configuration.)”

MCrypt是一个功能强大的加密算法扩展库,它包括有22种算法,phpMyAdmin依赖这个PHP扩展库。

下载

百度云盘:https://pan.baidu.com/s/1mlebzvuioG_adiTAXJcj6Q
访问密码:g6wb

安装

注意:如下命令需要安装xCode支持,先要去Mac App Store安装好xCode,然后再继续安装。
在终端运行./configure --disable-posix-threads --enable-static时可能会报错,运行make会提示命令不存在。
此时还需要打开xCode,然后在xCode的软件“配置(Preference…)”-> “下载(Downloads)” 中安装 “命令行工具(Command Line Tools)”

cd ~/Downloads
tar -zxvf libmcrypt-2.5.8.tar.bz2
cd libmcrypt-2.5.8
./configure --disable-posix-threads --enable-static
make
sudo make install

配置autoconf并运行phpize命令

在终端执行如下命令

cd ~/Downloads
tar -zxvf php-5.3.13.tar.bz2

cd php-5.3.13/ext/mcrypt
curl -O http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz
tar -zxvf autoconf-latest.tar.gz
cd autoconf-2.69
./configure
make
sudo make install

cd ..
phpize
./configure
make
sudo make install

配置php.ini

sudo vi /etc/php.ini

在php.ini中加入extension=mcrypt.so,重启Apache

当你再访问http://localhost/phpmyadmin时,会发现“无法加载 mcrypt 扩展,请检查您的 PHP 配置。”提示没有了,这就表示MCrypt扩展库安装成功了。如果还不能加载,尝试把php.ini中的加入的extension修改为:

extension=/usr/lib/php/extensions/no-debug-non-zts-20090626/mcrypt.so

Mac OS X下安装MCrypt扩展的确比较复杂,而且稍微不小心会有各种小问题出现,大家还可以参考How to Install mcrypt for php on Mac OSX Lion 10.8 & 10.7 Development ServerAdding MCRYPT to your OSX Lion PHP install


感谢:

转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:Dy大叔的日常

转载自 PHP环境配置:MacOS + Apache + PHP 5.x + MySQL 5.x | XDY.ME@Dy大叔的日常

XDY.ME@Dy大叔的日常