Req #44392 [Com]: getFilePointer() for Childs of SplFileObject

From: Date: Tue, 13 May 2014 14:50:46 +0000
Subject: Req #44392 [Com]: getFilePointer() for Childs of SplFileObject
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-185796@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=44392&edit=1

 ID:                 44392
 Comment by:         nyamsprod at gmail dot com
 Reported by:        php at benjaminschulz dot com
 Summary:            getFilePointer() for Childs of SplFileObject
 Status:             Open
 Type:               Feature/Change Request
 Package:            SPL related
 PHP Version:        5.3CVS-2008-03-10 (CVS)
 Block user comment: N
 Private report:     N

 New Comment:

Even thought making the SplFileObject::getFilePointer() method public would be a great addition I
think there is a better solution which would be to create a abstract interface "à la"
Traversable but called "Streamable". 
This interface would not be implemented alone but classes that implement it like SplFileObject would
be usable directly on function like stream_append_filter, streamp_get_metadata of even curl_setopt. 
That way the SplFileObject file pointer would be "usable" but its file pointer property
would remain protected from a developer who would otherwise use the SplFileObject::getFilePointer()
result direclty on a fclose function.


Previous Comments:
------------------------------------------------------------------------
[2013-12-04 13:05:20] drgomesp at gmail dot com

Any updates on this? It would be really useful to change the visibility of this method to public.

------------------------------------------------------------------------
[2012-12-12 16:12:02] mattsch at gmail dot com

I agree that this method should also be public.  Please implement this method ASAP.

------------------------------------------------------------------------
[2012-12-09 01:26:59] levim@php.net

I don't see why this method shouldn't be public. I vote for extending its 
visibility to public.

------------------------------------------------------------------------
[2012-11-20 23:38:18] mattsch at gmail dot com

What's the status of this bug?  SplFileObject is supposed to be an OO version of fopen but
it's quite useless to pass into other functions like curl when those functions expect a
resource.

Example:

$splFileObject = new SplFileObject('/tmp/foo', 'r');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'sftp://server.com/folder/');
curl_setopt($ch, CURLOPT_UPLOAD, 1);
curl_setopt($ch, CURLOPT_INFILE, $splFileObject); # <-- won't work, must be file resource
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localfile));
curl_exec ($ch);
curl_close($ch);

------------------------------------------------------------------------
[2008-11-14 23:49:33] jordan dot raub at dataxltd dot com

add a protected member function to SplFileObject so that extending classes can have more control of
the file handle... patch included against php5.2.6..


--- php-5.2.6/ext/spl/spl_directory.c   2008-02-13 04:23:26.000000000 -0800
+++ php52GetResource/ext/spl/spl_directory.c    2008-11-14 13:22:17.000000000 -0800
@@ -2218,6 +2218,15 @@
        }
 } /* }}} */

+/* {{{ proto void SplFileObject::getFileResource()
+   Seek to specified line */
+SPL_METHOD(SplFileObject, getFileResource)
+{
+       spl_filesystem_object *intern =
(spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       php_stream_to_zval(intern->u.file.stream, return_value);
+} /* }}} */
+
 /* {{{ Function/Class/Method definitions */
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_file_object___construct, 0, 0, 1)
@@ -2310,6 +2319,7 @@
        SPL_ME(SplFileObject, getMaxLineLen,  NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileObject, hasChildren,    NULL, ZEND_ACC_PUBLIC)
        SPL_ME(SplFileObject, getChildren,    NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(SplFileObject, getFileResource,NULL, ZEND_ACC_PROTECTED)
        SPL_ME(SplFileObject, seek,           arginfo_file_object_seek,          ZEND_ACC_PUBLIC)
        /* mappings */
        SPL_MA(SplFileObject, getCurrentLine, SplFileObject, fgets,      NULL, ZEND_ACC_PUBLIC)

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=44392


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=44392&edit=1


Thread (12 messages)

« previous php.bugs (#185796) next »