在Windows 10上安装PHP扩展

时间:2017-07-26 17:03:15

标签: php windows cakephp pecl

我已经离开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,我认为这意味着我没有正确安装扩展程序。知道我做错了吗?

1 个答案:

答案 0 :(得分: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

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