1

Bellow is my script that I use to verify email address existence, using pthreads for speed. The problem is the when I put it in Laravel command I get this error:

Fatal error: Call to undefined method Illuminate\Support\Facades\Log::error() in /vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 208

This is the script:

<?php

            use Illuminate\Console\Command;
            use Symfony\Component\Console\Input\InputOption;
            use Symfony\Component\Console\Input\InputArgument;



            class verifyLocal extends Command
            {

                protected $name = 'verify:local';
                protected $description = 'verify emails from local server';



                public function __construct()
                {
                    parent::__construct();

                }

                public function fire()
                {
                    $start = microtime(true);
                    $emails = array(
                        new WebRequest("email_1@gmail.com"),
                        new WebRequest("email_2@gmail.com")
                    );

                    $threads = array();

                    foreach ($emails as $k => $email) {
                        $req[$k] = new WebRequest($email);
                        $threads[$k] = new WebWorker();
                        $threads[$k]->start();
                        $threads[$k]->stack($req[$k]);
                    }

                    /* wait for completion */
                    foreach ($threads as $thread) {
                        $thread->shutdown();
                    }

                    foreach ($req as $r) {
                        var_dump($r);
                    }

                    $time = microtime(true) - $start;
                    printf("Fetched %d responses in %.3f seconds\n", count($req), $time);

                }

            }




            class WebRequest extends Stackable {
                public $email_address;
                public $response_body;

                public function __construct($email_address) {
                    $this->email_address = $email_address;
                }

                public function run(){
                    $this->response_body = $this->check($this->email_address);
                }

                public function check($email) {
                    /* verification code here */
                    $answer = true;
                    return $answer;
                }


            }

            class WebWorker extends Worker {
                public function __construct () {

                }
                public function run(){

                }
            }


            ?>

Any help, please. Thanks.

kpios
  • 11
  • 2

1 Answers1

2

I don't use Laravel, my guess is that you need to install the autoloader in the run method of the Worker/Thread so that laravel will work correctly, try that first ...

foreach ($emails as $k => $email) {
    $req[$k] = new WebRequest($email);
    $threads[$k] = new WebWorker();
    $threads[$k]->start();
    $threads[$k]->stack($req[$k]);
}

This says you want to create a worker for each email, which is very wasteful indeed.

Joe Watkins
  • 17,032
  • 5
  • 41
  • 62