1*a1a3b679SAndreas Boehler<?php 2*a1a3b679SAndreas Boehler 3*a1a3b679SAndreas Boehlernamespace Sabre\DAV\Mock; 4*a1a3b679SAndreas Boehler 5*a1a3b679SAndreas Boehleruse Sabre\DAV; 6*a1a3b679SAndreas Boehler 7*a1a3b679SAndreas Boehler/** 8*a1a3b679SAndreas Boehler * Mock Streaming File File 9*a1a3b679SAndreas Boehler * 10*a1a3b679SAndreas Boehler * Works similar to the mock file, but this one works with streams and has no 11*a1a3b679SAndreas Boehler * content-length or etags. 12*a1a3b679SAndreas Boehler * 13*a1a3b679SAndreas Boehler * @copyright Copyright (C) 2007-2015 fruux GmbH (https://fruux.com/). 14*a1a3b679SAndreas Boehler * @author Evert Pot (http://evertpot.com/) 15*a1a3b679SAndreas Boehler * @license http://sabre.io/license/ Modified BSD License 16*a1a3b679SAndreas Boehler */ 17*a1a3b679SAndreas Boehlerclass StreamingFile extends File { 18*a1a3b679SAndreas Boehler 19*a1a3b679SAndreas Boehler /** 20*a1a3b679SAndreas Boehler * Updates the data 21*a1a3b679SAndreas Boehler * 22*a1a3b679SAndreas Boehler * The data argument is a readable stream resource. 23*a1a3b679SAndreas Boehler * 24*a1a3b679SAndreas Boehler * After a succesful put operation, you may choose to return an ETag. The 25*a1a3b679SAndreas Boehler * etag must always be surrounded by double-quotes. These quotes must 26*a1a3b679SAndreas Boehler * appear in the actual string you're returning. 27*a1a3b679SAndreas Boehler * 28*a1a3b679SAndreas Boehler * Clients may use the ETag from a PUT request to later on make sure that 29*a1a3b679SAndreas Boehler * when they update the file, the contents haven't changed in the mean 30*a1a3b679SAndreas Boehler * time. 31*a1a3b679SAndreas Boehler * 32*a1a3b679SAndreas Boehler * If you don't plan to store the file byte-by-byte, and you return a 33*a1a3b679SAndreas Boehler * different object on a subsequent GET you are strongly recommended to not 34*a1a3b679SAndreas Boehler * return an ETag, and just return null. 35*a1a3b679SAndreas Boehler * 36*a1a3b679SAndreas Boehler * @param resource $data 37*a1a3b679SAndreas Boehler * @return string|null 38*a1a3b679SAndreas Boehler */ 39*a1a3b679SAndreas Boehler function put($data) { 40*a1a3b679SAndreas Boehler 41*a1a3b679SAndreas Boehler if (is_string($data)) { 42*a1a3b679SAndreas Boehler $stream = fopen('php://memory','r+'); 43*a1a3b679SAndreas Boehler fwrite($stream, $data); 44*a1a3b679SAndreas Boehler rewind($stream); 45*a1a3b679SAndreas Boehler $data = $stream; 46*a1a3b679SAndreas Boehler } 47*a1a3b679SAndreas Boehler $this->contents = $data; 48*a1a3b679SAndreas Boehler 49*a1a3b679SAndreas Boehler } 50*a1a3b679SAndreas Boehler 51*a1a3b679SAndreas Boehler /** 52*a1a3b679SAndreas Boehler * Returns the data 53*a1a3b679SAndreas Boehler * 54*a1a3b679SAndreas Boehler * This method may either return a string or a readable stream resource 55*a1a3b679SAndreas Boehler * 56*a1a3b679SAndreas Boehler * @return mixed 57*a1a3b679SAndreas Boehler */ 58*a1a3b679SAndreas Boehler function get() { 59*a1a3b679SAndreas Boehler 60*a1a3b679SAndreas Boehler return $this->contents; 61*a1a3b679SAndreas Boehler 62*a1a3b679SAndreas Boehler } 63*a1a3b679SAndreas Boehler 64*a1a3b679SAndreas Boehler /** 65*a1a3b679SAndreas Boehler * Returns the ETag for a file 66*a1a3b679SAndreas Boehler * 67*a1a3b679SAndreas Boehler * An ETag is a unique identifier representing the current version of the file. If the file changes, the ETag MUST change. 68*a1a3b679SAndreas Boehler * 69*a1a3b679SAndreas Boehler * Return null if the ETag can not effectively be determined 70*a1a3b679SAndreas Boehler * 71*a1a3b679SAndreas Boehler * @return void 72*a1a3b679SAndreas Boehler */ 73*a1a3b679SAndreas Boehler function getETag() { 74*a1a3b679SAndreas Boehler 75*a1a3b679SAndreas Boehler return null; 76*a1a3b679SAndreas Boehler 77*a1a3b679SAndreas Boehler } 78*a1a3b679SAndreas Boehler 79*a1a3b679SAndreas Boehler /** 80*a1a3b679SAndreas Boehler * Returns the size of the node, in bytes 81*a1a3b679SAndreas Boehler * 82*a1a3b679SAndreas Boehler * @return int 83*a1a3b679SAndreas Boehler */ 84*a1a3b679SAndreas Boehler function getSize() { 85*a1a3b679SAndreas Boehler 86*a1a3b679SAndreas Boehler return null; 87*a1a3b679SAndreas Boehler 88*a1a3b679SAndreas Boehler } 89*a1a3b679SAndreas Boehler 90*a1a3b679SAndreas Boehler} 91