public function run() { $downloadQueue = $this->runner->queueManager->getQueue('download'); $failedQueue = $this->runner->queueManager->getQueue('fail'); $doneQueue = $this->runner->queueManager->getQueue('done'); $tmp = sys_get_temp_dir(); while ($task = $downloadQueue->pop()) { $url = Url::fromJson($task); $curl = (new CurlRequest($url->getUrl()))->exec(); if ($curl->getHttpCode() !== 200) { if ($curl->getErrno()) { $url->error = $curl->getError(); } else { $url->error = "http status {$curl->getHttpCode()}"; } $failedQueue->push($url); continue; } if (!preg_match('@^image/(.+)$@', $curl->getContentType(), $m)) { $url->error = 'Not an image'; $failedQueue->push($url); continue; } $this->saveFile($curl, $url->extension ? false : $m[1], $tmp); $doneQueue->push($url); } }