首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web php libriary :引发内部错误

Web php libriary :引发内部错误
EN

Stack Overflow用户
提问于 2018-09-21 10:28:05
回答 2查看 1.7K关注 0票数 3

我使用web推送库发送推送通知https://github.com/web-push-libs/web-push-php

当我试图推送通知时,我得到了一个内部错误

我签入了两个PHP版本:7.1.22 7.2.9-1

Apache错误日志抛出:

错误Parse错误:语法错误,意外的'?',第41行/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php中的期望变量(T_VARIABLE),referer:http://localhost/PWA/web-push-php-example/src/

我还在Ngnix / error日志中尝试过:

17:22:36 error 20232#20232:*46 FastCGI在stderr中发送:"PHP消息: PHP通知:未定义的索引: Minishlink\WebPush\Subscription::__construct()第69行中的端点在第72行的/var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php中调用,并在/var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php:39堆栈跟踪中定义:在从上游读取响应头时,在第39行的/var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php中抛出,客户机: 127.0.0.1,服务器: local.pwa.com,请求:"POST local.pwa.com HTTP/2.0",上游:“referrer: //unix:/run/php/php7.2-fpm.sock:”,主机:"localhost",引用者:"https://localhost/PWA/web-push-php-example/src/

PHP代码:

代码语言:javascript
复制
<?php
require __DIR__ . '/../vendor/autoload.php';
use Minishlink\WebPush\WebPush;
use Minishlink\WebPush\Subscription;

// here I'll get the subscription endpoint in the POST parameters
// but in reality, you'll get this information in your database
// because you already stored it (cf. push_subscription.php)
$sub =json_decode(file_get_contents('php://input'), true);
$sub_endpoint =$sub['endpoint'];
$sub_publicKey =$sub['publicKey'];
$sub_authToken =$sub['authToken'];
$sub_contentEncoding =$sub['contentEncoding'];
$notifications = [
    [
        'subscription' => Subscription::create([            
            'endPoint' => $sub_endpoint,
            'publicKey' => $sub_publicKey,            
            'authToken' => $sub_authToken,            
            'contentEncoding' => $sub_contentEncoding, // one of PushManager.supportedContentEncodings
        ]),
        'payload' => '{msg:"test"}',
    ],
];

$auth = array(
    'VAPID' => array(
        'subject' => 'mailto:me@website.com', // can be a mailto: or your website address
        'publicKey' => 'BCmti7ScwxxVAlB7WAyxoOXtV7J8vVCXwEDIFXjKvD-ma-yJx_eHJLdADyyzzTKRGb395bSAtxlh4wuDycO3Ih4', // (recommended) uncompressed public key P-256 encoded in Base64-URL
        'privateKey' => 'HJ*******************' // (recommended) in fact the secret multiplier of the private key encoded in Base64-URL
        //'pemFile' => './keys/private_key.pem' // if you have a PEM file and can link to it on your filesystem        
    ),
);
$defaultOptions = array(
    'TTL' => 300, // defaults to 4 weeks
    'urgency' => 'normal', // protocol defaults to "normal"
    'topic' => 'push', // not defined by default - collapse_key
);

$webPush = new WebPush($auth, $defaultOptions);

// send multiple notifications with payload

$webPush->flush();

// send one notification and flush directly
$webPush->sendNotification(
    $notifications[0]['subscription'],
    $notifications[0]['payload'], // optional (defaults null)
    true // optional (defaults false)
);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-21 12:25:52

@Harish,Constructor‘?应该可以从PHP7.1版本开始工作。我发现您的参数值有错误。

/var/www/html/PWA/web-push-php-example/vendor/minishlink/web-push/src/Subscription.php中调用的__construct()类型必须为空给定的字符串

由于错误日志指示端点值作为null传递,因此应该将其作为字符串值传递。

您传入通知的变量为endPoint,但在lib中它被分配为端点。

票数 1
EN

Stack Overflow用户

发布于 2018-09-21 11:13:09

您确定您确实在运行PHP7.21或7.2吗?问题在于构造函数中的问号:

https://github.com/web-push-libs/web-push-php/blob/master/src/Subscription.php#L41-L43

从这个3v4l代码中可以看出,它适用于7.1以上的所有版本:

代码语言:javascript
复制
<?php
class X
{
    public function __construct(
        string $endpoint,
        ?string $publicKey = null,
        ?string $authToken = null,
        ?string $contentEncoding = null
    ) {
        $this->endpoint = $endpoint;

    }
}

$x = new X('blah', 'blahblah');

https://3v4l.org/A1XeN

代码的所有v5迭代都会产生错误:

代码语言:javascript
复制
Parse error: syntax error, unexpected '?', expecting variable (T_VARIABLE) in /in/A1XeN on line 6 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52441721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档