Beispiel #1
0
function fetch_latest_version()
{
    $last_update_timestamp = WT_Site::preference('LATEST_WT_VERSION_TIMESTAMP');
    if ($last_update_timestamp < WT_TIMESTAMP - 24 * 60 * 60) {
        $row = WT_DB::prepare("SHOW VARIABLES LIKE 'version'")->fetchOneRow();
        $params = '?w=' . WT_VERSION . '&p=' . PHP_VERSION . '&m=' . $row->value . '&o=' . (DIRECTORY_SEPARATOR == '/' ? 'u' : 'w');
        $latest_version_txt = WT_File::fetchUrl('http://svn.webtrees.net/build/latest-version.txt' . $params);
        if ($latest_version_txt) {
            WT_Site::preference('LATEST_WT_VERSION', $latest_version_txt);
            WT_Site::preference('LATEST_WT_VERSION_TIMESTAMP', WT_TIMESTAMP);
            return $latest_version_txt;
        } else {
            // Cannot connect to server - use cached version (if we have one)
            return WT_Site::preference('LATEST_WT_VERSION');
        }
    } else {
        return WT_Site::preference('LATEST_WT_VERSION');
    }
}
Beispiel #2
0
 public static function fetchUrl($url, $stream = null)
 {
     $host = parse_url($url, PHP_URL_HOST);
     $port = parse_url($url, PHP_URL_PORT);
     $path = parse_url($url, PHP_URL_PATH);
     $query = parse_url($url, PHP_URL_QUERY);
     if (!$port) {
         $port = parse_url($url, PHP_URL_SCHEME) == 'https' ? 443 : 80;
     }
     $scheme = $port == 443 ? 'ssl://' : '';
     $fp = @fsockopen($scheme . $host, $port, $errno, $errstr, 5);
     if (!$fp) {
         return null;
     }
     fputs($fp, "GET {$path}?{$query} HTTP/1.0\r\nHost: {$host}\r\nConnection: Close\r\n\r\n");
     // The first part of the response include the HTTP headers
     $response = fread($fp, 65536);
     // The file has moved?  Follow it.
     if (preg_match('/^HTTP\\/1.[01] 30[23].+\\nLocation: ([^\\r\\n]+)/s', $response, $match)) {
         fclose($fp);
         return WT_File::fetchUrl($match[1], $stream);
     } else {
         // The response includes headers, a blank line, then the content
         $response = substr($response, strpos($response, "\r\n\r\n") + 4);
     }
     if ($stream) {
         fwrite($stream, $response);
         while ($tmp = fread($fp, 8192)) {
             fwrite($stream, $tmp);
         }
         fclose($fp);
         return null;
     } else {
         while ($tmp = fread($fp, 8192)) {
             $response .= $tmp;
         }
         fclose($fp);
         return $response;
     }
 }
    } else {
        echo '<br>', WT_I18N::translate('Unable to create %s.  Check the permissions.', '<span dir="ltr">' . $filename . '</span>'), $icon_failure;
    }
    flush();
}
echo '</li>';
////////////////////////////////////////////////////////////////////////////////
// Download a .ZIP file containing the new code
////////////////////////////////////////////////////////////////////////////////
echo '<li>', WT_I18N::translate('Download %s…', $download_url_html);
$zip_file = WT_DATA_DIR . basename($download_url);
$zip_dir = WT_DATA_DIR . basename($download_url, '.zip');
$zip_stream = fopen($zip_file, 'w');
reset_timeout();
$start_time = microtime(true);
WT_File::fetchUrl($download_url, $zip_stream);
$end_time = microtime(true);
$zip_size = filesize($zip_file);
fclose($zip_stream);
echo '<br>', WT_I18N::translate('%1$sKB were downloaded in %2$s seconds.', WT_I18N::number($zip_size / 1024), WT_I18N::number($end_time - $start_time, 2));
if ($zip_size) {
    echo $icon_success;
} else {
    echo $icon_failure;
    // Guess why we might have failed...
    if (preg_match('/^https:/', $download_url) && !in_array('ssl', stream_get_transports())) {
        echo '<br>', WT_I18N::translate('This server does not support secure downloads using HTTPS.');
    }
}
echo '</li>';
flush();