|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2008-03-10 14:45 UTC] php at benjaminschulz dot com
Description: ------------ It would be nice if it would be possible to get the underlying resource handle of an SplFileObject to be able to add stream filters on the file. Sadly the URI parser in PHP seems to be broken and URIs with filters like php://filter/read=convert.iconv.ISO-8859-15/UTF-8/resource=... cannot be used (encoding the slash doesn't work either (%2F)) therefore it would be nice if one could access the underlying resource handle f.e. by providing a protected $fp in SplFileObject one could use in a child class then and do the stream_filter_append() there. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 11:00:01 2025 UTC |
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)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);