require(project/vendor/predis/predis/autoload.php): Failed to open stream: No such file or directory

219 views Asked by At

Have trulbles with predis library, while trying to import into php file, getting such error: require(project/vendor/predis/predis/autoload.php): Failed to open stream: No such file or directory BTW https://flareapp.io/share/353MNjEP#F49 Any ideas what is wrong?

<?php
 
namespace App\Http\Controllers;
 
use predis;
use mysqli;
use Illuminate\Http\Request;
 
class DataController extends Controller
{
    public function getDataFromDatabase()
    {

        $mysqli = new mysqli('localhost', 'root', '', 'storage');
 

        $result = $mysqli->query("SELECT * FROM ads");
 

        $data = [];
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
        }
 

        return $data;
    }
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        require 'project/vendor/predis/predis/autoload.php';
        Predis\Autoloader::register();

        $redis = new Predis\Client(array(
            "scheme" => "tcp",
            "host" => "127.0.0.1",
            "port" => 6379,
            "password" => "",
            "persistent" => "1"));
 
        $redis->connect('127.0.0.1', 6379);
 

        $data = $redis->get('data');
 

        if (!$data) {

            $data = $this->getDataFromDatabase();
 

            usort($data, function ($a, $b) {
                return $b['CPM'] <=> $a['CPM'];
            });
 

            $data = $data[0];
 

            $redis->set('data', $data, 60);
        }
 

        return view('ads', ['data' => $data['CPM']]);
    }
}


.env file:

.env file content : 'Redis' => [

        'client' => env('REDIS_CLIENT', 'predis'),

        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'predis'),
            'prefix' => env('REDIS_PREFIX', Str::slug(env('APPNAME', 'laravel'), '').'database'),
        ],

        'default' => [
            'url' => env('REDIS_URL', '127.0.0.1'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME', 'root'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_DB', 'storage'),
        ],

        'cache' => [
            'url' => env('REDIS_URL', '127.0.0.1'),
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'username' => env('REDIS_USERNAME', 'root'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', '6379'),
            'database' => env('REDIS_CACHE_DB', '1'),
        ],

Trying to import predis library, but getting error

1

There are 1 answers

0
ridwan_iridwan On

To the best of my knowledge, laravel under the hood already know how to handle connecting to redis through the client you configured. You dont need to manually load predis in your controller. Your invoke method can be like this:

/**
 * Handle the incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function __invoke(Request $request)
{
    $redis = Redis::connection();

    $data = $redis->get('data');


    if (!$data) {

        $data = $this->getDataFromDatabase();


        usort($data, function ($a, $b) {
            return $b['CPM'] <=> $a['CPM'];
        });


        $data = $data[0];


        $redis->set('data', $data, 60);
    }


    return view('ads', ['data' => $data['CPM']]);
}

You ll have to do use Illuminate\Support\Facades\Redis; in your use statement