1<?php
2
3namespace Sabre\DAV\FS;
4
5use Sabre\DAV;
6
7/**
8 * File class
9 *
10 * @copyright Copyright (C) fruux GmbH (https://fruux.com/)
11 * @author Evert Pot (http://evertpot.com/)
12 * @license http://sabre.io/license/ Modified BSD License
13 */
14class File extends Node implements DAV\IFile {
15
16    /**
17     * Updates the data
18     *
19     * @param resource $data
20     * @return void
21     */
22    function put($data) {
23
24        file_put_contents($this->path, $data);
25        clearstatcache(true, $this->path);
26
27    }
28
29    /**
30     * Returns the data
31     *
32     * @return resource
33     */
34    function get() {
35
36        return fopen($this->path, 'r');
37
38    }
39
40    /**
41     * Delete the current file
42     *
43     * @return void
44     */
45    function delete() {
46
47        unlink($this->path);
48
49    }
50
51    /**
52     * Returns the size of the node, in bytes
53     *
54     * @return int
55     */
56    function getSize() {
57
58        return filesize($this->path);
59
60    }
61
62    /**
63     * Returns the ETag for a file
64     *
65     * An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change.
66     * The ETag is an arbitrary string, but MUST be surrounded by double-quotes.
67     *
68     * Return null if the ETag can not effectively be determined
69     *
70     * @return mixed
71     */
72    function getETag() {
73
74        return '"' . sha1(
75            fileinode($this->path) .
76            filesize($this->path) .
77            filemtime($this->path)
78        ) . '"';
79
80    }
81
82    /**
83     * Returns the mime-type for a file
84     *
85     * If null is returned, we'll assume application/octet-stream
86     *
87     * @return mixed
88     */
89    function getContentType() {
90
91        return null;
92
93    }
94
95}
96