前言 Why
macOS在某个版本改版之后,对于文件的权限系统做了升级,同时开启了一个SIP保护功能,导致了基于之前一直的习惯(macos自带的Apache,php)在使用的时候会有诸多阻碍。譬如说,安装一个php扩展的时候,就会遇到各种各样的问题,安装过程不能顺利进行。
类似于:
PHP 安装扩展报错 grep: /usr/include/php/main/php.h: No such file or directory
包括我们要在www目录下做修改,也不是那么方便。
基于brew,可以傻瓜式的安装和配置好nginx+php开发环境,之所以选择nginx环境,因为生产环境中也是使用的nginx,保持统一比较方便。
安装酒桶 install homebrew
https://brew.sh
https://github.com/homebrew/install#uninstall-homebrew
install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
uninstall
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall.sh)"
不建议换镜像/源,换了之后可能会出现无法正常使用的问题,我自己就遇到了,重新安装折腾了我一夜。
最好是使用高速稳定的VPN下载官方源。
下载时总是出现 fetch failed , early EOF 这样的错误。
安装core的时候比较容易出现这个问题,因为仓库整体很大,所以经常会因为网络波动而中断,我参考了网上很多尝试解决的方式都无效,比如说设置postBUFFER, packalimit之类的。
我的解决办法是,使用git clone命令,先将仓库克隆到用户文件夹下,之后删除(替换)brew目录下面的 homebrew-core目录。
git proxy
对git使用代理
vi ~/.gitconfig
添加代理配置
一般代理配置的地址和端口号在代理的说明中会有。
[http "https://github.com"]
proxy = 127.0.0.1:19180
安装NGINX install nginx
brew install nginx
Docroot is: /usr/local/var/www
The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.
nginx will load all files in /usr/local/etc/nginx/servers/.
To have launchd start nginx now and restart at login:
brew services start nginx
Or, if you don't want/need a background service you can just run:
nginx
补充
#测试配置是否有语法错误
nginx -t
#打开 nginx
brew services start nginx
#重新加载配置|重启|停止|退出 nginx
nginx -s reload|reopen|stop|quit
多个网站的配置
/usr/local/etc/nginx/servers/
在这个目录下,新建多个需要的 xxx.conf
nginx会加载所有的配置文件。
安装PHP install php
通过brew安装php,如7.4
brew install php@74
安装完成后会提示:
To enable PHP in Apache add the following to httpd.conf and restart Apache:
LoadModule php7_module /usr/local/opt/php@7.4/lib/httpd/modules/libphp7.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Finally, check DirectoryIndex includes index.php
DirectoryIndex index.php index.html
The php.ini and php-fpm.ini file can be found in:
/usr/local/etc/php/7.4/
php@7.4 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.
复制提示的代码,将新安装的php设为环境变量:
If you need to have php@7.4 first in your PATH, run:
echo 'export PATH="/usr/local/opt/php@7.4/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.4/sbin:$PATH"' >> ~/.zshrc
补充 (source才能生效)
source ~/.zshrc
php -v
For compilers to find php@7.4 you may need to set:
export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.4/include"
To have launchd start php@7.4 now and restart at login:
brew services start php@7.4
Or, if you don't want/need a background service you can just run:
php-fpm
nginx - php
安装完php后,需要修改nginx的配置来启用php
如果不需要单独配置多个服务器,直接修改nginx.conf即可,如果需要多个,则在servers文件夹下,新建单独的xx.conf文件。
conf文件模板为
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
root /Users/mac/dev/web_server/qiyouyun;
location / {
index index.html index.htm index.php;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
如果打开测试的php时看到,file not found。很大可能是root目录配置错误。
特别是nginx.conf中,分别需要对 .php和默认的 root设置。
忽略其中一个可能就造成找不到文件。
权限问题可能性不大,不过如果确认目录没问题,可以考虑检查一下权限。
配置完成后,重新加载nginx的配置
nginx -s reload
安装php库管理工具 composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.0.11 2021-02-24 14:57:23
安装扩展 extensions for php
php-zip
下载,或使用wget
wget http://pecl.php.net/get/zip
cd zip-1.19.2
ls
查看一下包是否已经解压,能否ls的时候看到里面的文件结构,如果还是一个目录文件,则再进入,知道可以看到含有install.sh
这样的文件。
phpize
Configuring for:
PHP Api Version: 20190902
Zend Module Api No: 20190902
Zend Extension Api No: 320190902
查看一下本地php-config的所在目录
which php-config
/usr/local/opt/php@7.4/bin/php-config
对于当前正在使用的版本进行配置
./configure --with-php-config=/usr/local/opt/php@7.4/bin/php-config
make
............
make install
............
cp ./.libs/zip.so /Users/mac/env/zip-1.19.2/zip-1.19.2/modules/zip.so
cp ./.libs/zip.lai /Users/mac/env/zip-1.19.2/zip-1.19.2/modules/zip.la
----------------------------------------------------------------------
Libraries have been installed in:
/Users/mac/env/zip-1.19.2/zip-1.19.2/modules
这里的 zip.so是很重要的,开启扩展的时候需要用到。
编辑php.ini
在php.ini中,添加一行扩展信息。(建议添加在 extensions部分)
;extension=pdo_odbc
;extension=pdo_pgsql
;extension=pdo_sqlite
;extension=pgsql
;extension=shmop
extension=/Users/mac/env/zip-1.19.2/zip-1.19.2/modules/zip.so
php-redis
最近回复