Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows 10上安装PHP扩展_Php_Windows_Cakephp_Pecl - Fatal编程技术网

在Windows 10上安装PHP扩展

在Windows 10上安装PHP扩展,php,windows,cakephp,pecl,Php,Windows,Cakephp,Pecl,我已经离开PHP一段时间了。现在,我有一个运行在IIS上的CakePHP 3.x站点。现在,我需要安装并使用一个扩展(特别是Couchbase扩展,但我不认为我的问题是Couchbase特定的) 我已经从PECL()下载了DLL 我想我必须把文件放在那个zip文件的某个地方,然后我必须在ExtensionList下对php.ini进行更改。但是我不确定具体把文件放在哪里,或者引用哪个DLL 我试着把它们放到C:\ProgramFiles(x86)\PHP\v5.6\ext\couchbase中,

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

我已经从PECL()下载了DLL

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

我试着把它们放到
C:\ProgramFiles(x86)\PHP\v5.6\ext\couchbase
中,然后我在PHP.ini中添加了
extension=couchbase/PHP\u couchbase.dll
,重新启动了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);
    }
}

?>

但是我得到一个错误:找不到类'App\Controller\CouchbaseCluster',我认为这意味着我没有正确安装扩展。知道我做错了什么吗?

我的系统版本

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\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开发
不会覆盖它):


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

您没有指向(完全限定的)。根据他们的不同,它是
\Couchbase\Cluster
\Couchbase\N1qlQuery
。我添加了
名称空间\Couchbase\Cluster;使用\Couchbase\N1qlQuery现在我得到了一个不同的错误:
错误:找不到类'App\Controller\CouchbaseCluster'
对我来说似乎是相同的错误。您是否真的添加了
名称空间…
,或者这是一个输入错误,而您使用了…
?对于初学者,您应该只需要将
CouchbaseCluster
替换为
\Couchbase\Cluster
,将
CouchbaseN1qlQuery
替换为
\Couchbase\N1qlQuery
。也许,我不确定您是否可以在ini文件中提供扩展名路径,最好尝试将该文件直接放在扩展名文件夹中(在扩展目录中配置)…你确定没有任何启动错误吗?检查你的PHP错误日志。还要确保你正在修改的PHP配置实际上是服务器使用的配置。你能确保你加载了couchbase扩展吗?你能发布这些命令的输出吗?
PHP-i | grep | couchbase\| json | PHP--modules | grep | json\| couchbase'
首先我基本上遵循了所有这些步骤。关键的区别是您使用了
c:\php
,而我使用了
c:\program files\php\v5.6\'。在extension_dir中,我必须将其设置为转义字符串
“c:\\program files\\php\\v.5.6\\ext\\”,然后它工作正常。
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
PS> C:\php\php.exe  -i 2>$null | findstr -i extension_dir
extension_dir => C:\php\ext => C:\php\ext