Last active
January 8, 2018 03:05
-
-
Save plutocrat/e6abc230924c17b1c2f54929de442882 to your computer and use it in GitHub Desktop.
Fixed /usr/share/php/php-gettext/streams.php file for annoying phpmyadmin + PHP7 errors
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Copyright (c) 2003, 2005, 2006, 2009 Danilo Segan <[email protected]>. | |
This amended version uses function __construct to get rid of errors | |
# Install: | |
cd /usr/share/php/php-gettext/ | |
mv streams.php streams.orig.php | |
wget https://gist.githubusercontent.com/plutocrat/e6abc230924c17b1c2f54929de442882/raw/724d81bcdb8347ac4b12fff4f1674d9b096465ec/streams.php | |
*/ | |
// Simple class to wrap file streams, string streams, etc. | |
// seek is essential, and it should be byte stream | |
class StreamReader { | |
// should return a string [FIXME: perhaps return array of bytes?] | |
function read($bytes) { | |
return false; | |
} | |
// should return new position | |
function seekto($position) { | |
return false; | |
} | |
// returns current position | |
function currentpos() { | |
return false; | |
} | |
// returns length of entire stream (limit for seekto()s) | |
function length() { | |
return false; | |
} | |
}; | |
class StringReader { | |
var $_pos; | |
var $_str; | |
function __construct($str='') { | |
$this->_str = $str; | |
$this->_pos = 0; | |
} | |
function read($bytes) { | |
$data = substr($this->_str, $this->_pos, $bytes); | |
$this->_pos += $bytes; | |
if (strlen($this->_str)<$this->_pos) | |
$this->_pos = strlen($this->_str); | |
return $data; | |
} | |
function seekto($pos) { | |
$this->_pos = $pos; | |
if (strlen($this->_str)<$this->_pos) | |
$this->_pos = strlen($this->_str); | |
return $this->_pos; | |
} | |
function currentpos() { | |
return $this->_pos; | |
} | |
function length() { | |
return strlen($this->_str); | |
} | |
}; | |
class FileReader { | |
var $_pos; | |
var $_fd; | |
var $_length; | |
function __construct($filename) { | |
if (file_exists($filename)) { | |
$this->_length=filesize($filename); | |
$this->_pos = 0; | |
$this->_fd = fopen($filename,'rb'); | |
if (!$this->_fd) { | |
$this->error = 3; // Cannot read file, probably permissions | |
return false; | |
} | |
} else { | |
$this->error = 2; // File doesn't exist | |
return false; | |
} | |
} | |
function read($bytes) { | |
if ($bytes) { | |
fseek($this->_fd, $this->_pos); | |
// PHP 5.1.1 does not read more than 8192 bytes in one fread() | |
// the discussions at PHP Bugs suggest it's the intended behaviour | |
$data = ''; | |
while ($bytes > 0) { | |
$chunk = fread($this->_fd, $bytes); | |
$data .= $chunk; | |
$bytes -= strlen($chunk); | |
} | |
$this->_pos = ftell($this->_fd); | |
return $data; | |
} else return ''; | |
} | |
function seekto($pos) { | |
fseek($this->_fd, $pos); | |
$this->_pos = ftell($this->_fd); | |
return $this->_pos; | |
} | |
function currentpos() { | |
return $this->_pos; | |
} | |
function length() { | |
return $this->_length; | |
} | |
function close() { | |
fclose($this->_fd); | |
} | |
}; | |
// Preloads entire file in memory first, then creates a StringReader | |
// over it (it assumes knowledge of StringReader internals) | |
class CachedFileReader extends StringReader { | |
function __construct($filename) { | |
if (file_exists($filename)) { | |
$length=filesize($filename); | |
$fd = fopen($filename,'rb'); | |
if (!$fd) { | |
$this->error = 3; // Cannot read file, probably permissions | |
return false; | |
} | |
$this->_str = fread($fd, $length); | |
fclose($fd); | |
} else { | |
$this->error = 2; // File doesn't exist | |
return false; | |
} | |
} | |
}; | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment