Class Firebase\JWT\JWT not found

Jacobian picture Jacobian · Jan 22, 2017 · Viewed 20k times · Source

I want to use pure firebase/php-jwt library in my code. Firstly, I go to /var/www/html/ and like the official library page is suggesting, I do this

composer require firebase/php-jwt

After I run this command, I see that a new vendor folder is created inside /var/www/html/ with a lot of files and subfolders. I then create my token.php file right in /var/www/html/ with contents similar to that from the official page:

<?php
use \Firebase\JWT\JWT;

$key = "example_key";
$token = array(
    "iss" => "http://example.org",
    "aud" => "http://example.com",
    "iat" => 1356999524,
    "nbf" => 1357000000
);

$jwt = JWT::encode($token, $key);
$decoded = JWT::decode($jwt, $key, array('HS256'));

print_r($decoded);

However, when I go to localhost/token.php, I get this error message:

Fatal error: Uncaught Error: Class 'Firebase\JWT\JWT' not found in /var/www/html/token.php:12 Stack trace: #0 {main} thrown in /var/www/html/token.php on line 12

I'm not sure if it matters, but my PHP version is 7.0.

Answer

yivi picture yivi · Jan 22, 2017

As per the documentation, you need to include the autoloader.

E.g., in your php file:

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

But... typically your vendor folder would be at the same level than your html folder (the one where you are serving content).

E.g.:

- Project root
--- vendor
--- html
----- index.php

Then in your index.php you'd do:

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

It is nice that you trying to use composer and modules, but if I were you I'd try to read on a bit about php's autoloading features, so you understand what's going on, and how you can profit from them.