/** * Handle a single request * * @param string method request method * @param string query query string * @param [:string] headers request headers * @param string data post data * @param peer.Socket socket * @return int */ public function handleRequest($method, $query, array $headers, $data, Socket $socket) { $url = parse_url($query); $f = new File($this->docroot, strtr(preg_replace('#\\.\\./?#', '/', urldecode($url['path'])), '/', DIRECTORY_SEPARATOR)); if (!is_file($f->getURI())) { return call_user_func($this->notFound, $this, $socket, $url['path']); } // Implement If-Modified-Since/304 Not modified $lastModified = $f->lastModified(); if ($mod = $this->header($headers, 'If-Modified-Since')) { $d = strtotime($mod); if ($lastModified <= $d) { $this->sendHeader($socket, 304, 'Not modified', []); return 304; } } clearstatcache(); try { $f->open(File::READ); } catch (IOException $e) { $this->sendErrorMessage($socket, 500, 'Internal server error', $e->getMessage()); $f->close(); return 500; } // Send OK header and data in 8192 byte chunks $this->sendHeader($socket, 200, 'OK', ['Last-Modified: ' . gmdate('D, d M Y H:i:s T', $lastModified), 'Content-Type: ' . MimeType::getByFileName($f->getFilename()), 'Content-Length: ' . $f->size()]); while (!$f->eof()) { $socket->write($f->read(8192)); } $f->close(); return 200; }
/** * Returns a file with a given source opened in the given mode * * @param string $source * @param string $mode One of the file open modes * @return io.File */ private function fileWith($source, $mode) { $file = new File($this->tempName()); $file->open($mode); $file->write($source); return $file; }
public function open_files_are_not_closed() { $file = new File($this->tempName()); $file->open(File::REWRITE); $file->seek(0, SEEK_SET); (new FileOutput($file))->write('test'); $this->assertTrue($file->isOpen()); }
/** * Create the property file * * @throws io.IOException if the property file could not be created */ public function create() { if (null !== $this->_file) { $fd = new File($this->_file); $fd->open(File::WRITE); $fd->close(); } $this->_data = []; }
/** * Reads the whole message, applies the header information, * sets the body as a plain text (thus does not parse any * MIME-Information and returns the created Message object. * * @param string filename * @return peer.mail.Message * @throws io.IOException if file cannot be read */ protected function _readMessageRaw($filename) { $header = ''; $body = ''; $f = new File($filename); $f->open(); $d = $f->read($f->size()); $f->close(); if (false === ($hdrEnd = strpos($d, "\n\r\n\r"))) { $hdrEnd = 0; } $h = substr($c, 0, $hdrEnd); $b = substr($c, $hdrEnd); $msg = new \peer\mail\Message(); $msg->setHdrString($h); $msg->setBody($b); return $msg; }