Mac OS:未加载Intl扩展名

问题描述 投票:1回答:1
  • macOS Mojave 10.14.3
  • PHP 7.1.23
  • Prestashop 1.7.5.1

我尝试在本地服务器上安装PHP intl扩展,以便使用Prestashop。

我将extension=php_intl.so添加到etc/php.ini

当我尝试安装Prestashop时,我得到了Intl extension is not loaded

$ php -m | grep国际

当我做$ php -m | grep intl时,我得到:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - d lopen(/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - dlopen (/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 intl

似乎文件php_intl.so不存在。

$ sudo pecl install intl

我也试过$ sudo pecl install intland我得到:

make: *** [php_intl.lo] Error 1 ERROR:make'失败'

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

我也试过$ curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1,它不会创建intl.so文件。


我怎么解决这个问题?

php prestashop intl
1个回答
4
投票

Brew的PHP 7.1,7.2和7.3默认都启用了INTL。


最有可能的是,您只是使用Mac OS的捆绑版PHP。

ls -l $(which php)

找出当前PHP二进制文件的位置以及是否符号链接到Brew安装。就我而言,例如:

lrwxr-xr-x 1 27 May 23 16:30 /usr/local/bin/php -> ../Cellar/php/7.3.5/bin/php

这意味着我的php与Brew的7.3.5版本相关联。

如果你不使用Brew的PHP,你会看到类似的东西

-rwxr-xr-x 1 11169664 Mar 21 07:09 /usr/bin/php

通过Brew安装PHP

了解您是否已安装PHP:

brew list | grep php

如果有任何输出,并且您的PHP版本存在,请转到步骤2,或使用步骤1将PHP更新到最新版本。

1.安装Homebrew的PHP

brew install [email protected]

(或7.2,7.1)。如果Brew抱怨无法找到公式,那么你可能会对水龙头搞砸了。而不是[email protected],你可以尝试提供current php formula的完整路径:

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/php.rb

仍然无法正常工作,请检查您是否正在运行最新版本的Homebrew brew --version

Homebrew 2.1.3-31-geaf2370
Homebrew/homebrew-core (git revision fd1ef; last commit 2019-05-25)
Homebrew/homebrew-cask (git revision 16d50; last commit 2019-05-26)

2.链接Homebrew的PHP

现在,要让php'在你的道路上',有两种选择。

a)自制软件的版本必须从其安装位置(/ usr / local / bin / Cellar / php ....)链接到路径中的目录(例如/ usr / local / bin)。为此,请运行:

brew link --force [email protected]

如果无法链接,则通常是由设置权限或系统完整性保护引起的。在第一种情况下,尝试sudo chown "$USER":admin /usr/local/bin/php

b)或者,将/usr/local/opt/[email protected]目录(opt-prefix)添加到$ PATH变量中。例如,对于Bash:

echo 'export PATH="/usr/local/opt/[email protected]/bin:/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

3.验证安装

ls -l $(which php)

应该表明php链接到/usr/local/bin/Cellar中的Homebrew PHP安装。

php -v

应该显示最近安装的PHP版本。如果不是这样,请尝试重新启动终端。

php -i | grep -i intl

应该显示有关当前安装的intl的一些信息。

如果您正在使用Web服务器和/或PHP FPM,则需要重新启动这些服务。 (或者重启你的系统,如果你不知道如何做到这一点,也无法搞清楚)。

可能的问题

如果你仍然收到有关缺少扩展的警告(无法加载动态库等),那么你的php.ini就搞砸了。

找到php ini的当前位置

$ php -i | grep \.ini

Configuration File (php.ini) Path => /usr/local/etc/php/7.3
Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed => /usr/local/etc/php/7.3/conf.d/ext-opcache.ini
....

编辑/usr/local/etc/php/7.3/php.ini并找到有问题的扩展加载(例如,extension="myext.so")。评论那些无法找到的。

自制权限

Some argue认为加入/usr/local是一个好主意。

sudo chown -R "$USER":admin /usr/local

这将使得在这里,通过手工和通过Homebrew安装更容易,但也有点不太安全,因为现在也允许非root进程写入此处。

您的Web应用程序使用的是不同版本的PHP。

确保它没有...这个配置取决于使用过的网络服务器。第一步是使用<?php phpinfo();在Web应用程序中输出当前的PHP配置。

This explains steps for Apache.

另一种让web服务器+ PHP堆栈快速运行的方法是使用qazxsw poi。

安装其他扩展

要安装其他PHP扩展,请使用PEAR。

Laravel Valet应该输出当前的PEAR和PHP版本。

pear -V

现在,要安装扩展,例如,PHP yaml扩展:

PEAR Version: 1.10.9
PHP Version: 7.3.5
Zend Engine Version: 3.3.5

0
投票

pear install yaml 可能存在问题

你可以尝试使用这里提到的:

brew tap kyslik / homebrew-php

brew安装kyslik / php / php71-intl


-1
投票

因为php 7没有必要加载扩展brew,你需要做什么?,编辑你的php_intl.so并删除或评论加载扩展php.ini的行,重新加载你的apache后再试一次。

© www.soinside.com 2019 - 2024. All rights reserved.