在 Windows 10 上安装 PHP 扩展

Installing a PHP extension on Windows 10

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

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

我认为我必须将文件放在那个 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,我认为这意味着我没有正确安装扩展。知道我做错了什么吗?

我的系统版本

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

使用 PowerShell 在主目录中执行的所有片段,PS> 表示其提示。