#37965 [Opn]: Multi-dimensional array between PHP and COM
| From: | mcboog at zonnet dot nl | Date: | Thu, 06 Jul 2006 12:40:00 +0000 |
| Subject: | #37965 [Opn]: Multi-dimensional array between PHP and COM | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-99156@lists.php.net to get a copy of this message | ||
ID: 37965
User updated by: mcboog at zonnet dot nl
Reported By: mcboog at zonnet dot nl
Status: Open
Bug Type: COM related
Operating System: Windows XP Professional
PHP Version: 5.1.4
New Comment:
Sorry man, never done this before...
Now I got the following backtrace:
convert_to_long_base(_zval_struct * 0x100ea6d5, int 0) line 306 + 9
bytes
saproxy_read_dimension(_zval_struct * 0x10076460, _zval_struct *
0x100369b1, int 17481848, void * * * 0x010ac064) line 176
ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(_zend_execute_data * 0x10019515,
void * * * 0x010ac530) line 20802
execute(_zend_op_array * 0x7c9106eb, void * * * 0x1000948d) line 92 +
12 bytes
NTDLL! 7c9106eb()
NTDLL! 7c9106eb()
Previous Comments:
------------------------------------------------------------------------
[2006-07-06 12:10:36] mcboog at zonnet dot nl
Following the instructions for Generating a backtrace on Win32 gave me
this backtrace:
PHP5TS! 100af45c()
------------------------------------------------------------------------
[2006-07-05 21:20:28] tony2001@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php
for *NIX and
http://bugs.php.net/bugs-generating-backtrace-win32.php
for Win32
Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.
------------------------------------------------------------------------
[2006-07-05 21:13:04] mcboog at zonnet dot nl
Forget everything above.
Description:
When accessing a multi-dim array from COM-object Apache2 crashes with
error [Wed Jul 05 22:50:21 2006] [notice] Parent: child process exited
with status 3221225477 -- Restarting. This error-code seems to be
related with array access problems.
When I use the COM-object with VBScript I can access the value of the
multi-dim array with: multiArray(1,1), which should have an equivalent
in PHP by $multiArray[1][1].
Reproduce code:
<?php
$obj = new COM('com_object');
$obj->function_call($multiArray);
print $multiArray[1][1];
?>
Expected result:
output value.
Actual result:
Apache crashes.
------------------------------------------------------------------------
[2006-07-05 09:06:21] mcboog at zonnet dot nl
Is there a reason why there is still no reaction on my bug report?
------------------------------------------------------------------------
[2006-06-29 21:03:32] mcboog at zonnet dot nl
Description:
------------
As noticed in two previous bug-reports
(//http://bugs.php.net/bug.php?id=35956 &
//http://bugs.php.net/bug.php?id=33108) there is
a problem with
retrieving a multi-dimensional array from a COM-object. This problem is
addressed on the website of Zend
(http://www.zend.com/manual/faq.com.php, question #2), but should be
resolved in PHP5 (http://www.zend.com/manual/ref.com.php, Arrays and
Array-style COM properties).
Reproduce code:
---------------
$obj = new COM('com.object.version');
$varIn = new Variant;
$varOutSimple = new Variant;
$varOutComplex = new Variant;
$obj->internal_com_method($varIn, $varOutSimple, $varOutComplex)
This method has te following definition (part of output of
com_print_typeinfo($obj)):
function internal_com_method(
/* VT_I4 [3] [in] */ $varIn,
/* VT_PTR [26] [in][out] --> VT_VARIANT [12] */ &$varOutSimple,
/* VT_PTR [26] [in][out] --> VT_VARIANT [12] */ &$varOutComplex
) { /* Method internal_com_method }
$varIn is just an integer. $varOutSimple is a single-dimension array,
$varOutComplex is a double-dimension array.
Calling NumberOfFields;
1. print $varOutSimple->NumberOfFields;
2. print $varOutComplex->NumberOfFields;
Count
3. print count($varOutSimple);
4. print count($varOutComplex);
Getting value with string as key
5. print $varOutSimple['key'];
6. print $varOutComplex['key'];
Doing foreach:
7. foreach ($varOutSimple as $key => $value) {
print $value;
}
8. foreach ($varOutComplex as $key => $value) {
print $value;
}
Expected result:
----------------
1. output 11
2. output 52
3. output 11
4. output 52
5. output $value
6. output $value
7. output $value
8. output $value
Actual result:
--------------
1. output 11
2. Error: Uncaught exception 'com_exception' with message 'this variant
has no properties'.
3. output 1 (irrelevant, works at 5. with direct string-key access)
4. output 52
5. output $value
6. Apache (Apache/2.0.55 (Win32) ) crashes
7. Error: Uncaught exception 'Exception' with message 'Object of type
variant did not create an Iterator'
8. Error: Can only handle single dimension variant arrays (this array
has 2) & (NB!) Uncaught exception 'Exception' with message 'Object of
type variant did not create an Iterator'
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37965&edit=1