cellog Wed Apr 9 18:12:41 2008 UTC
Added files:
/pecl/phar/tests phar_oo_getcontents.phpt
phar_oo_getcontentsgz.phpt
Modified files:
/pecl/phar phar_object.c
/pecl/phar/tests phar_oo_compressallbz2.phpt
phar_oo_compressallgz.phpt
phar_oo_getmodified.phpt
phar_oo_uncompressall.phpt
Log:
add PharFileInfo->getContents() to retrieve file contents
[DOC]
http://cvs.php.net/viewvc.cgi/pecl/phar/phar_object.c?r1=1.194&r2=1.195&diff_format=u
Index: pecl/phar/phar_object.c
diff -u pecl/phar/phar_object.c:1.194 pecl/phar/phar_object.c:1.195
--- pecl/phar/phar_object.c:1.194 Mon Mar 24 03:01:29 2008
+++ pecl/phar/phar_object.c Wed Apr 9 18:12:40 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: phar_object.c,v 1.194 2008/03/24 03:01:29 cellog Exp $ */
+/* $Id: phar_object.c,v 1.195 2008/04/09 18:12:40 cellog Exp $ */
#include "phar_internal.h"
#include "func_interceptors.h"
@@ -3466,6 +3466,37 @@
}
/* }}} */
+/* {{{ proto string PharFileInfo::getContents()
+ * return the complete file contents of the entry (like file_get_contents)
+ */
+PHP_METHOD(PharFileInfo, getContents)
+{
+ char *error;
+ php_stream *fp;
+ PHAR_ENTRY_OBJECT();
+
+ if (entry_obj->ent.entry->is_dir) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0
TSRMLS_CC,
+ "Phar error: Cannot retrieve contents, \"%s\" in phar
\"%s\" is a directory", entry_obj->ent.entry->filename,
entry_obj->ent.entry->phar->fname);
+ return;
+ }
+ if (SUCCESS != phar_open_entry_fp(entry_obj->ent.entry, &error
TSRMLS_CC)) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0
TSRMLS_CC,
+ "Phar error: Cannot retrieve contents, \"%s\" in phar
\"%s\": %s", entry_obj->ent.entry->filename, entry_obj->ent.entry->phar->fname,
error);
+ efree(error);
+ return;
+ }
+ if (!(fp = phar_get_efp(entry_obj->ent.entry TSRMLS_CC))) {
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0
TSRMLS_CC,
+ "Phar error: Cannot retrieve contents of \"%s\" in phar
\"%s\"", entry_obj->ent.entry->filename, entry_obj->ent.entry->phar->fname);
+ return;
+ }
+ phar_seek_efp(entry_obj->ent.entry, 0, SEEK_SET, 0 TSRMLS_CC);
+ Z_TYPE_P(return_value) = IS_STRING;
+ Z_STRLEN_P(return_value) = php_stream_copy_to_mem(fp,
&(Z_STRVAL_P(return_value)), entry_obj->ent.entry->uncompressed_filesize, 0);
+}
+/* }}} */
+
/* {{{ proto int PharFileInfo::setCompressedGZ()
* Instructs the Phar class to compress the current file using zlib
*/
@@ -3822,6 +3853,7 @@
PHP_ME(PharFileInfo, __destruct, NULL, 0)
PHP_ME(PharFileInfo, chmod, arginfo_entry_chmod, 0)
PHP_ME(PharFileInfo, delMetadata, NULL, 0)
+ PHP_ME(PharFileInfo, getContents, NULL, 0)
PHP_ME(PharFileInfo, getCompressedSize, NULL, 0)
PHP_ME(PharFileInfo, getCRC32, NULL, 0)
PHP_ME(PharFileInfo, getMetadata, NULL, 0)
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_compressallbz2.phpt?r1=1.4&r2=1.5&diff_format=u
Index: pecl/phar/tests/phar_oo_compressallbz2.phpt
diff -u pecl/phar/tests/phar_oo_compressallbz2.phpt:1.4
pecl/phar/tests/phar_oo_compressallbz2.phpt:1.5
--- pecl/phar/tests/phar_oo_compressallbz2.phpt:1.4 Sun Mar 9 04:46:15 2008
+++ pecl/phar/tests/phar_oo_compressallbz2.phpt Wed Apr 9 18:12:40 2008
@@ -45,6 +45,7 @@
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
?>
--EXPECTF--
string(1) "a"
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_compressallgz.phpt?r1=1.4&r2=1.5&diff_format=u
Index: pecl/phar/tests/phar_oo_compressallgz.phpt
diff -u pecl/phar/tests/phar_oo_compressallgz.phpt:1.4
pecl/phar/tests/phar_oo_compressallgz.phpt:1.5
--- pecl/phar/tests/phar_oo_compressallgz.phpt:1.4 Sun Mar 9 04:46:15 2008
+++ pecl/phar/tests/phar_oo_compressallgz.phpt Wed Apr 9 18:12:40 2008
@@ -45,6 +45,7 @@
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
?>
--EXPECTF--
string(1) "a"
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_getmodified.phpt?r1=1.4&r2=1.5&diff_format=u
Index: pecl/phar/tests/phar_oo_getmodified.phpt
diff -u pecl/phar/tests/phar_oo_getmodified.phpt:1.4
pecl/phar/tests/phar_oo_getmodified.phpt:1.5
--- pecl/phar/tests/phar_oo_getmodified.phpt:1.4 Sun Mar 9 04:46:15 2008
+++ pecl/phar/tests/phar_oo_getmodified.phpt Wed Apr 9 18:12:40 2008
@@ -28,6 +28,7 @@
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
?>
--EXPECTF--
bool(false)
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_uncompressall.phpt?r1=1.4&r2=1.5&diff_format=u
Index: pecl/phar/tests/phar_oo_uncompressall.phpt
diff -u pecl/phar/tests/phar_oo_uncompressall.phpt:1.4
pecl/phar/tests/phar_oo_uncompressall.phpt:1.5
--- pecl/phar/tests/phar_oo_uncompressall.phpt:1.4 Sun Mar 9 04:46:15 2008
+++ pecl/phar/tests/phar_oo_uncompressall.phpt Wed Apr 9 18:12:40 2008
@@ -53,6 +53,7 @@
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') . '.phar');
+unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
?>
--EXPECTF--
string(1) "a"
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_getcontents.phpt?view=markup&rev=1.1
Index: pecl/phar/tests/phar_oo_getcontents.phpt
+++ pecl/phar/tests/phar_oo_getcontents.phpt
--TEST--
Phar object: getContents()
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
<?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
--INI--
phar.readonly=0
--FILE--
<?php
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
$phar = new Phar($fname);
$phar['a'] = 'file contents
this works';
echo $phar['a']->getContents() . "\n";
?>
===DONE===
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
__halt_compiler();
?>
--EXPECT--
file contents
this works
===DONE===
http://cvs.php.net/viewvc.cgi/pecl/phar/tests/phar_oo_getcontentsgz.phpt?view=markup&rev=1.1
Index: pecl/phar/tests/phar_oo_getcontentsgz.phpt
+++ pecl/phar/tests/phar_oo_getcontentsgz.phpt
--TEST--
Phar object: getContents() (verify it works with compression)
--SKIPIF--
<?php if (!extension_loaded("phar")) die("skip"); ?>
<?php if (!extension_loaded("spl")) die("skip SPL not available"); ?>
<?php if (!extension_loaded("zlib")) die("skip zlib not available"); ?>
--INI--
phar.readonly=0
--FILE--
<?php
$fname = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.phar.php';
$fname2 = dirname(__FILE__) . '/' . basename(__FILE__, '.php') . '.2.phar.php';
$phar = new Phar($fname);
$phar['a'] = 'file contents
this works';
$phar['a']->setCompressedGZ();
copy($fname, $fname2);
$phar2 = new Phar($fname2);
var_dump($phar2['a']->isCompressed());
echo $phar2['a']->getContents() . "\n";
?>
===DONE===
--CLEAN--
<?php
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.phar.php');
unlink(dirname(__FILE__) . '/' . basename(__FILE__, '.clean.php') .
'.2.phar.php');
__halt_compiler();
?>
--EXPECT--
bool(true)
file contents
this works
===DONE===