pajoye                                   Wed, 05 May 2010 13:37:40 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=299021

Log:
- #51063, implement getimagesizefromstring

Bug: http://bugs.php.net/51063 (Assigned) Add getimagesizefromstring
      
Changed paths:
    U   php/php-src/trunk/ext/standard/basic_functions.c
    U   php/php-src/trunk/ext/standard/image.c
    U   php/php-src/trunk/ext/standard/php_image.h

Modified: php/php-src/trunk/ext/standard/basic_functions.c
===================================================================
--- php/php-src/trunk/ext/standard/basic_functions.c    2010-05-05 13:29:12 UTC 
(rev 299020)
+++ php/php-src/trunk/ext/standard/basic_functions.c    2010-05-05 13:37:40 UTC 
(rev 299021)
@@ -2690,6 +2690,7 @@
        PHP_FE(iptcparse,                                                       
                                                        arginfo_iptcparse)
        PHP_FE(iptcembed,                                                       
                                                        arginfo_iptcembed)
        PHP_FE(getimagesize,                                                    
                                                arginfo_getimagesize)
+       PHP_FE(getimagesizefromstring,                                          
                                        arginfo_getimagesize)
        PHP_FE(image_type_to_mime_type,                                         
                                        arginfo_image_type_to_mime_type)
        PHP_FE(image_type_to_extension,                                         
                                        arginfo_image_type_to_extension)


Modified: php/php-src/trunk/ext/standard/image.c
===================================================================
--- php/php-src/trunk/ext/standard/image.c      2010-05-05 13:29:12 UTC (rev 
299020)
+++ php/php-src/trunk/ext/standard/image.c      2010-05-05 13:37:40 UTC (rev 
299021)
@@ -1294,27 +1294,12 @@
 }
 /* }}} */

-/* {{{ proto array getimagesize(string imagefile [, array info])
-   Get the size of an image as 4-element array */
-PHP_FUNCTION(getimagesize)
+static void php_getimagesize_from_stream(php_stream *stream, zval **info, 
INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
 {
-       zval **info = NULL;
        char *arg1, *temp;
        int arg1_len, itype = 0, argc = ZEND_NUM_ARGS();
        struct gfxinfo *result = NULL;
-       php_stream * stream = NULL;

-       if (zend_parse_parameters(argc TSRMLS_CC, "s|Z", &arg1, &arg1_len, 
&info) == FAILURE) {
-               return;
-       }
-
-       if (argc == 2) {
-               zval_dtor(*info);
-               array_init(*info);
-       }
-
-       stream = php_stream_open_wrapper(arg1, "rb", 
STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH, NULL);
-
        if (!stream) {
                RETURN_FALSE;
        }
@@ -1379,8 +1364,6 @@
                        break;
        }

-       php_stream_close(stream);
-
        if (result) {
                array_init(return_value);
                add_index_long(return_value, 0, result->width);
@@ -1403,6 +1386,56 @@
 }
 /* }}} */

+#define FROM_DATA 0
+#define FROM_PATH 1
+
+static void php_getimagesize_from_any(INTERNAL_FUNCTION_PARAMETERS, int mode) 
{  /* {{{ */
+       zval **info = NULL;
+       php_stream *stream = NULL;
+       char *input;
+       int input_len;
+       const int argc = ZEND_NUM_ARGS();
+
+       if (zend_parse_parameters(argc TSRMLS_CC, "s|Z", &input, &input_len, 
&info) == FAILURE) {
+                       return;
+       }
+
+       if (argc == 2) {
+                       zval_dtor(*info);
+                       array_init(*info);
+       }
+
+
+       if (mode == FROM_PATH) {
+               stream = php_stream_open_wrapper(input, "rb", 
STREAM_MUST_SEEK|REPORT_ERRORS|IGNORE_PATH, NULL);
+       } else {
+               stream = php_stream_memory_open(TEMP_STREAM_READONLY, input, 
input_len);
+       }
+
+       if (!stream) {
+                  RETURN_FALSE;
+       }
+
+       php_getimagesize_from_stream(stream, info, 
INTERNAL_FUNCTION_PARAM_PASSTHRU);
+       php_stream_close(stream);
+}
+/* }}} */
+
+/* {{{ proto array getimagesize(string imagefile [, array info])
+   Get the size of an image as 4-element array */
+PHP_FUNCTION(getimagesize)
+{
+       php_getimagesize_from_any(INTERNAL_FUNCTION_PARAM_PASSTHRU, FROM_PATH);
+}
+/* }}} */
+
+/* {{{ proto array getimagesizefromstring(string data [, array info])
+   Get the size of an image as 4-element array */
+PHP_FUNCTION(getimagesizefromstring)
+{
+       php_getimagesize_from_any(INTERNAL_FUNCTION_PARAM_PASSTHRU, FROM_DATA);
+}
+
 /*
  * Local variables:
  * tab-width: 4

Modified: php/php-src/trunk/ext/standard/php_image.h
===================================================================
--- php/php-src/trunk/ext/standard/php_image.h  2010-05-05 13:29:12 UTC (rev 
299020)
+++ php/php-src/trunk/ext/standard/php_image.h  2010-05-05 13:37:40 UTC (rev 
299021)
@@ -23,6 +23,7 @@
 #define PHP_IMAGE_H

 PHP_FUNCTION(getimagesize);
+PHP_FUNCTION(getimagesizefromstring);

 PHP_FUNCTION(image_type_to_mime_type);
 PHP_FUNCTION(image_type_to_extension);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to