mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
- #51063, implement getimagesizefromstring
This commit is contained in:
parent
8a0450698d
commit
b9730786a7
3 changed files with 53 additions and 18 deletions
|
@ -2690,6 +2690,7 @@ const zend_function_entry basic_functions[] = { /* {{{ */
|
||||||
PHP_FE(iptcparse, arginfo_iptcparse)
|
PHP_FE(iptcparse, arginfo_iptcparse)
|
||||||
PHP_FE(iptcembed, arginfo_iptcembed)
|
PHP_FE(iptcembed, arginfo_iptcembed)
|
||||||
PHP_FE(getimagesize, arginfo_getimagesize)
|
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_mime_type, arginfo_image_type_to_mime_type)
|
||||||
PHP_FE(image_type_to_extension, arginfo_image_type_to_extension)
|
PHP_FE(image_type_to_extension, arginfo_image_type_to_extension)
|
||||||
|
|
||||||
|
|
|
@ -1294,26 +1294,11 @@ PHPAPI int php_getimagetype(php_stream * stream, char *filetype TSRMLS_DC)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
/* {{{ proto array getimagesize(string imagefile [, array info])
|
static void php_getimagesize_from_stream(php_stream *stream, zval **info, INTERNAL_FUNCTION_PARAMETERS) /* {{{ */
|
||||||
Get the size of an image as 4-element array */
|
|
||||||
PHP_FUNCTION(getimagesize)
|
|
||||||
{
|
{
|
||||||
zval **info = NULL;
|
|
||||||
char *arg1, *temp;
|
char *arg1, *temp;
|
||||||
int arg1_len, itype = 0, argc = ZEND_NUM_ARGS();
|
int arg1_len, itype = 0, argc = ZEND_NUM_ARGS();
|
||||||
struct gfxinfo *result = NULL;
|
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) {
|
if (!stream) {
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
|
@ -1379,8 +1364,6 @@ PHP_FUNCTION(getimagesize)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
php_stream_close(stream);
|
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
array_init(return_value);
|
array_init(return_value);
|
||||||
add_index_long(return_value, 0, result->width);
|
add_index_long(return_value, 0, result->width);
|
||||||
|
@ -1403,6 +1386,56 @@ PHP_FUNCTION(getimagesize)
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
#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:
|
* Local variables:
|
||||||
* tab-width: 4
|
* tab-width: 4
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#define PHP_IMAGE_H
|
#define PHP_IMAGE_H
|
||||||
|
|
||||||
PHP_FUNCTION(getimagesize);
|
PHP_FUNCTION(getimagesize);
|
||||||
|
PHP_FUNCTION(getimagesizefromstring);
|
||||||
|
|
||||||
PHP_FUNCTION(image_type_to_mime_type);
|
PHP_FUNCTION(image_type_to_mime_type);
|
||||||
PHP_FUNCTION(image_type_to_extension);
|
PHP_FUNCTION(image_type_to_extension);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue