【问题标题】:Trouble loading predis on php website在php网站上加载predis时遇到问题
【发布时间】:2011-09-24 17:45:59
【问题描述】:

答案: 我不得不将 PREDIS_BASE_PATH 的路径更改为 predis/lib/。

我想在 PHP 文件中加载 predis,但遇到了麻烦。我正在按照 predis github 网站 (https://github.com/nrk/predis) 上加载 predis 的指南进行操作。 这是我用来加载 predis 的代码:

define("PREDIS_BASE_PATH", "predis/");
echo "The predis base path is: " . PREDIS_BASE_PATH . "\n";
spl_autoload_register(function($class) {
  $file = PREDIS_BASE_PATH . strtr($class, '\\', '/') . '.php';
  echo "The file variable is: " . $file . "\n";
  if (file_exists($file)) {
    require $file;
    return true;
  }
});

$redis = new Predis\Client(array(
  'host'  => 'localhost',
  'port'  => 6379,
));

这是我得到的错误:

Fatal error: Class 'Predis\Client' not found

编辑:应该导入predis目录中的什么文件?更改文件夹权限后,我可以回显 $file 所持有的变量:“文件变量是:predis/Predis/Client.php”

根据这里列出的目录https://github.com/nrk/predis,没有client.php文件。

【问题讨论】:

  • 正如错误所说,该类不在当前范围内。确定 $file 正确吗?

标签: php redis predis


【解决方案1】:

我使用下面的代码在php页面上连接predis,它工作正常..下面是代码

<?php
        require "predis/autoloader.php";
        Predis\Autoloader::register();

        $redis = new Predis\Client(array(
         "scheme" => "tcp",
         "host" => "127.0.0.1",
         "port" => 6379));
?>

【讨论】:

  • 为什么会有两次instance,$redis = new Predis\Client(); $redis = new Predis\Client(array(...
【解决方案2】:

编写如下代码调用注册方法:

Predis\Autoloader::register();

而不是PredisAutoloader::register();

并将您的测试文件与 Predis 文件夹平行放置。

【讨论】:

    【解决方案3】:
    $redis = new Predis\Client(array(
    

    应该是

    $redis = new Predis_Client(array(
    

    【讨论】:

    • 是的,但这不起作用。如果查看 Predis.php 的代码,没有 Predis\Client 类,但是有 Predis_Client。我也遇到了这个错误。
    【解决方案4】:

    我使用 composer 安装了 Redis,但很难让它工作。最终,以下脚本起作用了。

    define('__ROOT__', dirname(dirname(__FILE__))); 
    echo "Root ".dirname(dirname(__FILE__));
    require_once(__ROOT__.'/vendor/autoload.php');//load all PHP dependencies
    //require_once(__ROOT__.'/vendor/predis/predis/autoload.php'); //load only Redis also works
    $REDIS_SERVER="127.0.0.1";
    $REDIS_PORT=6379;
    try 
    {
        echo "<p>Connecting to Redis $REDIS_SERVER:$REDIS_PORT";
    
        $redis = new Predis\Client(array(
            "scheme" => "tcp",
            "host" => $REDIS_SERVER,
            "port" => $REDIS_PORT
        ));
        echo "<p>Hello I am Redis";
    ...
    

    【讨论】:

      【解决方案5】:

      您的代码看起来非常好。我只能假设您没有正确导入该类。您确定 $file 是代码假设的位置吗?

      仔细检查它的存在并使用sudo chmod -R 777 /path/to/file 将权限设置为777,看看是否有效。

      如果它工作/不工作,之后将权限重置为更安全的东西。

      希望对你有帮助

      编辑:

      下载Predis.php,和你的php代码放在同一目录下,代码如下:

        spl_autoload_register(function($class) {
        $file =  strtr($class, '\\', '/') . '.php';
        echo "The file variable is: " . $file . "\n";
        if (file_exists($file)) {
          require $file;
          return true;
        }
      });
      
      $redis = new Predis\Client(array(
        'host'  => 'localhost',
        'port'  => 6379,
      ));
      

      【讨论】:

      • 应该导入哪个文件?
      • Predis.php 是需要的文件
      • predis.php文件在哪里?我正在查看 predis/lib 目录,但找不到。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多