elFinder::isSeekableStream PHP Метод

isSeekableStream() публичный статический Метод

Return Is seekable stream resource
public static isSeekableStream ( resource $resource ) : boolean
$resource resource
Результат boolean
    public static function isSeekableStream($resource)
    {
        $metadata = stream_get_meta_data($resource);
        return $metadata['seekable'];
    }

Usage Example

Пример #1
0
 /**
  * Output json
  *
  * @param  array  data to output
  * @return void
  * @author Dmitry (dio) Levashov
  **/
 protected function output(array $data)
 {
     // clear output buffer
     while (@ob_get_level()) {
         @ob_end_clean();
     }
     $header = isset($data['header']) ? $data['header'] : $this->header;
     unset($data['header']);
     if ($header) {
         if (is_array($header)) {
             foreach ($header as $h) {
                 header($h);
             }
         } else {
             header($header);
         }
     }
     if (isset($data['pointer'])) {
         $toEnd = true;
         $fp = $data['pointer'];
         if (elFinder::isSeekableStream($fp)) {
             header('Accept-Ranges: bytes');
             $psize = null;
             if (!empty($_SERVER['HTTP_RANGE'])) {
                 $size = $data['info']['size'];
                 $start = 0;
                 $end = $size - 1;
                 if (preg_match('/bytes=(\\d*)-(\\d*)(,?)/i', $_SERVER['HTTP_RANGE'], $matches)) {
                     if (empty($matches[3])) {
                         if (empty($matches[1]) && $matches[1] !== '0') {
                             $start = $size - $matches[2];
                         } else {
                             $start = intval($matches[1]);
                             if (!empty($matches[2])) {
                                 $end = intval($matches[2]);
                                 if ($end >= $size) {
                                     $end = $size - 1;
                                 }
                                 $toEnd = $end == $size - 1;
                             }
                         }
                         $psize = $end - $start + 1;
                         header('HTTP/1.1 206 Partial Content');
                         header('Content-Length: ' . $psize);
                         header('Content-Range: bytes ' . $start . '-' . $end . '/' . $size);
                         fseek($fp, $start);
                     }
                 }
             }
             if (is_null($psize)) {
                 rewind($fp);
             }
         } else {
             header('Accept-Ranges: none');
         }
         // unlock session data for multiple access
         session_id() && session_write_close();
         // client disconnect should abort
         ignore_user_abort(false);
         if ($toEnd) {
             fpassthru($fp);
         } else {
             $out = fopen('php://output', 'wb');
             stream_copy_to_stream($fp, $out, $psize);
             fclose($out);
         }
         if (!empty($data['volume'])) {
             $data['volume']->close($data['pointer'], $data['info']['hash']);
         }
         exit;
     } else {
         if (!empty($data['raw']) && !empty($data['error'])) {
             exit($data['error']);
         } else {
             exit(json_encode($data));
         }
     }
 }
All Usage Examples Of elFinder::isSeekableStream