Completed
Push — master ( d0dd0d...df62c5 )
by ARCANEDEV
12s
created

DownloadMaxmindDatabaseTask::run()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 15
ccs 0
cts 10
cp 0
rs 9.4285
c 1
b 0
f 0
cc 1
eloc 8
nc 1
nop 2
crap 2
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 Functions
16
     | ------------------------------------------------------------------------------------------------
17
     */
18
    /**
19
     * Run the task.
20
     *
21
     * @param  string  $url   The database URL.
22
     * @param  string  $path  Destination path to save the file
23
     *
24
     * @return bool
25
     *
26
     * @throws Exception
27
     */
28
    public static function run($url, $path)
29
    {
30
        $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...
31
32
        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...
33
34
        $tmpFile = tempnam(sys_get_temp_dir(), 'maxmind');
35
        file_put_contents($tmpFile, fopen($url, 'r'));
36
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