Skip to content

Instantly share code, notes, and snippets.

@bitraft
Forked from beberlei/packagist_proxy.php
Created February 13, 2014 03:01
Show Gist options
  • Save bitraft/8968996 to your computer and use it in GitHub Desktop.
Save bitraft/8968996 to your computer and use it in GitHub Desktop.
<?php
$baseUrl = "http://localhost/packagist";
$baseDir = "/var/www/packagist";
if (!file_exists($baseDir)) {
echo "Base dir $baseDir for local packagist proxy does not exist\n";
exit(1);
}
$packagesJson = $baseDir . "/packages.json";
$packagistJson = json_decode(file_get_contents("http://www.packagist.org/packages.json"), true);
if (file_exists($packagesJson)) {
$localJson = json_decode(file_get_contents($packagesJson), true);
} else {
$localJson = array();
}
$packageCount = count($packagistJson);
$i = 0;
foreach ($packagistJson as $name => $package) {
$i++;
$localPackage = $package;
$localPackage['versions'] = array();
foreach ($package['versions'] as $version => $data) {
if (isset($localJson[$name]['versions'][$version]) &&
$localJson[$name]['versions'][$version]['dist']['reference'] == $data['dist']['reference']) {
continue;
}
if ($data['dist']['type'] != 'zip') {
continue;
}
$url = $data['dist']['url'];
$relativeFile = '/' . $name . '/' . $version . '.zip';
$path = $baseDir . $relativeFile;
echo "Downloading $name @ $version";
downloadInto($path, $url);
echo ". [$i/$packageCount]\n";
if (!isset($localJson[$name])) {
$localJson[$name] = $localPackage;
}
$data['dist']['url'] = $baseUrl . $relativeFile;
$localJson[$name] = $data;
}
file_put_contents($packagesJson, json_encode($localJson));
}
function downloadInto($path, $url)
{
if (!file_exists(dirname($path))) {
mkdir(dirname($path), 0777, true);
}
$fp = fopen($path, 'w');
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
fclose($fp);
}
@bitraft
Copy link
Author

bitraft commented Mar 4, 2014

{
    "repositories": [
        { "packagist": false },
        {
            "type": "composer",
            "url": "http://packagist.org",
            "options": {
                "ssl": {
                        "verify_peer": "false"
                }
            }
        }
    ]
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment