PubNub PHP SDK V4 Issues

Any idea why this fails?

Here is a PubNub PHP SDK V4 working code which throws the error:

PHP Parse error:  syntax error, unexpected 'use' (T_USE) in  ..... 

According to the PubNub docs, V4 of the PHP SDK support PHP v5.6, so I'm really confused as to why this error.

Directly from this PubNub here:

<?php
require_once('vendor/autoload.php');

use PubNub\PubNub;
use PubNub\Enums\PNStatusCategory;
use PubNub\Callbacks\SubscribeCallback;
use PubNub\PNConfiguration;
 
class MySubscribeCallback extends SubscribeCallback {
    function status($pubnub, $status) {
        if ($status->getCategory() === PNStatusCategory::PNUnexpectedDisconnectCategory) {
            // This event happens when radio / connectivity is lost
        } else if ($status->getCategory() === PNStatusCategory::PNConnectedCategory) {
            // Connect event. You can do stuff like publish, and know you'll get it
            // Or just use the connected event to confirm you are subscribed for
            // UI / internal notifications, etc
        } else if ($status->getCategory() === PNStatusCategory::PNDecryptionErrorCategory) {
            // Handle message decryption error. Probably client configured to
            // encrypt messages and on live data feed it received plain text.
        }
    }
 
    function message($pubnub, $message) {
        // Handle new message stored in message.message
    }
 
    function presence($pubnub, $presence) {
        // handle incoming presence data
    }
}
 
$pnconf = new PNConfiguration();
$pubnub = new PubNub($pnconf);
 
$pnconf->setSubscribeKey("my_sub_key");
$pnconf->setPublishKey("my_pub_key");
 
$pubnub->addListener($subscribeCallback);
 
// Subscribe to a channel, this is not async.
$pubnub->subscribe()
    ->channels("hello_world")
    ->execute();
 
// Use the publish command separately from the Subscribe code shown above.
// Subscribe is not async and will block the execution until complete.
$result = $pubnub->publish()
              ->channel("hello_world")
              ->message("Hello PubNub")
              ->sync();
 
print_r($result);

For PubNub PHP SDK V3, this bare bones should work (installed with composer):

<?php
require_once('/var/www/pubnub_v3/vendor/autoloader.php'); 

$skey = "my-sub-key"; 
$pkey =  "my-pub-key"; 

$pubnub = new Pubnub($pkey, $skey ); 
$pubnub->publish(array('channel' => 'ch1', 'message' => array('some_text' => 'hello!'))); 

But this also produces an error:

PHP Fatal error:  Class 'Pubnub' not found in .....

But I searched in the file and the class Pubnub is there.

I repeated this bare bones PHP SDK for V4 and have the same error.

Hmmm. What's up with all these broken PubNub SDKs, LOL ?

Thanks to the excellent tech support team at PubNub, I have PubNub working with our PHP backend.

Thanks Trevor at PubNub.

This PubNub PHP SDK V4 test code works with PHP 5.6:

<?php
require __DIR__.'/vendor/autoload.php';

use PubNub\PNConfiguration;
use PubNub\PubNub;

date_default_timezone_set('GMT');

$pnconfig = new PNConfiguration();
$pnconfig->setPublishKey("demo");
$pnconfig->setSubscribeKey("demo");
$pubnub = new PubNub($pnconfig);

$data = array(
        "username" => "Server",
         "text" => "Test from PHP",
         "time" => time()
    );

$result = $pubnub->publish()->channel("demo")->message($data)->sync();

print_r($result);

?>

Great technical support from PubNub. Thank you!

1 Like

Hey Neo,

There is some special character with the line require and it is giving error:

require_once('vendor/autoload.php');
See below code, it is working for me:
require_once('vendor/autoload.php');

use PubNub\PubNub;
use PubNub\Enums\PNStatusCategory;
use PubNub\Callbacks\SubscribeCallback;
use PubNub\PNConfiguration;
 
class MySubscribeCallback extends SubscribeCallback {
    function status($pubnub, $status) {
        if ($status->getCategory() === PNStatusCategory::PNUnexpectedDisconnectCategory) {
            // This event happens when radio / connectivity is lost
        } else if ($status->getCategory() === PNStatusCategory::PNConnectedCategory) {
            // Connect event. You can do stuff like publish, and know you'll get it
            // Or just use the connected event to confirm you are subscribed for
            // UI / internal notifications, etc
        } else if ($status->getCategory() === PNStatusCategory::PNDecryptionErrorCategory) {
            // Handle message decryption error. Probably client configured to
            // encrypt messages and on live data feed it received plain text.
        }
    }
 
    function message($pubnub, $message) {
        // Handle new message stored in message.message
    }
 
    function presence($pubnub, $presence) {
        // handle incoming presence data
    }
}
 
$pnconf = new PNConfiguration();
$pubnub = new PubNub($pnconf);

$pnconf->setSubscribeKey("demo");
$pnconf->setPublishKey("demo");
$subscribeCallback = new MySubscribeCallback();
$pubnub->addListener($subscribeCallback);
 
// Subscribe to a channel, this is not async.
$pubnub->subscribe()
    ->channels("hello_world")
    ->execute();
 
// Use the publish command separately from the Subscribe code shown above.
// Subscribe is not async and will block the execution until complete.
$result = $pubnub->publish()
              ->channel("hello_world")
              ->message("Hello PubNub")
              ->sync();
 
print_r($result);

Happy coding :slight_smile:

1 Like