At 13.05 05/01/2007, Roberto Fichera wrote:
>At 12.33 05/01/2007, Roberto Fichera wrote:
>>At 12.18 05/01/2007, Johannes Schlüter wrote:
>>
>>>Hi Roberto,
>>>
>>>On Fri, 2007-01-05 at 11:33 +0100, Roberto Fichera wrote:
>>>> Now my problem is how to find declared functions in a context. Which 
>>>hash table
>>>> I have to use?
>>>
>>>Just take a look at the structure behind the executor_globals EG struct:
>>>http://lxr.php.net/source/ZendEngine2/zend_globals.h#147 to see which
>>>HashTable might contain the function_table. In that structure you might
>>>find other useful elements )(maybe you need the class table or constants
>>>table, too?) ;-)
>>
>>Yep! I tried to following code but it seems not working as expected. I 
>>don't know
>>also if the "data" is declared correctly but the zend_hash_find() 
>>returns FAILURE.
>
>Below there's the script with the correct func_ptr pointer for the 
>zend_hash_find() 
>but indeed still not working for me ;-)!

I found the problem :-))))!!! The solution was to specify the function name
in lower case!!!! So replacing the "myFunc" with "myfunc" works as expected!!!!
And now I'm able to call the requested function from a thread :-)))!!! 

>
>test.php
>function myFunc()
>{
>  echo "Hello";
>}
>
>
>#include <php_embed.h>
>
>int main( int argc, char *argv[] )
>{
>  zend_file_handle script;
>  zend_function *func_ptr = NULL;
>
>  script.type = ZEND_HANDLE_FP;
>  script.filename = ( argc > 1 ? argv[1] : "test.php" );
>  script.opened_path = NULL;
>  script.free_filename = 0;
>  script.handle.fp = fopen( script.filename, "rb" );
>
>  PHP_EMBED_START_BLOCK(argc,argv)
>
>    zend_execute_scripts( ZEND_REQUIRE TSRMLS_CC, NULL, 1, &script );
>
>    if ( zend_hash_find( EG( function_table ), "myFunc", sizeof( 
>"myFunc" ), (void **)&func_ptr) == FAILURE )
>    {
>      fprintf( stderr, "%s(): Name not found\n", __func__ );
>      return -1;
>    }
>
>    if ( func_ptr == NULL )
>    {
>      fprintf( stderr, "%s(): Value is NULL\n", __func__ );
>      return -1;
>    }
>
>   fprintf( stderr, "The function 'myFunc' has been found\n" );
>
>   PHP_EMBED_END_BLOCK()
>
>   return 0;
>}
>
>>
>>int main( int argc, char *argv[] )
>>{
>>  zend_file_handle script;
>>  zval **data = NULL;
>>
>>  script.type = ZEND_HANDLE_FP;
>>  script.filename = ( argc > 1 ? argv[1] : "test.php" );
>>  script.opened_path = NULL;
>>  script.free_filename = 0;
>>  script.handle.fp = fopen( script.filename, "rb" );
>>
>>  PHP_EMBED_START_BLOCK(argc,argv)
>>
>>    zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, NULL, 1, &script);
>>
>>    if ( zend_hash_find( EG(function_table), "myFunc", sizeof( 
>>"myFunc" )+1, (void **)&data) == FAILURE )
>>    {
>>      fprintf( stderr, "%s(): Name not found\n", __func__ );
>>      return -1;
>>    }
>>
>>    if ( data == NULL )
>>    {
>>      fprintf( stderr, "%s(): Value is NULL\n", __func__ );
>>      return -1;
>>    }
>>
>>   fprintf( stderr, "The function 'myFunc' has been found\n" );
>>
>>   PHP_EMBED_END_BLOCK()
>>
>>   return 0;
>>}
>>
>>
>>
>>>
>>>johannes
>
>
>Roberto Fichera. 
>
>-- 
>PHP Internals - PHP Runtime Development Mailing List
>To unsubscribe, visit: http://www.php.net/unsub.php

Roberto Fichera. 

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to