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===

Reply via email to