我正在使用带有OS X Mavericks的Mac,并在MAMP中运行php脚本。我正在运行的一些php脚本需要使用pthreads。
任何人都可以提供有关在Mac上安装或启用pthread的分步说明吗?
我已经广泛搜索过,并且发现了很少甚至没有关于此的文档。我所发现的只是我可能或者可能不需要从源代码重新编译php,或者只是向php.ini添加几个标志,或者我可以只使用pecl等。在终端中,我尝试pecl install pthreads
并收到此错误:
无法安装,php_dir for channel“pecl.php.net”不能被当前用户写入
此时我几乎迷路了。如果可能的话,我想避免使用WAMP切换到我的Windows机器。
答案 0 :(得分:6)
我不是Mac用户,但Mac和unix的构建过程是相同的,所以我可以帮助你。
配置当前安装:
无法安装,php_dir for channel“pecl.php.net”不能被当前用户写入
这就是pecl安装失败的原因,也许检查php_dir的配置。
您可以使用以下方法确定设置的值:
pecl config-get php_dir
我不熟悉MAMP,但可能就是你没有PHP的Thread Safe版本。
您可以通过以下方式确定:
php -i | grep线程
你应该期待:
线程安全=>启用
如果您启用了线程安全,则应该修复php_dir上的权限将解决您的问题。
如果不这样做,则必须重新构建或从其他来源安装PHP的线程安全版本。
最后一个选择是建立自己,因为这意味着你会错过上游提供的更新,虽然我不太熟悉,不知道是否有一个维护良好的线程安全版本,我会假设那里是
要自己构建,您需要使用新的安装覆盖当前安装,将源代码下载到PHP以获得所需的版本(推荐5.5+,最新稳定,最好是所有时间)。
您需要确定为当前版本启用了哪些扩展,并确定要在新版本中启用哪些版本。
确定启用了哪些扩展程序:
php -m
记下这些:
php -m>启用的扩展
要将构建配置为线程安全,请使用以下配置选项:
- 使能维护者-ZTS
您需要设置新安装的前缀以匹配旧版本:
- 前缀= /旧/前缀
如果您当前的php二进制文件位于/ usr / local / bin / php,则前缀为/ usr / local。 如果您当前的php二进制文件位于/ usr / bin / php,则前缀为/ usr。
您还需要匹配当前的构建配置目录和扫描目录设置:
- 与 - 配置文件中路径= /旧/配置/路径
如果您当前的php.ini位于/usr/lib/php.ini,那么路径为/ usr / lib 如果您当前的php.ini位于/etc/php.ini,则路径为/ etc
例如,如果您在启动时使用扫描目录,则可以使用目录/etc/php.d
- 与 - 配置文件中 - 扫描 - DIR =的/ etc / php.d
如果您当前的扫描目录是/etc/php.d,那么目录是/etc/php.d
要配置扩展,引用您在开头创建的列表,请使用以下命令:
./ configure --help
找出开关启用您选择的扩展程序。如果列表中有扩展名为pecl,则可以使用pecl命令在构建完成后安装这些扩展。
一般来说:
--enable-extname
:对外部库没有依赖性--with-extname
:依赖于外部库在configure
之后我们必须运行make
,如果您有多个处理器或核心,则可能需要使用多个作业:
make -j8
允许make并行运行(最多8个作业),这大大加快了构建速度。使用与核心一样多的工作。
在make
期间,如果发生故障,很明显失败与之相关,如果您能发现库的名称(通常是导致失败的扩展名称有帮助),那么您可以通常通过安装导致失败的库的开发包来解决错误。
开发包中包含头文件和/或静态库,通常情况下,包维护者会从普通包中省略这些内容以节省重量,因此您可以安装libxml2包但不具有头文件。
当make
完成后,您的构建就可以安装了,请确保您拥有前缀的权限并执行
make install
您现在应该可以使用
安装所需的PECL扩展pecl install extname
您现在可以使用PECL或github安装:
pecl install pthreads