DownloadMaxmindDatabaseTask::checkUrl()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 8
ccs 0
cts 7
cp 0
rs 9.4285
c 1
b 0
f 0
cc 2
eloc 4
nc 2
nop 1
crap 6
1
<?php namespace Arcanedev\GeoIP\Tasks;
2
3
use Exception;
4
use Illuminate\Support\Str;
5
6
/**
7
 * Class     DownloadMaxmindDatabaseTask
8
 *
9
 * @package  Arcanedev\GeoIP\Tasks
10
 * @author   ARCANEDEV <[email protected]>
11
 */
12
class DownloadMaxmindDatabaseTask
13
{
14
    /* -----------------------------------------------------------------
15
     |  Main Methods
16
     | -----------------------------------------------------------------
17
     */
18
19
    /**
20
     * Run the task.
21
     *
22
     * @param  string  $url   The database URL.
23
     * @param  string  $path  Destination path to save the file
24
     *
25
     * @return bool
26
     *
27
     * @throws Exception
28
     */
29
    public static function run($url, $path)
30
    {
31
        $path = static::checkDestinationPath($path);
0 ignored issues
show
Bug introduced by
Since checkDestinationPath() is declared private, calling it with static will lead to errors in possible sub-classes. You can either use self, or increase the visibility of checkDestinationPath() to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
}

public static function getSomeVariable()
{
    return static::getTemperature();
}

}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass {
      private static function getTemperature() {
        return "-182 °C";
    }
}

print YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
    }

    public static function getSomeVariable()
    {
        return self::getTemperature();
    }
}
Loading history...
32
33
        static::checkUrl($url);
0 ignored issues
show
Bug introduced by
Since checkUrl() is declared private, calling it with static will lead to errors in possible sub-classes. You can either use self, or increase the visibility of checkUrl() to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
}

public static function getSomeVariable()
{
    return static::getTemperature();
}

}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass {
      private static function getTemperature() {
        return "-182 °C";
    }
}

print YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
    }

    public static function getSomeVariable()
    {
        return self::getTemperature();
    }
}
Loading history...
34
35
        $tmpFile = tempnam(sys_get_temp_dir(), 'maxmind');
36
        file_put_contents($tmpFile, fopen($url, 'r'));
37
        file_put_contents($path, gzopen($tmpFile, 'r'));
38
39
        unlink($tmpFile);
40
41
        return true;
42
    }
43
44
    /**
45
     * Check the destination path.
46
     *
47
     * @param  string  $path
48
     *
49
     * @return string
50
     *
51
     * @throws \Exception
52
     */
53
    private static function checkDestinationPath($path)
54
    {
55
        if (($path = realpath($path)) === false)
56
            throw new Exception('Database path not set in options file.');
57
58
        return $path;
59
    }
60
61
    /**
62
     * Check the url status.
63
     *
64
     * @param  string  $url
65
     *
66
     * @throws \Exception
67
     */
68
    private static function checkUrl($url)
69
    {
70
        $headers = get_headers($url);
71
72
        if ( ! Str::contains($headers[0], '200 OK')) {
73
            throw new Exception('Unable to download Maxmind\'s database. ('.substr($headers[0], 13).')');
74
        }
75
    }
76
}
77