/** * packages.json & provider-xxx$xxx.json downloader */ function downloadProviders($config, $globals) { $cachedir = $config->cachedir; $packagesCache = $cachedir . 'packages.json'; $req = new Request($config->packagistUrl . '/packages.json'); $req->setOption('encoding', 'gzip'); $res = $req->send(); if (200 === $res->getStatusCode()) { $packages = json_decode($res->getBody()); foreach (explode(' ', 'notify notify-batch search') as $k) { if (0 === strpos($packages->{$k}, '/')) { $packages->{$k} = 'https://packagist.org' . $packages->{$k}; } } file_put_contents($packagesCache . '.new', json_encode($packages)); } else { //no changes'; copy($packagesCache, $packagesCache . '.new'); $packages = json_decode(file_get_contents($packagesCache)); } if (empty($packages->{'provider-includes'})) { throw new \RuntimeException('packages.json schema changed?'); } $providers = []; $numberOfProviders = count((array) $packages->{'provider-includes'}); $progressBar = new ProgressBarManager(0, $numberOfProviders); $progressBar->setFormat('Downloading Providers: %current%/%max% [%bar%] %percent%%'); foreach ($packages->{'provider-includes'} as $tpl => $version) { $fileurl = str_replace('%hash%', $version->sha256, $tpl); $cachename = $cachedir . $fileurl; $providers[] = $cachename; if (!file_exists($cachename)) { $req->setOption('url', $config->packagistUrl . '/' . $fileurl); $res = $req->send(); if (200 === $res->getStatusCode()) { $oldcache = $cachedir . str_replace('%hash%', '*', $tpl); if ($glob = glob($oldcache)) { foreach ($glob as $old) { $globals->expiredManager->add($old, time()); } } if (!file_exists(dirname($cachename))) { mkdir(dirname($cachename), 0777, true); } file_put_contents($cachename, $res->getBody()); if ($config->generateGz) { file_put_contents($cachename . '.gz', gzencode($res->getBody())); } } else { $globals->retry = true; } } $progressBar->advance(); } return $providers; }
} } // prepare request $post_data = json_decode(file_get_contents(CONFIG_DIR . 'post_data.json'), true); if (json_last_error() > 0) { exit('JSON Error in post_data.json!'); } if ((bool) $params['use_proxy']) { $proxy_list = json_decode(file_get_contents(CONFIG_DIR . 'proxy_list.json'), true); if (json_last_error() > 0) { exit('JSON Error in proxy_list.json!'); } } $request = new Request($params['target'], (bool) $params['http_post']); $request->useBrowser($params['browser']); $request->setOption('TIMEOUT', $params['timeout']); // does the file with fake user credentials exist? if (!file_exists($params['use'])) { exit('File ' . $params['use'] . ' doesnt exist!'); } $requests = 0; $requests_200 = 0; $handle = fopen($params['use'], 'r'); while ($line = trim(fgets($handle))) { if ((bool) $params['use_proxy']) { if (count($proxy_list) == 0) { exit('No proxy in proxy_list.json'); } $proxy = $proxy_list[mt_rand(0, count($proxy_list) - 1)]; $request->setProxy($proxy['ip'], $proxy['port']); }