mirror of
https://github.com/php/doc-base.git
synced 2026-03-24 15:22:11 +01:00
120 lines
3.3 KiB
PHP
120 lines
3.3 KiB
PHP
<?php
|
|
define("DEBUG", 0);
|
|
$BUILDDIR = "http://www.mumumu.org/chm";
|
|
$TMPDIR = sys_get_temp_dir();
|
|
$CHMDIR = "/local/mirrors/phpweb/distributions/manual";
|
|
|
|
$chminfo = "$BUILDDIR/build.log";
|
|
$tmpfilename = tempnam(sys_get_temp_dir(), "chm");
|
|
fetch($chminfo, $tmpfilename);
|
|
|
|
$chms = file($tmpfilename, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
|
|
if (!$chms) {
|
|
err("No chm info\n");
|
|
return 1;
|
|
}
|
|
|
|
foreach($chms as $line) {
|
|
list($filename, $hash, $date) = explode("\t", $line);
|
|
$tmpfilename = "$TMPDIR/$filename.new";
|
|
$realfilename = "$CHMDIR/$filename";
|
|
debug("\n\nWorking on $filename ($tmpfilename => $realfilename)\n");
|
|
|
|
$dlsize = fetch("$BUILDDIR/$filename", $tmpfilename);
|
|
if (!$dlsize) {
|
|
$err = error_get_last();
|
|
err($err["message"], $filename);
|
|
continue;
|
|
}
|
|
debug("Fetched $dlsize");
|
|
|
|
$realhash = md5_file($tmpfilename);
|
|
if ($realhash != $hash) {
|
|
err("\nMD5 Failed for $filename ($realhash != $hash)\n");
|
|
continue;
|
|
}
|
|
debug("\nMD5 OK");
|
|
|
|
debug("Renaming $tmpfilename to $realfilename");
|
|
rename($tmpfilename, $realfilename);
|
|
debug("All done with $filename");
|
|
}
|
|
|
|
$errors = err();
|
|
if ($errors) {
|
|
mail("phpdoc@lists.php.net", "Errors copying CHM files", var_export($errors, true), "From: phpdoc@lists.php.net\r\n", "-fnoreply@php.net");
|
|
return 2;
|
|
}
|
|
|
|
|
|
function err($error = null) {
|
|
static $errors = array();
|
|
if ($error) {
|
|
$errors[] = $error;
|
|
}
|
|
return $errors;
|
|
}
|
|
function debug($msg) {
|
|
if (DEBUG) {
|
|
echo $msg, "\n";
|
|
}
|
|
}
|
|
function stream_notification_callback($notification_code, $severity, $message, $message_code, $bytes_transferred, $bytes_max) {
|
|
static $filesize = null;
|
|
|
|
switch($notification_code) {
|
|
case STREAM_NOTIFY_RESOLVE:
|
|
case STREAM_NOTIFY_AUTH_REQUIRED:
|
|
case STREAM_NOTIFY_COMPLETED:
|
|
case STREAM_NOTIFY_FAILURE:
|
|
case STREAM_NOTIFY_AUTH_RESULT:
|
|
/* Ignore */
|
|
break;
|
|
|
|
case STREAM_NOTIFY_REDIRECTED:
|
|
debug("Being redirected to: ". $message);
|
|
break;
|
|
|
|
case STREAM_NOTIFY_CONNECT:
|
|
debug("Connected...");
|
|
break;
|
|
|
|
case STREAM_NOTIFY_FILE_SIZE_IS:
|
|
$filesize = $bytes_max;
|
|
debug("Filesize: ". $filesize);
|
|
break;
|
|
|
|
case STREAM_NOTIFY_MIME_TYPE_IS:
|
|
debug("Mime-type: ". $message);
|
|
break;
|
|
|
|
case STREAM_NOTIFY_PROGRESS:
|
|
if ($bytes_transferred > 0) {
|
|
if (DEBUG) {
|
|
if (!isset($filesize)) {
|
|
printf("\rUnknown filesize.. %2d kb done..", $bytes_transferred/1024);
|
|
} else {
|
|
$length = (int)(($bytes_transferred/$filesize)*100);
|
|
printf("\r[%-100s] %d%% (%2d/%2d kb)", str_repeat("=", $length). ">", $length, ($bytes_transferred/1024), $filesize/1024);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
function fetch($filename, $outputname) {
|
|
debug("Fetching $filename");
|
|
$ctx = stream_context_create(null, array("notification" => "stream_notification_callback"));
|
|
|
|
$fp = fopen($filename, "r", false, $ctx);
|
|
if (!is_resource($fp)) {
|
|
err("Fetch failed");
|
|
return 0;
|
|
}
|
|
return file_put_contents($outputname, $fp);
|
|
}
|
|
|
|
|
|
|