Hello Marcus, Okay. I tracked it down. I am using the new build system so that spl gets compiled in. However, the problem is that simplexml is getting initialized before spl and simplexml needs the interface for spl to be initialized first.
I found that the order of module initialization is stored in main/internal_functions.c. Here is mine: zend_module_entry *php_builtin_extensions[] = { phpext_bcmath_ptr, phpext_calendar_ptr, phpext_com_dotnet_ptr, phpext_ctype_ptr, phpext_dom_ptr, phpext_ftp_ptr, phpext_iconv_ptr, phpext_libxml_ptr, phpext_odbc_ptr, phpext_pcre_ptr, phpext_session_ptr, phpext_simplexml_ptr, phpext_spl_ptr, phpext_sqlite_ptr, phpext_standard_ptr, phpext_tokenizer_ptr, phpext_wddx_ptr, phpext_xml_ptr, phpext_zlib_ptr, }; This file is created by the configure.js script. If I manually edit the file to put the spl extension _before_ the simplexml then recompile everything works fine. It appears that configure is sorting the extension list alphabetically before generating the above entries. I don't know if this is also the case on Linux (or other unixish). If the entries were not alphabetical, but based on the order passed to the configure.js, then the builder could simply change the order on the configuration command line. This makes me wonder if there are other new order dependencies now that interfaces are a part of PHP. Blake Schwendiman -----Original Message----- From: Marcus Boerger [mailto:[EMAIL PROTECTED] Sent: Thursday, January 08, 2004 12:42 PM To: Blake Schwendiman Subject: Re: [PHP-DEV] SimpleXML and Default Cast To String Hello Blake, are you compiling with the new or the old build system? I used the new one. And there spl was compiled into the exe. So that's what you need to do and i obviously need to disallow relying on spl in sxe when spl is compiled shared -> done. Thursday, January 8, 2004, 7:56:17 PM, you wrote: > My build fails on this line (from simplexml.c): > zend_class_implements(sxe_class_entry TSRMLS_CC, 1, > spl_ce_RecursiveIterator); > At the time of the call, spl_ce_RecursiveIterator is NULL. > I have to leave for about an hour. Then I'll be back to do more > investigation. I thought you'd like to know what I've found so far. > This failure occurs when simply trying to run the php.exe program at > all. The call stack is: > php5ts_debug.dll!_zend_is_inconsistent(_hashtable * ht=0x000000a4, char > * file=0x1050f914, int line=773) Line 53 + 0x3 > php5ts_debug.dll!_zend_hash_merge(_hashtable * target=0x00aee6ac, > _hashtable * source=0x000000a4, void (void *)* > pCopyConstructor=0x101acdc9, void * tmp=0x00000000, unsigned int size=4, > int overwrite=0, char * __zend_filename=0x1050d798, unsigned int > __zend_lineno=1919) Line 773 + 0x17 > php5ts_debug.dll!zend_do_implement_interface(_zend_class_entry * > ce=0x00aee608, _zend_class_entry * iface=0x00000000, void * * * > tsrm_ls=0x00932fe0) Line 1919 + 0x32 > php5ts_debug.dll!zend_class_implements(_zend_class_entry * > class_entry=0x00aee608, void * * * tsrm_ls=0x00932fe0, int > num_interfaces=0, ...) Line 1490 + 0x11 > php5ts_debug.dll!zm_startup_simplexml(int type=1, int module_number=12, > void * * * tsrm_ls=0x00932fe0) Line 1658 + 0x18 > php5ts_debug.dll!zend_startup_module(_zend_module_entry * > module=0x1067c520) Line 1179 + 0x15 > php5ts_debug.dll!php_startup_extensions(_zend_module_entry * * > ptr=0x106723dc, int count=19) Line 1294 + 0xb > php5ts_debug.dll!php_startup_internal_extensions() Line 80 + 0xc > php5ts_debug.dll!php_module_startup(_sapi_module_struct * sf=0x0041a420, > _zend_module_entry * additional_modules=0x00000000, unsigned int > num_additional_modules=0) Line 1460 + 0x5 > php.exe!main(int argc=2, char * * argv=0x00932c48) Line 593 + 0x11 > php.exe!mainCRTStartup() Line 400 + 0x11 > Blake Schwendiman > -----Original Message----- > From: Marcus Boerger [mailto:[EMAIL PROTECTED] > Sent: Thursday, January 08, 2004 11:12 AM > To: Blake Schwendiman > Subject: Re: [PHP-DEV] SimpleXML and Default Cast To String > Hello Blake, > Thursday, January 8, 2004, 6:49:09 PM, you wrote: >> Hello Marcus, >> As far as you know, does SPL work on Windows? I tried to install and >> build it (which worked fine), but my CLI build of PHP doesn't run >> anymore. >> I'll be looking at this some more; just wondering if you know of >> problems with SPL and Windows. >> Blake >> -----Original Message----- >> From: Marcus Boerger [mailto:[EMAIL PROTECTED] >> Sent: Wednesday, January 07, 2004 5:09 PM >> To: Adam Maccabee Trachtenberg >> Cc: Marcus Boerger; Blake Schwendiman; [EMAIL PROTECTED] >> Subject: Re: [PHP-DEV] SimpleXML and Default Cast To String >> Hello Adam, >> Thursday, January 8, 2004, 12:59:19 AM, you wrote: >>> On Thu, 8 Jan 2004, Marcus Boerger wrote: >>>> From my opinion the current behavior is perfect because i see >> simplexml from >>>> an xml developers side and not from an html developers side. The >> former must >>>> typically know exactly where his strings comme from while the latter >> has >>>> only text to deal with and often has situations where he needs to >> filter out >>>> formatting tags like the <i> in the example. >>> All of my SimpleXML work is strictly XML, too. However, my thought > was >>> that I could always call strip_tags() to eliminate the information I >>> didn't want, but there was no apply_tags() function to do the >>> reverse. :) Therefore, it was better to use the other method. >> Well there's ext/SPL in PECL. A SimpleXML Object is also a Iterator > and >> it is a RecursiveIterator if ext/SPL is build in. Then SPL also offers > a >> RecursiveIteratorIterator that taks a RecursiveIterator...so it is > just >> a >> foreach-four-liner. >> $text = ''; >> forach(new RecursiveIteratorIterator($sxe) as $el) { >> $text .= $el; >> } >>>> So i'd say let us add a method for returning the complete content. >> Adam >>>> could you do that? >>> That wouldn't be too difficult (although I am busy for the next day > or >>> two). However, as much as I loathe toggles, I'm wondering if it >>> wouldn't be better to make this an object-wide setting. My thought > are >>> that on an object-by-object basis, you either always want tags or >>> never want them. >>> Something like: >>> $sxe = simplexml_load_file('doc.xml'); >>> $sxe->displayTags = true; >>> This would keep the interface clean. Or would that just confuse > things >>> with more magic? >>> Also, what would the default behavior should be? I can argue both >>> sides of the issue right now. :) >> The idea is really nice but you mentioned the problems yourself it is >> increasing the wtf factor. Maybe we implement both getContent and >> getText >> and do this kind of magic in the next version aka 5.1? > Works perfect here but tell me if you find out something. > marcus > C:\Work\php\php-cvs>Debug_TS\php.exe -v > PHP 5.0.0RC1-dev (cli) (built: Jan 8 2004 19:06:01) (DEBUG) > Copyright (c) 1997-2004 The PHP Group > Zend Engine v2.0.0-dev, Copyright (c) 1998-2004 Zend Technologies > C:\Work\php\php-cvs>Debug_TS\php.exe run-tests.php ext/spl > ext/simplexml/tests/010.phpt > ===================================================================== > CWD : C:\Work\php\php-cvs > PHP : C:\Work\php\php-cvs\Debug_TS\php.exe > PHP_SAPI : cli > PHP_VERSION : 5.0.0RC1-dev > ZEND_VERSION: 2.0.0-dev > PHP_OS : WINNT - Windows NT BAUMBART 5.1 build 2600 > INI actual : C:\Work\php\php-cvs > More .INIs : > Extra dirs : > ===================================================================== > Running selected tests. > PASS SimpleXML and recursion > [C:\Work\php\php-cvs\ext\simplexml\tests\010.phpt] > PASS SPL: ArrayIterator > [C:\Work\php\php-cvs\ext\spl\tests\array_iterator.phpt] > PASS SPL: ArrayObject > [C:\Work\php\php-cvs\ext\spl\tests\array_object.phpt] > ===================================================================== > Number of tests : 3 3 > Tests skipped : 0 ( 0.0%) -------- > Tests warned : 0 ( 0.0%) ( 0.0%) > Tests failed : 0 ( 0.0%) ( 0.0%) > Tests passed : 3 (100.0%) (100.0%) > --------------------------------------------------------------------- > Time taken : 1 seconds > ===================================================================== -- Best regards, Marcus mailto:[EMAIL PROTECTED] -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php