$dirsByCommit) { $chs[] = $ch = array(curl_init(), fopen($_SERVER['HOME'].'/.cache/composer/repo/https---repo.packagist.org/provider-'.strtr($name, '/', '$').'.json', 'wb')); curl_setopt($ch[0], CURLOPT_URL, 'https://repo.packagist.org/p/'.$name.'.json'); curl_setopt($ch[0], CURLOPT_FILE, $ch[1]); curl_setopt($ch[0], CURLOPT_SHARE, $sh); curl_multi_add_handle($mh, $ch[0]); } do { curl_multi_exec($mh, $active); curl_multi_select($mh); } while ($active); foreach ($chs as list($ch, $fd)) { curl_multi_remove_handle($mh, $ch); curl_close($ch); fclose($fd); } foreach ($referencedCommits as $name => $dirsByCommit) { $repo = file_get_contents($_SERVER['HOME'].'/.cache/composer/repo/https---repo.packagist.org/provider-'.strtr($name, '/', '$').'.json'); $repo = json_decode($repo, true); foreach ($repo['packages'][$name] as $version) { unset($referencedCommits[$name][$version['source']['reference']]); } } foreach ($referencedCommits as $name => $dirsByCommit) { foreach ($dirsByCommit as $dirs) { foreach ($dirs as $dir) { echo "$dir/composer.lock references old commit for $name.\n"; @unlink($dir.'/composer.lock'); } } }