コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
ファイル: FileInputTest.class.php プロジェクト: xp-forge/json
 /**
  * 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;
 }
コード例 #3
0
 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());
 }
コード例 #4
0
ファイル: Properties.class.php プロジェクト: johannes85/core
 /**
  * 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 = [];
 }
コード例 #5
0
 /**
  * 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;
 }