**** 欢迎转载,非商业转载请注明出处,商业转载请联系 forzhangy@163.com ****
最近帮人做站,接触到PrestaShop 1.7,然后想自己先在本地搭一个环境起来,结果遇到坑了。
这个坑是长这样子滴:
我现在用的是macOS Mojave (10.14.4),自带的PHP 7.1.23 (cli) (built: Feb 22 2019 22:08:13) ( NTS )
prestashop安装的时候,提示需要intl插件,然而....坑来了,intl在安装的时候报错提示缺少头文件"php_smart_str.h",这玩意儿在现行的php版本中已经没有了,替代的是"php_smart_string.h"。这都不是重点,重点是intl这个插件貌似没有更新了,它只认"php_smart_str.h"这个文件。从头到尾,这个坑我爬了三天,还是太年轻,技术积累太差了。
背景交待完毕,进入正题,这个坑我是怎么填的呢,如下:
先把前置环境配一下,可能你需要一个ICU和Autoconf,网络状况不好的话,可能会下载失败,多试几次即可
安装扩展之前,把这件事情做一下 Download PEAR 这一段来自:
-----------------------------------------
(作者:jason 链接:https://www.zhihu.com/question/37469140/answer/109028380 来源:知乎)
curl -O http://pear.php.net/go-pear.phar sudo php -d detect_unicode=0 go-pear.phar
Configure and Install PEAR
You should now be at a prompt to configure PEAR.
- Type 1 and press return.
-
Enter:
/usr/local/pear
- Type 4 and press return.
-
Enter:
/usr/local/bin
- Press return
You should be able to type:
pear version
----------------------------
开始安装扩展
Installing ICU
cd ~ && curl -O http://download.icu-project.org/files/icu4c/52.1/icu4c-52_1-src.tgz tar -zxvf icu4c-52_1-src.tgz cd icu/source ./runConfigureICU MacOSX make sudo make install
如果你有如下报错,你可以去找其他版本的ICU http://site.icu-project.org/download
ld: 304 duplicate symbols for architecture x86_64 clang: error: linker command failed with exit code 1
接着,安装autoconf
注意:autoconf-2.69不固定,看你下载是哪个版本
cd ~ && 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 ~ rm -rf icu rm -rf autoconf-2.69
接下来,配置一下php.ini
sudo cp /etc/php.ini.default /etc/php.ini
sudo vi /etc/php.ini
在php.ini中添加两行
extension_dir = "/usr/lib/php/extensions/no-debug-non-zts-20160303"
extension=intl.so
*no-debug-non-zts-20160303 这里可能随版本不同,后面数字也有不同,注意查看*
前置技能加满,开始大招
================================
1. 到php的官网下载7.1.3的版本,这个版本中还保留着intl扩展,我直接下载了tar.gz压缩格式 https://www.php.net/distributions/php-7.1.3.tar.gz
2.自己手动编译得到扩展 intl.so
步骤如下:
1)进入到php的 ext/intl 目录下,执行 phpize, 权限不够加sudo,正常的话,应该是以下信息
sudo phpize Password: Configuring for: PHP Api Version: 20160303 Zend Module Api No: 20160303 Zend Extension Api No: 320160303
2)在当前目录下执行 ./configure --with-php-config=/usr/bin/php-config (当前使用的php,不知道的话执行where php-config)
3)还是当前目录,执行 make ,若报错,可参考这里 https://segmentfault.com/q/1010000010678737
4)再执行 make install,还是老话,权限不够在前面加sudo
5)会在intl/module目录下看到有个intl.so文件,复制这个文件到要使用的php/extentions目录下即可。
参考资料:
https://codingexplained.com/dev-ops/mac/installing-php-intl-extension-os-x-mavericks#comment-42246
https://www.zhihu.com/question/37469140
http://www.php.cn/php-weizijiaocheng-387299.html
https://segmentfault.com/q/1010000010678737