summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Brown <ptbrown@whoopdedo.org>2015-05-06 23:31:39 -0400
committerPatrick Brown <ptbrown@whoopdedo.org>2015-05-06 23:31:39 -0400
commitcfb71e37ca8859c4ad9a1db73de0a293ffc7a902 (patch)
tree96ee25434bc1950edb0ee0286647fac6bea6403d
parent369075828e13e37a65a2f8062a74e89f98dd3fac (diff)
downloadrpg-cfb71e37ca8859c4ad9a1db73de0a293ffc7a902.tar.gz
rpg-cfb71e37ca8859c4ad9a1db73de0a293ffc7a902.tar.bz2
Deleting lines works with BZ2 files.
-rw-r--r--_test/tests/inc/io_deletefromfile.test.php18
-rw-r--r--_test/tests/inc/io_readfile.test.php7
-rw-r--r--_test/tests/inc/io_readfile/large.txt.bz2bin0 -> 47 bytes
-rw-r--r--_test/tests/inc/io_readfile/long.txt.bz2bin0 -> 53 bytes
-rw-r--r--inc/io.php31
5 files changed, 47 insertions, 9 deletions
diff --git a/_test/tests/inc/io_deletefromfile.test.php b/_test/tests/inc/io_deletefromfile.test.php
index 361c82214..63951f548 100644
--- a/_test/tests/inc/io_deletefromfile.test.php
+++ b/_test/tests/inc/io_deletefromfile.test.php
@@ -33,10 +33,18 @@ class io_deletefromfile_test extends DokuWikiTest {
$this->_write(TMP_DIR.'/test.txt');
}
-// /**
-// * @depends test_ext_zlib
-// */
-// function test_gzwrite(){
-// }
+ /**
+ * @depends test_ext_zlib
+ */
+ function test_gzwrite(){
+ $this->_write(TMP_DIR.'/test.txt.gz');
+ }
+
+ /**
+ * @depends test_ext_bz2
+ */
+ function test_bzwrite(){
+ $this->_write(TMP_DIR.'/test.txt.bz2');
+ }
}
diff --git a/_test/tests/inc/io_readfile.test.php b/_test/tests/inc/io_readfile.test.php
index e3e90cd8d..700c1902b 100644
--- a/_test/tests/inc/io_readfile.test.php
+++ b/_test/tests/inc/io_readfile.test.php
@@ -48,6 +48,11 @@ class io_readfile_test extends DokuWikiTest {
$this->assertEquals("The\015\012Test\015\012", io_readFile(__DIR__.'/io_readfile/test.txt.bz2', false));
$this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/nope.txt.bz2'));
$this->assertEquals(false, io_readFile(__DIR__.'/io_readfile/corrupt.txt.bz2'));
+ // internal bzfile function
+ $this->assertEquals(array("The\015\012","Test\015\012"), bzfile(__DIR__.'/io_readfile/test.txt.bz2', true));
+ $this->assertEquals(array_fill(0, 120, str_repeat('a', 80)."\012"), bzfile(__DIR__.'/io_readfile/large.txt.bz2', true));
+ $line = str_repeat('a', 8888)."\012";
+ $this->assertEquals(array($line,"\012",$line,"!"), bzfile(__DIR__.'/io_readfile/long.txt.bz2', true));
}
-} \ No newline at end of file
+}
diff --git a/_test/tests/inc/io_readfile/large.txt.bz2 b/_test/tests/inc/io_readfile/large.txt.bz2
new file mode 100644
index 000000000..3135435f8
--- /dev/null
+++ b/_test/tests/inc/io_readfile/large.txt.bz2
Binary files differ
diff --git a/_test/tests/inc/io_readfile/long.txt.bz2 b/_test/tests/inc/io_readfile/long.txt.bz2
new file mode 100644
index 000000000..fb40759e6
--- /dev/null
+++ b/_test/tests/inc/io_readfile/long.txt.bz2
Binary files differ
diff --git a/inc/io.php b/inc/io.php
index 8846b7e56..b8a77b730 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -127,22 +127,36 @@ function io_readFile($file,$clean=true){
* @author Andreas Gohr <andi@splitbrain.org>
*
* @param string $file filename
- * @return string|bool content or false on error
+ * @param bool $array return array of lines
+ * @return string|array|bool content or false on error
*/
-function bzfile($file){
+function bzfile($file, $array=false) {
$bz = bzopen($file,"r");
if($bz === false) return false;
+ if($array) $lines = array();
$str = '';
- while (!feof($bz)){
+ while (!feof($bz)) {
//8192 seems to be the maximum buffersize?
$buffer = bzread($bz,8192);
if(($buffer === false) || (bzerrno($bz) !== 0)) {
return false;
}
$str = $str . $buffer;
+ if($array) {
+ $pos = strpos($str, "\n");
+ while($pos !== false) {
+ $lines[] = substr($str, 0, $pos+1);
+ $str = substr($str, $pos+1);
+ $pos = strpos($str, "\n");
+ }
+ }
}
bzclose($bz);
+ if($array) {
+ if($str !== '') $lines[] = $str;
+ return $lines;
+ }
return $str;
}
@@ -280,6 +294,8 @@ function io_deleteFromFile($file,$badline,$regex=false){
// load into array
if(substr($file,-3) == '.gz'){
$lines = gzfile($file);
+ }else if(substr($file,-4) == '.bz2'){
+ $lines = bzfile($file, true);
}else{
$lines = file($file);
}
@@ -306,6 +322,15 @@ function io_deleteFromFile($file,$badline,$regex=false){
}
gzwrite($fh, $content);
gzclose($fh);
+ }else if(substr($file,-4) == '.bz2'){
+ $fh = @bzopen($file,'w');
+ if(!$fh){
+ msg("Removing content from $file failed",-1);
+ io_unlock($file);
+ return false;
+ }
+ bzwrite($fh, $content);
+ bzclose($fh);
}else{
$fh = @fopen($file,'wb');
if(!$fh){