小编Fur*_*gas的帖子

使用HTTPS时,PHP 5.6中的SoapClient会发出"键值不匹配"的警告

使用PHP 5.6.9升级到Debian 8后(从PHP 5.4更改)我在使用HTTPS端点地址调用SOAP Web服务时收到此警告:

Warning: SoapClient::__doRequest(): SSL operation failed with code 1. OpenSSL Error messages: 
error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch
Run Code Online (Sandbox Code Playgroud)

随后是SoapFault:

Fatal error: Uncaught SoapFault exception: [HTTP] Error Fetching http headers
Run Code Online (Sandbox Code Playgroud)

file_get_contents使用Web服务URL 调用不会触发此警告.

我没有在此SOAP调用上为ssl设置任何流上下文选项.

你有什么线索这个警告在这个背景下意味着什么,以及如何正确摆脱它?

编辑

在我的特定用例中,我正在调用两个Web服务方法:A和B.方法A在没有警告的情况下工作,然后在其结果上调用一些openssl方法,然后调用方法B来触发警告.当我删除对方法A的调用并从缓存加载其结果时,方法B(和任何其他)在没有警告的情况下工作.这很奇怪 - 我需要进一步调查.

EDIT2

我已经解决了问题并使其可测试.以下情况似乎会导致此警告:

  1. 使用HTTPS端点调用一些SOAP方法.
  2. openssl_pkcs12_read使用额外的证书调用PKCS#12文件.
  3. 再次使用HTTPS端点调用一些SOAP方法.它会引起警告和SoapFault.

下面是使用一些公开的SOAP Web服务和自签名证书的示例.

<?php

$p12 = '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';

$sc = new SoapClient('https://finanzonline.bmf.gv.at/fon/services/FileUploadWSI/wsdl/FileUploadWSIService.wsdl');

var_dump($sc->GetVersion());

$result = openssl_pkcs12_read(base64_decode($p12), $cert_data, 'qwerty');
var_dump($cert_data);

var_dump($sc->GetVersion());
Run Code Online (Sandbox Code Playgroud)

有人可以测试这个脚本吗?在PHP Version 5.6.9-0+deb8u1OpenSSL 1.0.1k 8 Jan 2015我有没有第二个结果GetVersion呼叫,警告和错误. …

php soap openssl php-5.6

5
推荐指数
1
解决办法
1936
查看次数

如何在 PhpStorm 中包含 PHAR 的一部分包含路径

我正在使用 PhpStorm 和Deployer,因此我包含deployer.phar在 PHP Include 路径中以在文件中自动完成deploy.php。包含整个deployer.pharPhpStorm 后抱怨重复的类定义 - 一个来自我的应用程序供应商目录,第二个来自deployer.phar供应商目录。

是否可以以某种方式配置 PhpStorm Include 路径,以便仅src包含 PHAR 文件的某些部分(例如仅包含目录)?这不起作用:

/path/to/deployer.phar/src
Run Code Online (Sandbox Code Playgroud)

也不是这个:

phar:///path/to/deployer.phar/src
Run Code Online (Sandbox Code Playgroud)

我想避免安装deployer/deployer为作曲家开发包。

编辑

看来即使在包含路径中添加单个 PHAR 文件也是一种黑客行为。

php phar phpstorm php-deployer

5
推荐指数
1
解决办法
576
查看次数

如何访问Ratchet WebSockets中的Guzzle QueryString参数?

嗨,我正在使用radchet websocket.我很难从对象变量中获取数据.

请检查我的代码:

var conn = new WebSocket('ws://localhost:8080?user_id=10&receiver_id=20');
$querystring = $conn->WebSocket->request->getQuery();
print_r($querystring);
Run Code Online (Sandbox Code Playgroud)

输出:

Guzzle\Http\QueryString Object
(
    [fieldSeparator:protected] => &
    [valueSeparator:protected] => =
    [urlEncode:protected] => RFC 3986
    [aggregator:protected] =>
    [data:protected] => Array
        (
            [user_id] => 10
            [receiver_id] => 20
        )
)
Run Code Online (Sandbox Code Playgroud)

上面的代码我想user_idreceiver_id,但我无法得到.

我的代码:

echo $querystring->data:protected['user_id'];
echo $querystring->data:protected['receiver_id'];
Run Code Online (Sandbox Code Playgroud)

我已经回应但收到错误消息.请帮我.

编辑:

如果我将对象转换为数组,则表示格式不正确.见下文.

$array =  (array)  $querystring;
print_r($array);
Run Code Online (Sandbox Code Playgroud)

输出:

Array
(
    [ * fieldSeparator] => &
    [ * valueSeparator] => =
    [ * urlEncode] => RFC 3986
    [ * aggregator] …
Run Code Online (Sandbox Code Playgroud)

php guzzle ratchet

1
推荐指数
1
解决办法
886
查看次数

标签 统计

php ×3

guzzle ×1

openssl ×1

phar ×1

php-5.6 ×1

php-deployer ×1

phpstorm ×1

ratchet ×1

soap ×1