Passed
Push — main ( 221f6d...f8c128 )
by Siad
05:28
created

src/Phing/Io/FileInputStream.php (1 issue)

1
<?php
2
3
/**
4
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
8
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
9
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
10
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
11
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
12
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
13
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
14
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
15
 *
16
 * This software consists of voluntary contributions made by many individuals
17
 * and is licensed under the LGPL. For more information please see
18
 * <http://phing.info>.
19
 */
20
21
namespace Phing\Io;
22
23
use Exception;
24
25
/**
26
 * Input stream subclass for file streams.
27
 */
28
class FileInputStream extends InputStream
29
{
30
    /**
31
     * The associated file.
32
     *
33
     * @var File
34
     */
35
    protected $file;
36
37
    /**
38
     * Construct a new FileInputStream.
39
     *
40
     * @param File|string $file Path to the file
41
     *
42
     * @throws Exception   - if invalid argument specified
43
     * @throws IOException - if unable to open file
44
     */
45 860
    public function __construct($file)
46
    {
47 860
        if ($file instanceof File) {
48 860
            $this->file = $file;
49 4
        } elseif (is_string($file)) {
50 4
            $this->file = new File($file);
51
        } else {
52
            throw new Exception('Invalid argument type for $file.');
53
        }
54
55 860
        if (!$this->file->exists()) {
56
            throw new IOException('Unable to open ' . $this->file->__toString() . ' for reading. File does not exists.');
57
        }
58 860
        if (!$this->file->canRead()) {
59
            throw new IOException('Unable to open ' . $this->file->__toString() . ' for reading. File not readable.');
60
        }
61 860
        $stream = @fopen($this->file->getAbsolutePath(), 'rb');
62 860
        if (false === $stream) {
63
            throw new IOException('Unable to open ' . $this->file->__toString() . ' for reading: ' . print_r(
0 ignored issues
show
Are you sure print_r(error_get_last(), true) of type string|true can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

63
            throw new IOException('Unable to open ' . $this->file->__toString() . ' for reading: ' . /** @scrutinizer ignore-type */ print_r(
Loading history...
64
                error_get_last(),
65
                true
66
            ));
67
        }
68
69 860
        parent::__construct($stream);
70 860
    }
71
72
    /**
73
     * Returns a string representation of the attached file.
74
     *
75
     * @return string
76
     */
77 859
    public function __toString()
78
    {
79 859
        return $this->file->getPath();
80
    }
81
82
    /**
83
     * Mark is supported by FileInputStream.
84
     *
85
     * @return bool TRUE
86
     */
87
    public function markSupported()
88
    {
89
        return true;
90
    }
91
}
92