【问题标题】:Installing a PHP extension on Windows 10在 Windows 10 上安装 PHP 扩展
【发布时间】:2017-07-26 17:03:14
【问题描述】:

我已经离开 PHP 一段时间了。现在,我有一个在 IIS 上运行的 CakePHP 3.x 站点。现在,我需要安装和使用一个扩展(特别是 Couchbase 扩展,但我认为我的问题不是 Couchbase 特定的)。

我已经从 PECL (here, the 5.6 Thread Safe 32bit download, specifically) 下载了 DLL

我认为我必须将文件放在那个 zip 文件中的某个地方,然后我必须对 ExtensionList 下的 php.ini 进行更改。但我不确定将文件具体放在哪里,或者要引用哪些 DLL。

我尝试将它们放入C:\Program Files (x86)\PHP\v5.6\ext\couchbase,然后将extension=couchbase/php_couchbase.dll 添加到php.ini,重新启动IIS。然后,我编写了这个简单的 CakePHP 控制器,以确保它能够正常工作:

<?php

namespace App\Controller;

class ProfilesController extends AppController
{
    public function index()
    {
        $cluster = new CouchbaseCluster("couchbase://127.0.0.1");
        $bucket = $cluster->openBucket("sqltocb");

        $query = CouchbaseN1qlQuery::fromString("SELECT b.* FROM `sqltocb` b LIMIT 10;");
        $query->consistency(CouchbaseN1qlQuery::REQUEST_PLUS);
        $result = $bucket->query($query);
        echo json_encode($result->rows);
    }
}

?>

但我收到错误Error: Class 'App\Controller\CouchbaseCluster' not found,我认为这意味着我没有正确安装扩展程序。知道我做错了什么吗?

【问题讨论】:

  • 您没有指向(完全合格的)namespace。同样根据他们的API docs\Couchbase\Cluster\Couchbase\N1qlQuery
  • 我添加了namespace \Couchbase\Cluster; use \Couchbase\N1qlQuery;,现在我得到一个不同的错误:Error: Class 'App\Controller\CouchbaseCluster' not found
  • 对我来说似乎是同样的错误。你真的添加了namespace ...,还是你输入了use ...是一个错字?对于初学者,您只需将CouchbaseCluster 替换为\Couchbase\Cluster,将CouchbaseN1qlQuery 替换为\Couchbase\N1qlQuery
  • 也许,我不确定您是否可以在ini文件中提供扩展名的路径,最好尝试将文件直接放在扩展文件夹中(如extension_dir中配置的那样)...是你确定没有任何启动错误?检查您的 PHP 错误日志。还要确保您正在修改的 PHP 配置实际上是服务器使用的配置。
  • 你能确定你已经加载了 couchbase 扩展吗?你能发布这些命令的输出吗? php -i | grep 'couchbase\|json' php --modules | grep 'json\|couchbase'

标签: php windows cakephp pecl


【解决方案1】:

我的系统版本

PS> [Environment]::OSVersion

Platform ServicePack Version      VersionString
-------- ----------- -------      -------------
 Win32NT             10.0.14393.0 Microsoft Windows NT 10.0.14393.0

下载并解压 PHP 解释器和 Couchbase 扩展:

PS> Invoke-WebRequest -Uri "http://windows.php.net/downloads/releases/php-5.6.31-Win32-VC11-x86.zip" -OutFile "php-5.6.31-Win32-VC11-x86.zip"
PS> Expand-Archive "php-5.6.31-Win32-VC11-x86.zip" -DestinationPath "C:\php"
PS> Invoke-WebRequest -Uri "http://packages.couchbase.com/clients/php/php_couchbase-2.3.4-5.6-zts-vc11-x86.zip" -OutFile "php_couchbase-2.3.4-5.6-zts-vc11-x86.zip"
PS> Expand-Archive "php_couchbase-2.3.4-5.6-zts-vc11-x86.zip" -DestinationPath "C:\php\ext"

libcouchbase.dll 复制到您的SAPI 所在的位置(在我们的例子中,SAPI 是PHP CLI,因此我们将其复制到php.exe 所在的同一目录中):

PS> copy "C:\php\ext\libcouchbase.dll" "C:\php\libcouchbase.dll"

更新配置:

PS> copy "C:\php\php.ini-development" "C:\php\php.ini"
PS> "extension=php_couchbase.dll" | Add-Content "C:\php\php.ini"

让我们检查一下设置:

PS> C:\php\php.exe -i 2>$null | findstr -i couchbase
couchbase
couchbase support => enabled
libcouchbase runtime version => 2.7.6 (git: e15b267765913f110fd1bbf65749c54b56875ebf)
libcouchbase headers version => 2.7.6 (git: e15b267765913f110fd1bbf65749c54b56875ebf)
igbinary transcoder => disabled (install pecl/igbinary and rebuild pecl/couchbase)
couchbase.decoder.json_arrays => 0 => 0
couchbase.encoder.compression => off => off
couchbase.encoder.compression_factor => 0.0 => 0.0
couchbase.encoder.compression_threshold => 0 => 0
couchbase.encoder.format => json => json
couchbase.log_level => WARN => WARN

如果您使用不同的东西而不是 C:\php,那么请确保您的扩展目录与 PHP 正在寻找扩展的位置匹配,因为这是它默认输出的内容(并且 php.ini-development 不会覆盖它) :

PS> C:\php\php.exe  -i 2>$null | findstr -i extension_dir
extension_dir => C:\php\ext => C:\php\ext

所有sn-ps都在主目录中使用PowerShell执行,PS&gt;表示它的提示符。

【讨论】:

  • 我几乎一开始就遵循了所有这些步骤。关键区别在于您使用了c:\php,而我使用了c:\program files\php\v5.6\'. In the externsion_dir I had to set it to an escaped string "c:\\Program Files\\php\\v.5.6\\ext\\"`,然后它就可以正常工作了。
猜你喜欢
  • 2010-09-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-06
  • 2021-02-25
  • 1970-01-01
  • 2018-09-25
相关资源
最近更新 更多