Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在laravel类文件中使用动态扩展名php.ini_Php_Laravel_Apache Kafka - Fatal编程技术网

如何在laravel类文件中使用动态扩展名php.ini

如何在laravel类文件中使用动态扩展名php.ini,php,laravel,apache-kafka,Php,Laravel,Apache Kafka,我一直在学习卡夫卡和拉威尔 所以我试图在laravel中实现kafka(使用rdkafka),但我遇到了一个问题 当我尝试在php中使用kafka时,在纯php中一切正常,但当我尝试在laravel中将其作为命令类实现时,我遇到了一个错误 $conf = new RdKafka\Conf(); 我想这就是问题所在, RdKafka是php.ini中的一个动态扩展(我直接从php.ini手动添加),当我尝试在laravel中实现时,它变得未定义,我不知道如何解决它 如何在laravel中使用动

我一直在学习卡夫卡和拉威尔

所以我试图在laravel中实现kafka(使用rdkafka),但我遇到了一个问题

当我尝试在php中使用kafka时,在纯php中一切正常,但当我尝试在laravel中将其作为命令类实现时,我遇到了一个错误

$conf = new RdKafka\Conf(); 
我想这就是问题所在, RdKafka是php.ini中的一个动态扩展(我直接从php.ini手动添加),当我尝试在laravel中实现时,它变得未定义,我不知道如何解决它

如何在laravel中使用动态扩展

下面是rdkafka的命令类和使用者函数教程
namespace App\Console\Commands;
use Illuminate\Console\Command;

class ExampleCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {

        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $conf = new RdKafka\Conf();


        $conf->set('group.id', 'myConsumerGroup');

        $rk = new RdKafka\Consumer($conf);
        $rk->addBrokers("127.0.0.1");

        $topicConf = new RdKafka\TopicConf();

        $topicConf->set('auto.commit.interval.ms', 100);
        $topicConf->set('offset.store.method', 'file');
        $topicConf->set('offset.store.path', sys_get_temp_dir());


        $topicConf->set('auto.offset.reset', 'smallest');

        $topic = $rk->newTopic("test", $topicConf);


        $topic->consumeStart(0, RD_KAFKA_OFFSET_STORED);

        while (true) {
            $message = $topic->consume(0, 120*10000);
            switch ($message->err) {
                case RD_KAFKA_RESP_ERR_NO_ERROR:
                    var_dump($message);
                    break;
                case RD_KAFKA_RESP_ERR__PARTITION_EOF:
                    echo "No more messages; will wait for more\n";
                    break;
                case RD_KAFKA_RESP_ERR__TIMED_OUT:
                    echo "Timed out\n";
                    break;
                default:
                    throw new \Exception($message->errstr(), $message->err);
                    break;
            }
        }

    }
}
我从artisan命令得到的错误

[Symfony\Component\Debug\Exception\FatalThrowableError]  
Class 'App\Console\Commands\RdKafka\Conf' not found 

我使用的是PHPStorm,IDE在识别名称空间时也遇到了同样的问题。我最终发现我需要安装存根,以便IDE识别扩展名称空间。扩展实际上可以工作(\RdKafka)。只是直到我安装了存根,IDE才识别名称空间


我正在使用PHPStorm,并且IDE在识别名称空间时遇到了同样的问题。我最终发现我需要安装存根,以便IDE识别扩展名称空间。扩展实际上可以工作(\RdKafka)。只是直到我安装了存根,IDE才识别名称空间


您需要导入命名空间或以“\”开头,它会尝试在当前命名空间中查找类。RdKafka不存在于我的项目文件夹中的任何目录中,它来自php.ini。当我在纯php中尝试代码时,我不需要包含RdKafka的任何目录,它只是工作而已。您的纯php脚本是否使用名称空间和自动加载?我不告诉您需要包含目录,只需要使用前导斜杠或导入名称空间(
使用
语句)。嗨,伙计,我在顶部使用了
use\RdKafka
,我的卡夫卡很好用。非常感谢@mateuszsip您需要导入名称空间或以“\”开头,它会尝试在您当前的名称空间中查找类。RdKafka不存在于我的项目文件夹中的任何目录中,它来自php.ini。当我在纯php中尝试代码时,我不需要包含RdKafka的任何目录,它只是工作而已。您的纯php脚本是否使用名称空间和自动加载?我不告诉您需要包含目录,只需要使用前导斜杠或导入名称空间(
使用
语句)。嗨,伙计,我在顶部使用了
use\RdKafka
,我的卡夫卡很好用。非常感谢@MateuszSip