Completed
Push — master ( e89277...1caf4d )
by Patrick
03:08
created

proxy.php ➔ FCgetHostName()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 7

Duplication

Lines 9
Ratio 100 %

Importance

Changes 2
Bugs 0 Features 2
Metric Value
cc 3
eloc 7
nc 3
nop 0
dl 9
loc 9
rs 9.6666
c 2
b 0
f 2
1
<?php
2
3
/**
4
 * Proxy script to load a file from other domain
5
 *
6
 * PHP versions 4 and 5
7
 *
8
 * Copyright (c) 2010-2013 Shinya Muramatsu
9
 *
10
 * Permission is hereby granted, free of charge, to any person obtaining a
11
 * copy of this software and associated documentation files (the "Software"),
12
 * to deal in the Software without restriction, including without limitation
13
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
14
 * and/or sell copies of the Software, and to permit persons to whom the
15
 * Software is furnished to do so, subject to the following conditions:
16
 *
17
 * The above copyright notice and this permission notice shall be included in
18
 * all copies or substantial portions of the Software.
19
 *
20
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
 * DEALINGS IN THE SOFTWARE.
27
 *
28
 * @author     Shinya Muramatsu <[email protected]>
29
 * @copyright  2010-2013 Shinya Muramatsu
30
 * @license    http://www.opensource.org/licenses/mit-license.php  MIT License
31
 * @link       http://flashcanvas.net/
32
 * @link       http://code.google.com/p/flashcanvas/
33
 */
34
35
function FCgetHostName() {
36
    if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
37
        return $_SERVER['HTTP_X_FORWARDED_HOST'];
38
    } else if (isset($_SERVER['HTTP_HOST'])) {
39
        return $_SERVER['HTTP_HOST'];
40
    } else {
41
        return $_SERVER['SERVER_NAME'];
42
    }
43
}
44
45
// Whether we check referrer or not
46
define('CHECK_REFERRER', true);
47
48
// If necessary, specify the host where the SWF file is located
49
define('SWF_HOST_NAME', '');
50
51
// Check that the request comes from the same host
52
if (CHECK_REFERRER) {
53
    if (empty($_SERVER['HTTP_REFERER'])) {
54
        exit;
55
    }
56
    if (SWF_HOST_NAME) {
57
        $host = SWF_HOST_NAME;
58
    } else {
59
        $host = FCgetHostName();
60
    }
61
    $pattern = '#^https?://' . str_replace('.', '\.', $host) . '(:\d*)?/#';
62
    if (!preg_match($pattern, $_SERVER['HTTP_REFERER'])) {
63
        exit;
64
    }
65
}
66
67
// Check that the request has a valid URL parameter
68
if (empty($_GET['url'])) {
69
    exit;
70
}
71
if (!preg_match('#^https?://#', $_GET['url'])) {
72
    exit;
73
}
74
75
// Percent-encode special characters in the URL
76
$search  = array(  '%',   '#',   ' ');
77
$replace = array('%25', '%23', '%20');
78
$url     = str_replace($search, $replace, $_GET['url']);
79
80
// Disable compression
81
header('Content-Encoding: none');
82
83
// Load and output the file
84
if (extension_loaded('curl')) {
85
    // Use cURL extension
86
    $ch = curl_init($url);
87
//  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
88
//  curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
89
    curl_exec($ch);
90
    curl_close($ch);
91
} else {
92
    // Use the http:// wrapper
93
    readfile($url);
94
}
95