call to undefined function think

2020-03-05  本文已影响0人  王兴岭

Mac电脑上发生这个错误这个原因是Mac电脑自带的php的gd未安装freetype导致的,所以要解决这个问题就是安装freetype. 解决办法很多,网上资料也很多.但是要么太繁琐,要么看上去简单但是经过操作后发现并没有解决掉问题. 经过多方查找资料,实践后才发现网上的简单流程是有问题的.文本根据自己的实践,重新梳理一下.希望能够帮助大家快速解决问题,节省时间.废话不多说,进入正题

电脑系统

macOS Mojave 版本 10.14.6

终端查看自己的php版本(我的版本是php 7.1 )

$ php -v

安装方法 :通过脚本在线安装带有freetype的php替代系统默认的

https://php-osx.liip.ch 

根据自己的php情况,打开上面的链接选择适合自己的版本,因为我的版本是php7.1,所以使用7.1版本,打开终端执行下面的命令

 curl -s https://php-osx.liip.ch/install.sh | bash -s 7.1

注(因为是国外的,所以下载很慢,网络不好可能很容易失败)

安装成功后在/usr/local文件夹下会生成两个文件夹 php5-7.1.31-20190811-210816 和 php5(php5-7.1.31-20190811-210816的替身), 要修改文件内容直接在php5-7.1.31-20190811-210816目录下进行修改就行了

新的php版本安装成功了,但是在终端执行

php -v

看到的还是系统自带的php版本, 如果让新安装的php生效呢, 在https://php-osx.liip.ch  Frequently Asked Questions中有介绍,我这边直接粘贴原文

Why does php -v on the command line still show my old version?

php-osx doesn't overwrite the php binaries installed by Apple, but installs everything in /usr/local/php5. The new php binary is therefore in /usr/local/php5/bin/php.

You can also adjust your PATH do include that directory, eg. write into your ~/.profile file the following

export PATH=/usr/local/php5/bin:$PATH

source ~/.profile

这里补充说明下, 因为我安装了第三方终端iTerm,所以修改的文件是~/.zshrc , 修改方式和上面类似,别忘了最后执行

source 操作让修改即时生效.

这个时候再查看php版本就发现是安装的最新的了.

虽然支持freetype的php版本安装成功了,但是如果再次打开网页,发现验证码还是一样失败,显示的异常还是 undefined function think\captcha\imagettftext(), 就算重启了php-fpm问题仍然没有得到解决,为什么这样呢?

那是因为在终端中直接使用php-fpm启动的时候,使用的仍然是系统默认的php,并没有使用最新安装的php.

所以目前要解决的问题就是启动php-fpm时使用最新的php?

使用新安装的php下的php-fpm启动服务

配置php-fpm

主要就是修改php-fpm.conf(由php-fpm.conf.default复制而来)和php-fpm.d目录下的www.conf(由php-fpm.conf.default复制而来) 的日志文件路径

切换到配置文件目录

cd /usr/local/php5-******/etc

 (在/usr/local/php5-******目录下,暗转的php版本不同,后缀也不同)

$ sudo cp php-fpm.conf.default php-fpm.conf

配置日志文件路径

[global]

error_log = /usr/local/var/log/php-fpm.log

配置www.conf

cd /usr/local/php5-******/etc/php-fpm.d

sudo cp www.conf.default www.conf

配置日志文件路径,最文件的最后一行把前面的;去掉就行了,主要修改的就是error_log目录

php_flag[display_errors] = on

php_admin_value[error_log] = user/local/var/log/fpm-php.www.log

php_admin_flag[log_errors] = on

启动php-fpm服务

绝对路径启动

/usr/local/php5/sbin/php-fpm -D

如果当前所处的目录为/usr/local/php5/sbin/启动方式应使用

./php-fpm -D

而不能是

php-fpm -D

因为这种方式还是使用的是默认的php版本,

执行完以上流程后再刷新网页就发现验证码已经出来了.

参考文章: 

nginx用什么版本的php取决于php-fpm哪个php版本的

mac 重启php-fpm

mac配置nginx和php-fpm

上一篇下一篇

猜你喜欢

热点阅读