MediaWiki  1.34.0
SevenZipStream.php
Go to the documentation of this file.
1 <?php
28 
37  protected $stream;
38 
39  private function stripPath( $path ) {
40  $prefix = 'mediawiki.compress.7z://';
41 
42  return substr( $path, strlen( $prefix ) );
43  }
44 
45  function stream_open( $path, $mode, $options, &$opened_path ) {
46  if ( $mode[0] == 'r' ) {
47  $options = 'e -bd -so';
48  } elseif ( $mode[0] == 'w' ) {
49  $options = 'a -bd -si';
50  } else {
51  return false;
52  }
53  $arg = Shell::escape( $this->stripPath( $path ) );
54  $command = "7za $options $arg";
55  if ( !wfIsWindows() ) {
56  // Suppress the stupid messages on stderr
57  $command .= ' 2>/dev/null';
58  }
59  $this->stream = popen( $command, $mode[0] ); // popen() doesn't like two-letter modes
60  return ( $this->stream !== false );
61  }
62 
63  function url_stat( $path, $flags ) {
64  return stat( $this->stripPath( $path ) );
65  }
66 
67  // This is all so lame; there should be a default class we can extend
68 
69  function stream_close() {
70  return fclose( $this->stream );
71  }
72 
73  function stream_flush() {
74  return fflush( $this->stream );
75  }
76 
77  function stream_read( $count ) {
78  return fread( $this->stream, $count );
79  }
80 
81  function stream_write( $data ) {
82  return fwrite( $this->stream, $data );
83  }
84 
85  function stream_tell() {
86  return ftell( $this->stream );
87  }
88 
89  function stream_eof() {
90  return feof( $this->stream );
91  }
92 
93  function stream_seek( $offset, $whence ) {
94  return fseek( $this->stream, $offset, $whence );
95  }
96 }
97 
98 stream_wrapper_register( 'mediawiki.compress.7z', SevenZipStream::class );
SevenZipStream\$stream
$stream
Definition: SevenZipStream.php:37
MediaWiki\Shell\Shell
Executes shell commands.
Definition: Shell.php:44
SevenZipStream\stream_write
stream_write( $data)
Definition: SevenZipStream.php:81
SevenZipStream\stream_read
stream_read( $count)
Definition: SevenZipStream.php:77
SevenZipStream\stream_seek
stream_seek( $offset, $whence)
Definition: SevenZipStream.php:93
SevenZipStream\stripPath
stripPath( $path)
Definition: SevenZipStream.php:39
SevenZipStream\stream_open
stream_open( $path, $mode, $options, &$opened_path)
Definition: SevenZipStream.php:45
SevenZipStream\url_stat
url_stat( $path, $flags)
Definition: SevenZipStream.php:63
SevenZipStream\stream_close
stream_close()
Definition: SevenZipStream.php:69
$command
$command
Definition: cdb.php:65
wfIsWindows
wfIsWindows()
Check if the operating system is Windows.
Definition: GlobalFunctions.php:1907
$path
$path
Definition: NoLocalSettings.php:25
SevenZipStream
Stream wrapper around 7za filter program.
Definition: SevenZipStream.php:36
SevenZipStream\stream_tell
stream_tell()
Definition: SevenZipStream.php:85
SevenZipStream\stream_flush
stream_flush()
Definition: SevenZipStream.php:73
SevenZipStream\stream_eof
stream_eof()
Definition: SevenZipStream.php:89