如何在PHP中加载Pheanstalk?

时间:2014-10-01 02:56:52

标签: php beanstalkd pheanstalk

我试图让Pheanstalk为PHP工作,但我无法加载它。

我从https://github.com/pda/pheanstalk下载了源代码,我将src / Pheanstalk移到我的项目目录中,然后在test.php中执行了以下操作:

use Pheanstalk\Pheanstalk;
$pheanstalk = new Pheanstalk('127.0.0.1');

但是这给了我以下错误:

Fatal error: Class 'Pheanstalk\Pheanstalk' not found in test.php on line 2

如何从克隆的git存储库中使用Pheanstalk?

2 个答案:

答案 0 :(得分:4)

我写了一篇关于Beanstalk,Beanstalkd和Pheanstalk的文章;

检查出来:How to install Beanstalkd and Pheanstalk on Ubuntu

您的问题的解决方案就在那里。

1)。使用Ubuntu Desktop安装ServerVirtual Machine

我在这个例子中使用了Oracle VM VirtualBox

确保已设置Bridged Network Connection

在被要求时设置用户名和密码。

我用过:

用户名:william 密码:123456

2)。启动Ubuntu并登录

3)。以超级用户身份登录

使用:sudo su 并在请求时输入超级用户密码(我的是:123456);

4)。安装Open SSH并通过Ubuntu virtual machine访问Putty

docs:https://help.ubuntu.com/10.04/serverguide/openssh-server.html

使用:apt-get install openssh-client

安装客户端然后

使用:apt-get install openssh-server

安装服务器;

5)。安装Apache2 Web服务器

使用:apt-get install apache2

现在在浏览器中输入以下内容:

http://localhost

和 你的虚拟机ip(我是192.168.1.104

6)。安装MySQL

使用:apt-get install mysql-server php5-mysql

MySQL root用户设置密码:123456 重复密码:123456

7)。安装PHP5

使用:apt-get install php5 libapache2-mod-php5 php5-mcrypt

8)。安装cURL

使用:apt-get install curl

9)。安装Composer

官方网站:https://getcomposer.org/ docs:https://getcomposer.org/doc/00-intro.md(入门)

使用:curl -s http://getcomposer.org/installer | php 要么 使用:curl -sS https://getcomposer.org/installer | php 现在,必须移动和转换composer.phar

使用:mv composer.phar /usr/bin/composer

10)。安装Beanstalkd

使用:apt-get install beanstalkd

现在,让我们确保beanstalkd persistent mode is active

ps ax

ps ax | grep豆

找到beanstalkd.conf

updatedb的

找到beanstalkd.conf

nano /etc/default/beanstalk

uncomment last line in order to save persistent mode to active

11)。安装Pheanstalk

docs:https://github.com/pda/pheanstalk

更改目录 使用:cd /var/www/html

创建一个新目录:/ var / www / html / pheanstalk_test 使用:mkdir pheanstalk_test

将目录更改为新创建的目录 使用:cd pheanstalk_test

在这个新目录下创建一个composer.json文件 使用:nano composer.json

在文件中写下以下数据: { "require":{ "pda/pheanstalk":"v3.0.0" } }

并保存文件(按Ctrl + X键,按Y键,按ENTER键)

使用:composer update

现在,应该开始下载供应商文件夹数据

或使用:git clone https://github.com/pda/pheanstalk.git

例子: 如何将数据放在tube / s上

<?php include 'vendor/autoload.php'; use Pheanstalk\Pheanstalk; $pheanstalk = new Pheanstalk('127.0.0.1'); while(true){ $tube_id=rand(1,9); $r1=rand(1,10000000); $r2=rand(1,10000000); $pheanstalk->useTube('testtube'.$tube_id)->put('{'.$r1.':'.$r2.'}'); } ?>

使用:php put.php 并且将开始放置过程 信息!打开的实例越多,管上的数据就越多

如何从tube / s获取数据

<?php include 'vendor/autoload.php'; use Pheanstalk\Pheanstalk; $pheanstalk = new Pheanstalk('127.0.0.1'); while(true){ $tube_id=rand(1,9); $job=$pheanstalk->watch('testtube'.$tube_id)->ignore('default')->reserve(); if($job){ echo $job->getdata(); $pheanstalk->delete($job); } } ?>

使用:php get.php 并且将开始获取进程 信息!打开的实例越多,处理的数据就越多;

12)。安装Beanstalk Console

docs:https://github.com/ptrofimov/beanstalk_console

更改目录

使用:cd /var/www/html

创建一个新文件夹

使用:mkdir beanstalk_console

使用:git clone https://github.com/ptrofimov/beanstalk_console.git

更改文件的权限:storage.json chmod 777 storage.json

现在,要访问beanstalk console,请在浏览器中输入:http://localhost/beanstalk_console/public

13)。就是这样!

答案 1 :(得分:0)

虽然Ionut的回答对于让Pheanstalk工作是可行的,但它实际上并没有回答提出的问题:你如何从项目回购的git克隆中获得Pheanstalk工作? (这里暗示您不想使用Composer进行安装,这是我将用于此答案的假设。)

主要问题是你不能只require('src/Pheanstalk.php');然后开始使用Pheanstalk类。 Pheanstalk库在很大程度上依赖于PHP类自动加载,因此如果没有这种设置,它将如原始问题中所述那样出错。

如果您的项目已经有PSR-4兼容的自动加载器,那太好了!将它指向composer.json文件的psr-4部分并观察神奇的工作。

然而,对于其他所有人,您希望在对类似问题的回答中使用Thibault提供的功能:https://stackoverflow.com/a/39774973

假设您已将Pheanstalk git repo克隆到您pheanstalk的项目中,那么您可以使用loadPackage('pheanstalk')并且它应该都能正常工作。

完整示例:

function loadPackage($dir)
{
    $composer = json_decode(file_get_contents("$dir/composer.json"), 1);
    $namespaces = $composer['autoload']['psr-4'];

    // Foreach namespace specified in the composer, load the given classes
    foreach ($namespaces as $namespace => $classpath) {
        spl_autoload_register(function ($classname) use ($namespace, $classpath, $dir) {
            // Check if the namespace matches the class we are looking for
            if (preg_match("#^".preg_quote($namespace)."#", $classname)) {
                // Remove the namespace from the file path since it's psr4
                $classname = str_replace($namespace, "", $classname);
                $filename = preg_replace("#\\\\#", "/", $classname).".php";
                include_once $dir."/".$classpath."/$filename";
            }
        });
    }
} 

loadPackage(__DIR__."/pheanstalk");

use Pheanstalk\Pheanstalk;

$pheanstalk = new Pheanstalk('127.0.0.1');

echo $pheanstalk->getConnection()->isServiceListening();