mirror of
https://github.com/php/web-php.git
synced 2026-03-23 23:02:13 +01:00
The $Id$ keywords were used in Subversion where they can be substituted with filename, last revision number change, last changed date, and last user who changed it. In Git this functionality is different and can be done with Git attribute ident. These need to be defined manually for each file in the .gitattributes file and are afterwards replaced with 40-character hexadecimal blob object name which is based only on the particular file contents. This patch simplifies handling of $Id$ keywords by removing them since they are not used anymore.
224 lines
6.2 KiB
C++
224 lines
6.2 KiB
C++
<?php // -*- C++ -*-
|
|
// Compress all pages, if ext/zlib is available on the mirror
|
|
ini_set("zlib.output_compression", 1);
|
|
|
|
// See http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9
|
|
// for cache control header descriptions (used in many places on the site).
|
|
|
|
// Provide default content-type, charset and language information
|
|
// Manual pages will override this, and maybe others too
|
|
header("Content-language: en");
|
|
header("Content-type: text/html; charset=utf-8");
|
|
|
|
/* Fix Silly Same Origin Policies */
|
|
if (isset($_SERVER["HTTP_ORIGIN"])) {
|
|
$host = parse_url($_SERVER["HTTP_ORIGIN"]);
|
|
if (strncmp(strrev($host["host"]), strrev("php.net"), strlen("php.net")) != 0) {
|
|
if ($host["host"] != $_SERVER["SERVER_NAME"]) {
|
|
exit(10);
|
|
}
|
|
}
|
|
if (isset($host["port"])) {
|
|
$hostname = $host["host"] . ":" . $host["port"];
|
|
} else {
|
|
$hostname = $host["host"];
|
|
}
|
|
|
|
header("Access-Control-Allow-Origin: http://$hostname");
|
|
if (isset($_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"])) {
|
|
$headers = $_SERVER["HTTP_ACCESS_CONTROL_REQUEST_HEADERS"];
|
|
$headers = str_replace(array("\r", "\n", "\0"), "", $headers);
|
|
header("Access-Control-Allow-Headers: $headers");
|
|
}
|
|
}
|
|
/* Clickjacking workaround. Nothing should be in a frame so it could technically be 'deny'
|
|
* but it doesn't make any difference anyway */
|
|
header("X-Frame-Options: SAMEORIGIN");
|
|
|
|
// Be 100% sure the timezone is set
|
|
if (ini_get("date.timezone") === "" && function_exists("date_default_timezone_set")) {
|
|
date_default_timezone_set("UTC");
|
|
}
|
|
|
|
|
|
/* Compatibility with the PHP webserver.. */
|
|
if (!isset($_SERVER["SERVER_ADDR"])) {
|
|
$_SERVER["SERVER_ADDR"] = "127.0.0.1";
|
|
}
|
|
|
|
// As of PHP 5.3.0 multibyte sequence errors are no longer
|
|
// silent. Prior to that version this bitfield does not exist
|
|
// so define it to prevent notices on older versions
|
|
if (!defined("ENT_IGNORE")) {
|
|
define("ENT_IGNORE", 0);
|
|
}
|
|
|
|
// Prevent cross site scripting problems
|
|
unset($RSIDEBAR_DATA);
|
|
unset($SIDEBAR_DATA);
|
|
unset($SEARCH_BASE);
|
|
unset($LANG);
|
|
unset($COUNTRY);
|
|
unset($ONLOAD);
|
|
unset($MYPHPNET);
|
|
unset($LAST_UPDATED);
|
|
|
|
// Load the My PHP.net settings before any includes
|
|
myphpnet_load();
|
|
|
|
// TODO: Remove MQ dependencies from phpweb
|
|
$MQ = get_magic_quotes_gpc();
|
|
if (get_magic_quotes_runtime()) {
|
|
@set_magic_quotes_runtime(0);
|
|
}
|
|
|
|
// Site details (mirror site information)
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/include/site.inc';
|
|
|
|
// Choose language used for translated parts
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/include/langchooser.inc';
|
|
|
|
// Get country of the user and set it in a cookie
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/include/ip-to-country.inc';
|
|
|
|
// Common layout functions
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/include/layout.inc';
|
|
|
|
// This file is generated on rsync.php.net and propagated
|
|
// from there. It just defines $LAST_UPDATED, which is the
|
|
// mirror's last updated time.
|
|
include $_SERVER['DOCUMENT_ROOT'] . '/include/last_updated.inc';
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// Load in the user preferences
|
|
function myphpnet_load()
|
|
{
|
|
global $MYPHPNET, $MYSITE;
|
|
|
|
// Empty the preferences array
|
|
$MYPHPNET = array(FALSE, FALSE, "NONE", 0, FALSE);
|
|
|
|
if ($MYSITE === 'http://docs.php.net/') {
|
|
$MYPHPNET[4] = TRUE;
|
|
}
|
|
|
|
// If we have a cookie, set the values in the array
|
|
if (!empty($_COOKIE['MYPHPNET'])) {
|
|
$MYPHPNET = explode(",", $_COOKIE['MYPHPNET']);
|
|
}
|
|
}
|
|
|
|
// Get or set preferred language code
|
|
function myphpnet_language($langcode = FALSE)
|
|
{
|
|
global $MYPHPNET, $LANGUAGES;
|
|
|
|
// Set language code
|
|
if ($langcode && isset($LANGUAGES[$langcode])) {
|
|
$MYPHPNET[0] = $langcode;
|
|
}
|
|
// Return code or FALSE
|
|
elseif (isset($MYPHPNET[0]) && $MYPHPNET[0]) {
|
|
return $MYPHPNET[0];
|
|
}
|
|
return false;
|
|
}
|
|
|
|
define("MYPHPNET_URL_NONE", FALSE);
|
|
define("MYPHPNET_URL_FUNC", 'quickref');
|
|
define("MYPHPNET_URL_MANUAL", 'manual');
|
|
|
|
// Set URL search fallback preference
|
|
function myphpnet_urlsearch($type = FALSE)
|
|
{
|
|
global $MYPHPNET;
|
|
|
|
// Set type if specified and if correct
|
|
if ($type && in_array($type, array(MYPHPNET_URL_FUNC, MYPHPNET_URL_MANUAL))) {
|
|
$MYPHPNET[1] = $type;
|
|
}
|
|
|
|
// Return code or NONE
|
|
elseif (isset($MYPHPNET[1]) && !empty($MYPHPNET[1])) {
|
|
return $MYPHPNET[1];
|
|
} else { return MYPHPNET_URL_NONE; }
|
|
}
|
|
|
|
// Set mirror site redirection
|
|
function myphpnet_mirror($murl = FALSE)
|
|
{
|
|
global $MYPHPNET;
|
|
|
|
// Set mirror URL if specified and if correct
|
|
if ($murl && ($murl == "AUTO" || mirror_status($murl) == MIRROR_OK)) {
|
|
$MYPHPNET[2] = $murl;
|
|
}
|
|
|
|
// Return code or NONE
|
|
elseif (isset($MYPHPNET[2])) {
|
|
return $MYPHPNET[2];
|
|
} else { return "NONE"; }
|
|
}
|
|
|
|
function myphpnet_showug($enable = null) {
|
|
global $MYPHPNET;
|
|
|
|
if (isset($_GET["showug"])) {
|
|
$enable = true;
|
|
}
|
|
|
|
if ($enable !== null) {
|
|
$MYPHPNET[3] = $enable;
|
|
}
|
|
|
|
if (isset($MYPHPNET[3])) {
|
|
return $MYPHPNET[3];
|
|
}
|
|
|
|
if ($_SERVER["REQUEST_TIME"] % 10) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
// Save user settings in cookie
|
|
function myphpnet_save()
|
|
{
|
|
global $MYPHPNET;
|
|
|
|
// Fill in values not specified
|
|
for ($i = 0; $i <= 3; $i++) {
|
|
if (!isset($MYPHPNET[$i])) { $MYPHPNET[$i] = FALSE; }
|
|
}
|
|
|
|
// Set all the preferred values for a year
|
|
mirror_setcookie("MYPHPNET", join(",", $MYPHPNET), 60*60*24*365);
|
|
|
|
}
|
|
|
|
// Default: Default search.
|
|
// Lang: Not yet implemented (TODO: Compare google lang codes with ours. We did this for bing already, so maybe it's an easy fix)
|
|
// TODO: Possible $default escaping issues
|
|
function google_cse($default = '', $lang = 'en') {
|
|
?>
|
|
<noscript>
|
|
php.net's search functionality requires JavaScript to operate. Please enable
|
|
JavaScript and reload to continue.
|
|
</noscript>
|
|
<script>
|
|
(function() {
|
|
var cx = '011570197911755000456:fip9wopfz_u';
|
|
var gcse = document.createElement('script');
|
|
gcse.type = 'text/javascript';
|
|
gcse.async = true;
|
|
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
|
|
var s = document.getElementsByTagName('script')[0];
|
|
s.parentNode.insertBefore(gcse, s);
|
|
})();
|
|
</script>
|
|
<div class="gcse-search" data-linktarget></div>
|
|
<?php
|
|
}
|