[PHP-DEV] Re: RFC: dba/inifile native interface
On Sun, 23 Feb 2003, Marcus Börger wrote: After fixing hopefully last problems in the inifile handler i made up a patch which introduces a native interface to the inifile handler. I did this because the [group]name key format is not intuitive. Care to explain what it does? Does it feed all entries to the PHP INI system or is this is a custom layer wrapping the DBA API for storage of application settings? - Sascha -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Re: RFC: dba/inifile native interface
At 12:11 23.02.2003, Sascha Schumann wrote: On Sun, 23 Feb 2003, Marcus Börger wrote: After fixing hopefully last problems in the inifile handler i made up a patch which introduces a native interface to the inifile handler. I did this because the [group]name key format is not intuitive. Care to explain what it does? Does it feed all entries to the PHP INI system or is this is a custom layer wrapping the DBA API for storage of application settings? - Sascha You can use it to work with any ini file and has nothing to do with the PHP INI system. I implemented the native interface - inifile_*() functions - in order to be able to work with group and name instead of the single key format that is necessary using the dba interface. marcus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] domxml close document routine
Hi You're right, there is no functionality right now, which is freeing the domxml resources and I looked quickly through your patch. But i'm not sure, what you're gaining exactly with it. You're not freeing the libxml resources itself (and therefore the actual xml data), but just the Zend-Resources to it. Maybe this is very helpful in your special case, but IMHO not a general solution to the problem ;) Could you please send me an example of your script. Maybe I can see then, where this functionality is especially useful. chregu On Sun, 2003-02-23 at 02:40, Robert Oldham wrote: Overview: domxml does not include a close document routing to release memory after an xml document has been processed. I have added one. Purpose: I am using PHP's domxml functionality to parse thousands (17,000+) xml documents in a single request. The current implementation of domxml in PHP does not allow for xml documents to be closed, so memory is lost at more than 7KB/document during processing. I have been able to reduce this to 1KB/document by adding a close document routine to the PHP domxml extension and calling that close routine in my PHP scripts. Diff: Please see the patch files for my changes at the following URLs. http://robertoldham.com/php_domxml.h.php4.diff http://robertoldham.com/php_domxml.c.php4.diff http://robertoldham.com/php_domxml.h.php5.diff http://robertoldham.com/php_domxml.c.php5.diff Caveats: Lacking familiarity with PHP development, I am not sure that my implementation of the close routine is optimal. However, I have been using this code change in php-4.2.3, php-4.3.0 and php-4.3.1 for approximately 6 weeks without any problems. I am also unfamiliar with the process of getting a change reviewed and applied. If I have done anything wrong, or need to do additional things to follow this through, please let me know. Thank you, Robert Oldham -- christian stocker | bitflux GmbH | schoeneggstrasse 5 | ch-8004 zurich phone +41 1 240 56 70 | mobile +41 76 561 88 60 | fax +41 1 240 56 71 http://www.bitflux.ch | [EMAIL PROTECTED] | gnupg-keyid 0x5CE1DECB -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Re: [PHP-LANG] PHP not supporting method overloading
On Sun, 23 Feb 2003, Jun wrote: Hi! I have a website whose pages were written in PHP.. using some classes I have made that extensively use method overloading.. Before, my webhosting company was using PHP 4.0.6 but just this january, they have upgraded to PHP 4.3.0... that is when I started to receive errors. My website is currently down because all of my scripts are reporting error: Cannot Redeclare .. blablah blah.. It seems to me that the support for method overloading was removed. Even my FastTemplate class is issuing the same error. What will I do to minimize the time in re-doing all of my scripts. And also, why did the PHP guys removed the support for method overloading..? It was never a feature, but a bug that you could redeclare methods. PHP had never real method overloading. ANyway, this mail belongs on [EMAIL PROTECTED] Derick -- Stop mad cowboy disease! - Derick Rethans http://derickrethans.nl/ PHP Magazine - PHP Magazine for Professionals http://php-mag.net/ - -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Why parent::construct not called?
Hi, why if I have class B extends A { } the only way to call in automatic the A::__construct() is to not write the B::__construct() ? Ok, this is the design of PHP. But why ? tnx -- michel 'ziobudda' morelli [EMAIL PROTECTED] -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] give me advice
I'd like to create an open source project : I have built a small daemon which is able to manage a neural network I have built a php-module php-module (in c/c++) to communicate with the previous server. Do you think it could be interesting to do improve this things ? Sylvain Becker
[PHP-DEV] Performance degradation
So, I am just starting out down the path to figure out why PHP 4.3 has gotten so much slower than 4.2. strace -c provides the first clue. A straight ./configure --enable-inline-optimization make command-line build for 4.2, 4.3 and 5.0 run on a simple hello world script reveals that we have gone from 219 system calls in 4.2 to 233 in 4.3 to 236 in 5.0. This is a bad trend and we really need to make an effort to reverse this. 4.2 Hello World from command-line: % time seconds usecs/call callserrors syscall -- --- --- - - 21.860.000266 1617 3 open 19.060.000232 29 8 write 15.690.000191 1118 read 12.570.000153 285 brk 10.440.000127 524 old_mmap 4.110.50 10 5 munmap 3.370.41 7 6 mmap2 2.960.36 5 8 mprotect 2.550.31 215 fstat64 2.380.29 214 close 0.740.09 5 2 lstat64 0.660.08 4 2 rt_sigaction 0.660.08 8 1 getcwd 0.490.06 3 2 2 ioctl 0.490.06 6 1 uname 0.410.05 3 2 setitimer 0.410.05 3 2 fcntl64 0.330.04 4 1 chdir 0.250.03 2 2 getpid 0.250.03 3 1 _llseek 0.160.02 2 1 time 0.080.01 1 1 gettimeofday 0.080.01 1 1 rt_sigprocmask -- --- --- - - 100.000.001217 219 5 total 4.3 Hello World from command-line: % time seconds usecs/call callserrors syscall -- --- --- - - 21.550.000292 1520 7 open 18.300.000248 28 9 write 14.610.000198 1217 read 13.060.000177 295 brk 8.340.000113 522 old_mmap 6.350.86 22 4 lstat64 3.690.50 10 5 munmap 3.030.41 7 6 mmap2 2.580.35 5 7 mprotect 2.360.32 214 fstat64 2.210.30 213 close 0.590.08 2 4 setitimer 0.590.08 3 3 rt_sigaction 0.590.08 8 1 getcwd 0.370.05 5 1 chdir 0.370.05 5 1 uname 0.300.04 2 2 2 ioctl 0.300.04 2 2 fcntl64 0.220.03 2 2 getpid 0.150.02 2 1 time 0.150.02 2 1 gettimeofday 0.150.02 2 1 _llseek 0.150.02 1 2 rt_sigprocmask -- --- --- - - 100.000.001355 233 9 total 5.0 Hello World from command-line: % time seconds usecs/call callserrors syscall -- --- --- - - 21.700.000288 1420 7 open 18.990.000252 28 9 write 15.070.000200 297 brk 14.920.000198 1217 read 8.290.000110 522 old_mmap 5.430.72 12 6 munmap 3.540.47 7 7 mmap2 2.490.33 5 7 mprotect 2.190.29 213 close 2.030.27 214 fstat64 1.430.19 5 4 lstat64 0.680.09 3 3 rt_sigaction 0.600.08 2 4 setitimer 0.600.08 8 1 getcwd 0.380.05 5 1 uname 0.300.04 4 1 chdir 0.300.04 2 2 fcntl64 0.230.03 2 2 getpid 0.230.03 3 1 1 ioctl 0.230.03
Re: [PHP-DEV] Why parent::construct not called?
At 16:46 23.02.2003, michel 'ziobudda' morelli wrote: Hi, why if I have class B extends A { } the only way to call in automatic the A::__construct() is to not write the B::__construct() ? Ok, this is the design of PHP. But why ? You can do the following: class base { function __construct() { echo base::__construct()\n; } function __destruct() { echo base::__destruct()\n; } } class derived extends base { function __construct() { parent::__construct(); echo derived::__construct()\n; } function __destruct() { parent::__destruct(); echo derived::__destruct()\n; } } See: http://marcus-boerger.de/php/ext/ze2/ctor_dtor_inheritance.phpt.txt regards marcus -- -- Marcus Börger - Looking for all sorts of freelance work - just ask... Did i help you? Consider a gift: http://www.amazon.de/exec/obidos/wishlist/ho722v0rg1u0 -- -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
So, obviously these opens don't really affect the module version since they only happen on startup, but they still don't seem right. I understand ./php-cgi.ini, but .//php-cgi.ini and .//php.ini? Looks like a missing check there. I just recognized these yesturday, too and was thinking the same. marcus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
RL So, obviously these opens don't really affect the module version RL since they only happen on startup, but they still don't seem right. RL I understand ./php-cgi.ini, but .//php-cgi.ini and .//php.ini? RL Looks like a missing check there. If this is only for CGI/startup, it is indeed not so important, IMHO. After all, CGI is not a performance-star anyway. RL Anybody know what the increase from 85 to 95 brk calls actually tells us? Either increased memory usage or substantial change in memory usage pattern (e.g., allocation of one big object, than freeing and allocation a number of small objects with the same size should generate less brk's then allocating small ones first and then large one). -- Stanislav Malyshev, Zend Products Engineer [EMAIL PROTECTED] http://www.zend.com/ +972-3-6139665 ext.109 -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
On Sun, 23 Feb 2003, Stanislav Malyshev wrote: RL So, obviously these opens don't really affect the module version RL since they only happen on startup, but they still don't seem right. RL I understand ./php-cgi.ini, but .//php-cgi.ini and .//php.ini? RL Looks like a missing check there. If this is only for CGI/startup, it is indeed not so important, IMHO. After all, CGI is not a performance-star anyway. True, but that doesn't mean we should be doing stupid things like trying to open the same file twice or calling realpath() twice on the same path. And obviously something similar is happening to the module case because we are 10-15% slower in the module version. Either increased memory usage or substantial change in memory usage pattern (e.g., allocation of one big object, than freeing and allocation a number of small objects with the same size should generate less brk's then allocating small ones first and then large one). The script I tested was simply: html body ? echo Hello World; ? /body /html Hopefully executing this should not have caused a big change in memory usage between 4.2 and 4.3. -Rasmus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Why parent::construct not called?
Il dom, 2003-02-23 alle 17:32, Marcus Börger ha scritto: You can do the following: class base { function __construct() { echo base::__construct()\n; } [...] I know know. What I want to understand is why the base::__construct() is called (in automatic) only when derived::__constuct() is missing. I think that or the base::__construct() is always in automatic called or it is always never called (in automatic). bye -- michel 'ziobudda' morelli [EMAIL PROTECTED] -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Why parent::construct not called?
At 18:02 23.02.2003, michel 'ziobudda' morelli wrote: Il dom, 2003-02-23 alle 17:32, Marcus Börger ha scritto: You can do the following: class derived extends base { function __construct() { parent::__construct(); echo derived::__construct()\n; } I know know. What I want to know is why the base::__construct() is called (in automatic) only when derived::__constuct() is missing. I think that or the base::__construct() is always in automatic called or it is never called (always in automatic). In ZE2 each class has a constructor. That constructor can be overwritten by writing a method named __construct. So far so good. Unlike other languages, C++ for one, PHP does not call any inherited constructors automatically, C++ calls the default constructor if not set explicitly. But PHP inherits the constructor if it is not redeclared/overwritten. Therfor if the base has a constructor and the derived has not the inherited (the one from base) is called. regards marcus -- -- Marcus Börger - Looking for all sorts of freelance work - just ask... Did i help you? Consider a gift: http://www.amazon.de/exec/obidos/wishlist/ho722v0rg1u0 -- -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Why parent::construct not called?
On Sun, 2003-02-23 at 18:04, michel 'ziobudda' morelli wrote: Il dom, 2003-02-23 alle 17:32, Marcus Börger ha scritto: You can do the following: class base { function __construct() { echo base::__construct()\n; } [...] I know know. What I want to understand is why the base::__construct() is called (in automatic) only when derived::__constuct() is missing. Because (from a user's point of view) the constructor is inherited just like any other function. I think that or the base::__construct() is always in automatic called or it is always never called (in automatic). Well, because there might be situations in which I'd like to call the parent's constructor before my code in __construct, sometimes after it and in some situations, not call it at all. - Timm -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Why parent::construct not called?
Il dom, 2003-02-23 alle 18:07, Marcus Börger ha scritto: In ZE2 each class has a constructor. That constructor can be overwritten by writing a method named __construct. So far so good. Ok... This is the design.. tnx. -- michel 'ziobudda' morelli [EMAIL PROTECTED] -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] give me advice
hi, I have built a small daemon which is able to manage a neural network I have built a php-module php-module (in c/c++) to communicate with the previous server. Do you think it could be interesting to do improve this things ? Sylvain Becker If it is generic enough, why not try contributing it to PECL? -daniel -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Why parent::construct not called?
At 18:29 23.02.2003, Timm Friebe wrote: Well, because there might be situations in which I'd like to call the parent's constructor before my code in __construct, sometimes after it and in some situations, not call it at all. I hope you will never avoid initialising the base class or just call the base constructor after anything else is done in the dericed constructor. The problem is that when you so the behavior of the base class members (functions and properties) is not predictable. marcus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Performance degradation part 2 the module version
A little bit harder to get clean output on this one. The numbers in the 's are the times for the system call. Here is a 4.2 hello world request: accept(24, {sin_family=AF_INET, sin_port=htons(57198), sin_addr=inet_addr(10.0.1.254)}}, [16]) = 3 4.035087 rt_sigaction(SIGUSR1, {SIG_IGN}, {0x40035250, [], SA_INTERRUPT|0x400}, 8) = 0 0.09 getsockname(3, {sin_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr(10.0.1.253)}}, [16]) = 0 0.09 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 0.11 alarm(300) = 0 0.10 read(3, GET /index.php HTTP/1.0\r\nUser-Ag..., 4096) = 106 0.18 rt_sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}, 8) = 0 0.08 time(NULL) = 1046024055 0.08 alarm(300) = 300 0.09 alarm(0)= 300 0.08 stat64(/html/index.php, {st_mode=S_IFREG|0644, st_size=58, ...}) = 0 0.23 alarm(300) = 0 0.09 umask(077) = 022 0.07 umask(022) = 077 0.08 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0 0.08 rt_sigaction(SIGPROF, {0x40690508, [PROF], SA_RESTART|0x400}, {0x40690508, [PROF], SA_RESTART|0x400}, 8) = 0 0.08 rt_sigprocmask(SIG_UNBLOCK, [PROF], NULL, 8) = 0 0.08 getcwd(/usr/sbin, 4095) = 10 0.12 chdir(/html) = 0 0.14 open(/html/index.php, O_RDONLY) = 4 0.19 getcwd(/html, 4095) = 6 0.09 lstat64(/html, {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0 0.12 lstat64(/html/index.php, {st_mode=S_IFREG|0644, st_size=58, ...}) = 0 0.11 ioctl(4, SNDCTL_TMR_TIMEBASE, 0xbfffe1a0) = -1 ENOTTY (Inappropriate ioctl for device) 0.09 fstat64(4, {st_mode=S_IFREG|0644, st_size=58, ...}) = 0 0.08 mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x402ba000 0.27 read(4, html\nbody\n?\n\techo \Hello Wo..., 8192) = 58 0.15 read(4, , 4096) = 0 0.08 read(4, , 8192) = 0 0.08 ioctl(4, SNDCTL_TMR_TIMEBASE, 0xbfffd160) = -1 ENOTTY (Inappropriate ioctl for device) 0.08 close(4)= 0 0.10 munmap(0x402ba000, 4096)= 0 0.13 alarm(300) = 300 0.09 alarm(0)= 300 0.08 chdir(/usr/sbin) = 0 0.19 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={0, 0}}, NULL) = 0 0.09 umask(022) = 022 0.07 alarm(0)= 0 0.08 select(4, [3], NULL, NULL, {0, 0}) = 0 (Timeout) 0.10 write(3, HTTP/1.1 200 OK\r\nDate: Sun, 23 F..., 232) = 232 0.34 time(NULL) = 1046024055 0.08 write(39, 10.0.1.254 - - [23/Feb/2003:10:1..., 94) = 94 0.24 alarm(30) = 0 0.09 shutdown(3, 1 /* send */) = 0 0.24 select(4, [3], NULL, NULL, {2, 0}) = 1 (in [3], left {2, 0}) 0.000775 read(3, , 512)= 0 0.14 close(3)= 0 0.27 alarm(0)= 30 0.08 rt_sigaction(SIGUSR1, {0x40035250, [], SA_INTERRUPT|0x400}, {SIG_IGN}, 8) = 0 0.09 alarm(0)= 0 0.08 This is just from accept-to-accept, so it doesn't include any Apache/PHP startup calls at all. A couple of these syscalls are from Apache but starting with the alarm(300) call (I think) we are in PHP. The only thing that looks slightly off to me in this set of calls are the consecutive umask() calls. Might be something worth tracking down to see if one can be eliminated. The point here however is to compare to 4.3: accept(24, {sin_family=AF_INET, sin_port=htons(57262), sin_addr=inet_addr(10.0.1.254)}}, [16]) = 3 8.485988 rt_sigaction(SIGUSR1, {SIG_IGN}, {0x40035250, [], SA_INTERRUPT|0x400}, 8) = 0 0.09 getsockname(3, {sin_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr(10.0.1.253)}}, [16]) = 0 0.10 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0 0.12 alarm(300) = 0 0.10 read(3, GET /index.php HTTP/1.0\r\nUser-Ag..., 4096) = 106 0.16 rt_sigaction(SIGUSR1, {SIG_IGN}, {SIG_IGN}, 8) = 0 0.08 time(NULL) = 1046024677 0.08 alarm(300) = 300 0.08 alarm(0)= 300 0.08 stat64(/html/index.php, {st_mode=S_IFREG|0644, st_size=58, ...}) = 0 0.22 alarm(300) = 0 0.09 umask(077) = 022 0.08 umask(022) = 077 0.07 setitimer(ITIMER_PROF, {it_interval={0, 0}, it_value={30, 0}}, NULL) = 0 0.09 rt_sigaction(SIGPROF, {0x4072d6b4, [PROF], SA_RESTART|0x400}, {0x4072d6b4,
Re: [PHP-DEV] Performance degradation part 2 the module version
Rasmus Lerdorf wrote: Even in 4.2, I think we can optimize it. Assuming chdir() doesn't return an error, we shouldn't need that second getpwd() call since we just did the chdir() and we should know where we are. Not necessarily... In a threaded environment, if threadA does chdir(/tmp) and then threadB does chdir(/var), then the actual process is in /var for the remainder of threadA (IIRC). chdir() is process scoped. -- === Jim Jagielski [|] [EMAIL PROTECTED] [|] http://www.jaguNET.com/ A society that will trade a little liberty for a little order will lose both and deserve neither - T.Jefferson -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation part 2 the module version
On Sun, 23 Feb 2003, Jim Jagielski wrote: Rasmus Lerdorf wrote: Even in 4.2, I think we can optimize it. Assuming chdir() doesn't return an error, we shouldn't need that second getpwd() call since we just did the chdir() and we should know where we are. Not necessarily... In a threaded environment, if threadA does chdir(/tmp) and then threadB does chdir(/var), then the actual process is in /var for the remainder of threadA (IIRC). chdir() is process scoped. That's true, but in threaded mode we don't do the chdir() at all. This is specifically for non-threaded. -Rasmus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation part 2 the module version
Rasmus Lerdorf wrote: That's true, but in threaded mode we don't do the chdir() at all. This is specifically for non-threaded. Gotcha... didn't realize you were referring to non-t'ed only. -- === Jim Jagielski [|] [EMAIL PROTECTED] [|] http://www.jaguNET.com/ A society that will trade a little liberty for a little order will lose both and deserve neither - T.Jefferson -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
Rasmus Lerdorf wrote: So, I am just starting out down the path to figure out why PHP 4.3 has gotten so much slower than 4.2. strace -c provides the first clue. A straight ./configure --enable-inline-optimization make command-line build for 4.2, 4.3 and 5.0 run on a simple hello world script reveals that we have gone from 219 system calls in 4.2 to 233 in 4.3 to 236 in 5.0. This is a bad trend and we really need to make an effort to reverse this. 4.2 Hello World from command-line: CGI, right? Part of this may be from the path_info handling I've added. There is a stat call in there to determine if the path provided by the webserver includes path_info also, if it does have path_info (stat failed), it walks up the path doing a stat to determine the script filename and path_info correctly. the ini setting cgi.fix_pathinfo turns this on or off. It also uses a handfull putenv and getenv calls in straightening things out. I'm sure this adds some of that, but I don't think it would add as much an increase as you are seeing, unless you're using some long path_info paths. Shane -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
On Sun, 23 Feb 2003, Shane Caraveo wrote: Rasmus Lerdorf wrote: So, I am just starting out down the path to figure out why PHP 4.3 has gotten so much slower than 4.2. strace -c provides the first clue. A straight ./configure --enable-inline-optimization make command-line build for 4.2, 4.3 and 5.0 run on a simple hello world script reveals that we have gone from 219 system calls in 4.2 to 233 in 4.3 to 236 in 5.0. This is a bad trend and we really need to make an effort to reverse this. 4.2 Hello World from command-line: CGI, right? Part of this may be from the path_info handling I've added. There is a stat call in there to determine if the path provided by the webserver includes path_info also, if it does have path_info (stat failed), it walks up the path doing a stat to determine the script filename and path_info correctly. the ini setting cgi.fix_pathinfo turns this on or off. It also uses a handfull putenv and getenv calls in straightening things out. I'm sure this adds some of that, but I don't think it would add as much an increase as you are seeing, unless you're using some long path_info paths. The extra realpath() and fstat() calls are not cgi specific, so if what you added only affects cgi, then that isn't the big problem. -Rasmus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation
Rasmus Lerdorf wrote: On Sun, 23 Feb 2003, Shane Caraveo wrote: CGI, right? Part of this may be from the path_info handling I've added. The extra realpath() and fstat() calls are not cgi specific, so if what you added only affects cgi, then that isn't the big problem. -Rasmus ok, it's only in CGI. Shane -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] Sablotron XSLT
Who is working on the sablotron xslt module? I would like to help out with its development. Thanks, Ray Hunter -- Ray Hunter email: [EMAIL PROTECTED] www:http://venticon.com -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] extra realpath() found
Hey Sander, you fixed a problem back in July where you introduced a second realpath() call into the main execute_script() function. I understand what you were trying to achieve, but realpath() is way way too expensive to toss around like that, especially since we already do the realpath on the fopen of the script file. The bug in question was http://bugs.php.net/17720 and your fix was http://cvs.php.net/diff.php/php4/main/main.c?login=2r1=1.461r2=1.462ty=u php_fopen_primary_script() calls expand_filepath() which does the realpath before we get to execute_script. Why not add the path to the included_files list at that point instead? Let me know if you feel like playing with it, otherwise I will. -Rasmus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation part 2 the module version
This double seeking is most probably due to the fact that the stdio layer does one set of seeking, whereas streams needs to do another. This can be solved by moving away from using stdio for streams, and just using the raw descriptors instead. (already made a start on this in PHP 5). I'm a little unsure if we should apply equivalent changes to the branch (given our release policy), but I share your concerns for performance. Ilia and I have discussed implementing some kind of fstat cache for use by the plain file streams. However, we are nowhere near implementing this, yet alone certifying it safe for inclusion in the branch. Have you been testing PHP_4_3 from CVS or the actual 4.3.0 release? You might find the situation slightly better using the latest (I tidied up some seek related issues the other day). --Wez. On Sun, 23 Feb 2003, Rasmus Lerdorf wrote: In 4.3 we have: _llseek(4, 0, [0], SEEK_CUR)= 0 0.09 lseek(4, 0, SEEK_SET) = 0 0.09 brk(0) = 0x81a8000 0.08 brk(0x81a9000) = 0x81a9000 0.11 ioctl(4, SNDCTL_TMR_TIMEBASE, 0xbfffd190) = -1 ENOTTY (Inappropriate ioctl for device) 0.09 brk(0) = 0x81a9000 0.07 brk(0x81aa000) = 0x81aa000 0.09 read(4, html\nbody\n?\n\techo \Hello Wo..., 8192) = 58 0.16 read(4, , 4096) = 0 0.08 read(4, , 8192) = 0 0.09 ioctl(4, SNDCTL_TMR_TIMEBASE, 0xbfffc150) = -1 ENOTTY (Inappropriate ioctl for device) 0.08 close(4)= 0 0.10 munmap(0x402ba000, 4096)= 0 0.14 I really don't understand the SEEK_CUR there. We're seeking forward 0 bytes from the current location followed directly by a SEEK_SET back to 0? Is this streams overhead or something? Wez? From there on the requests are similar. The alarm(0) calls right after alarm(300) could probably be skipped in both cases. Anyway, I will go after all these extra lstat/fstat calls and fix that, but I would appreciate some help with the setitimer() and weird seeking stuff. -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Performance degradation part 2 the module version
Have you been testing PHP_4_3 from CVS or the actual 4.3.0 release? You might find the situation slightly better using the latest (I tidied up some seek related issues the other day). The straces are from PHP_4_3 HEAD as of this morning. I thought originally that these issues were just a hassle for me at Yahoo! where performance is super-critical and that the average PHP user wouldn't really care. But I am seeing normal users switching back to 4.2 from 4.3 now because of these issues. We can probably live with the seek overhead if I can get rid of the rest. If I can eliminate that one getcwd() call that was also in 4.2, perhaps we can get back to being on par. -Rasmus -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] [PATCH] include file when using open_basedir
Hi !! Including or openeing a file fails when all paths defined in include_path are not also defined in open_basedir, regardless if the file to open/include is in both definitions. Imagine include_path = .:/usr/local/lib/php:/usr/local/http-docs open_basedir = .:/usr/local/http-docs trying to include a file on /usr/local/http-docs will fail when _php_stream_fopen_with_path will try to locate the file at usr/local/lib/php . This could be undestand as a configuration error, but in a virtual server farm enviroment it's easy to have include_path defined globaly in php.ini and open_basedir defined for each virtual server. BTW, it's not too good to fail in this situation as the requested file meets all requirements. Also the given error will report 'unable to open /usr/local/lib/php/filename' due to open_basedir restrictions, where the real requested file is /usr/local/http-docs/filename -- Best regards ... I was arrested for selling illegal sized paper. David Saez Padroshttp://www.ols.es On-Line Services 2000 S.L. e-mail [EMAIL PROTECTED] Pintor Vayreda 1 telf+34 902 50 29 75 08184 Palau-Solita i Plegamans movil +34 670 35 27 53 *** streams.c Sun Feb 23 21:32:40 2003 --- streams.c Sun Feb 23 21:34:40 2003 *** *** 1741,1746 --- 1741,1752 end++; } snprintf(trypath, MAXPATHLEN, %s/%s, ptr, filename); + + /* If file does not exist continue */ + if (VCWD_STAT(trypath, sb) == 0) { + ptr = end; + continue; + } if (php_check_open_basedir(trypath TSRMLS_CC)) { stream = NULL; *** *** 1748,1764 } if (PG(safe_mode)) { ! if (VCWD_STAT(trypath, sb) == 0) { ! /* file exists ... check permission */ ! if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) || ! php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM)) { ! /* UID ok, or trypath is in safe_mode_include_dir */ ! stream = php_stream_fopen_rel(trypath, mode, opened_path, options); ! } else { ! stream = NULL; ! } ! goto stream_done; } } stream = php_stream_fopen_rel(trypath, mode, opened_path, options); if (stream) { --- 1754,1768 } if (PG(safe_mode)) { ! /* file exists ... check permission */ ! if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) || ! php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM)) { ! /* UID ok, or trypath is in safe_mode_include_dir */ ! stream = php_stream_fopen_rel(trypath, mode, opened_path, options); ! } else { ! stream = NULL; } + goto stream_done; } stream = php_stream_fopen_rel(trypath, mode, opened_path, options); if (stream) { -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] [PATCH] warning does not report correct open_basedir
Hi !! open_basedir warning in fopen_wrappers.c does not correctly report the real open_basedir paths, it only reports the path it was actually testing when the test failed. This patch will make it show the correct information. -- Best regards ... I was arrested for selling illegal sized paper. David Saez Padroshttp://www.ols.es On-Line Services 2000 S.L. e-mail [EMAIL PROTECTED] Pintor Vayreda 1 telf+34 902 50 29 75 08184 Palau-Solita i Plegamans movil +34 670 35 27 53 *** fopen_wrappers.cSun Feb 23 21:13:08 2003 --- fopen_wrappers.cSun Feb 23 21:13:40 2003 *** *** 192,198 ptr = end; } php_error_docref(NULL TSRMLS_CC, E_WARNING, ! open_basedir restriction in effect. File(%s) is not within the allowed path(s): (%s), path, pathbuf); efree(pathbuf); errno = EPERM; /* we deny permission to open it */ return -1; --- 192,198 ptr = end; } php_error_docref(NULL TSRMLS_CC, E_WARNING, ! open_basedir restriction in effect. File(%s) is not within the allowed path(s): (%s), path, PG(open_basedir)); efree(pathbuf); errno = EPERM; /* we deny permission to open it */ return -1; -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] [PATCH] include file when using open_basedir
Hi !! Correction to last submited patch !! Including or openeing a file fails when all paths defined in include_path are not also defined in open_basedir, regardless if the file to open/include is in both definitions. Imagine include_path = .:/usr/local/lib/php:/usr/local/http-docs open_basedir = .:/usr/local/http-docs trying to include a file on /usr/local/http-docs will fail when _php_stream_fopen_with_path will try to locate the file at usr/local/lib/php . This could be undestand as a configuration error, but in a virtual server farm enviroment it's easy to have include_path defined globaly in php.ini and open_basedir defined for each virtual server. BTW, it's not too good to fail in this situation as the requested file meets all requirements. Also the given error will report 'unable to open /usr/local/lib/php/filename' due to open_basedir restrictions, where the real requested file is /usr/local/http-docs/filename -- Best regards ... I was arrested for selling illegal sized paper. David Saez Padroshttp://www.ols.es On-Line Services 2000 S.L. e-mail [EMAIL PROTECTED] Pintor Vayreda 1 telf+34 902 50 29 75 08184 Palau-Solita i Plegamans movil +34 670 35 27 53 *** streams.c Sun Feb 23 21:32:40 2003 --- streams.c Sun Feb 23 21:34:40 2003 *** *** 1741,1746 --- 1741,1752 end++; } snprintf(trypath, MAXPATHLEN, %s/%s, ptr, filename); + + /* If file does not exist continue */ + if (VCWD_STAT(trypath, sb) != 0) { + ptr = end; + continue; + } if (php_check_open_basedir(trypath TSRMLS_CC)) { stream = NULL; *** *** 1748,1764 } if (PG(safe_mode)) { ! if (VCWD_STAT(trypath, sb) == 0) { ! /* file exists ... check permission */ ! if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) || ! php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM)) { ! /* UID ok, or trypath is in safe_mode_include_dir */ ! stream = php_stream_fopen_rel(trypath, mode, opened_path, options); ! } else { ! stream = NULL; ! } ! goto stream_done; } } stream = php_stream_fopen_rel(trypath, mode, opened_path, options); if (stream) { --- 1754,1768 } if (PG(safe_mode)) { ! /* file exists ... check permission */ ! if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC) == 0) || ! php_checkuid(trypath, mode, CHECKUID_CHECK_MODE_PARAM)) { ! /* UID ok, or trypath is in safe_mode_include_dir */ ! stream = php_stream_fopen_rel(trypath, mode, opened_path, options); ! } else { ! stream = NULL; } + goto stream_done; } stream = php_stream_fopen_rel(trypath, mode, opened_path, options); if (stream) { -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [PATCH] imagesavealpha()
Hello, The 1st patch will be applied, the 2nd is better but increase again the difference between the official GD and the bundled GD. Our plan is to keep our energy on the new gd and provides only bugfixes in the current 4.3 releases, that makes our life really easier. thank's for your contribution, pierre -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [patch] solaris getcwd() brokeness
Hi Andi (and James) Andi: I'd appreciate your comments on this patch, specifically if there are any concerns about it doing the right thing. Most people here: http://bugs.php.net/bug.php?id=21310edit=1 report that it fixes their problems with solaris. I've held off from looking at this, as I didn't want to duplicate any effort you have been making. --Wez. On Sun, 16 Feb 2003, Andi Gutmans wrote: At 03:41 PM 2/13/2003 -0500, James E. Flemer wrote: RCS file: /repository/TSRM/tsrm_virtual_cwd.c,v retrieving revision 1.41 diff -u -b -r1.41 tsrm_virtual_cwd.c --- TSRM/tsrm_virtual_cwd.c 6 Nov 2002 18:07:22 - 1.41 +++ TSRM/tsrm_virtual_cwd.c 13 Feb 2003 20:40:07 - @@ -303,7 +303,7 @@ return (0); #if !defined(TSRM_WIN32) !defined(NETWARE) - if (IS_ABSOLUTE_PATH(path, path_length)) { + if (IS_ABSOLUTE_PATH(path, path_length) || (state-cwd_length 1)) { if (use_realpath realpath(path, resolved_path)) { path = resolved_path; path_length = strlen(path); Will realpath() work in cases where getcwd() didn't work? (btw it's nicer to check state-cwd_length == 0 than 1 IMO). @@ -363,6 +363,7 @@ } + if (state-cwd_length 0 || IS_ABSOLUTE_PATH(path, path_length)) { ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, tok); while (ptr) { ptr_length = strlen(ptr); @@ -416,6 +417,11 @@ state-cwd[state-cwd_length+1] = '\0'; state-cwd_length++; } + } else { + state-cwd = (char *) realloc(state-cwd, path_length+1); + memcpy(state-cwd, path, path_length+1); + state-cwd_length = path_length; + } I'm trying to think if there's some other way of doing this. What is the main problem in this loop? Does it add / or c:\ in the beginning of the string? Andi -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [patch] solaris getcwd() brokeness
Oh good, it hasn't been forgotten. I just want to point out that if committed the open() statement should probably use O_RDONLY. [main.c @ ~1542] I used 0 because I didn't have time to figure out where to add the correct #include to get O_RDONLY into main.c. -James On Sun, 23 Feb 2003, Wez Furlong wrote: Hi Andi (and James) Andi: I'd appreciate your comments on this patch, specifically if there are any concerns about it doing the right thing. Most people here: http://bugs.php.net/bug.php?id=21310edit=1 report that it fixes their problems with solaris. I've held off from looking at this, as I didn't want to duplicate any effort you have been making. --Wez. On Sun, 16 Feb 2003, Andi Gutmans wrote: At 03:41 PM 2/13/2003 -0500, James E. Flemer wrote: RCS file: /repository/TSRM/tsrm_virtual_cwd.c,v retrieving revision 1.41 diff -u -b -r1.41 tsrm_virtual_cwd.c --- TSRM/tsrm_virtual_cwd.c 6 Nov 2002 18:07:22 - 1.41 +++ TSRM/tsrm_virtual_cwd.c 13 Feb 2003 20:40:07 - @@ -303,7 +303,7 @@ return (0); #if !defined(TSRM_WIN32) !defined(NETWARE) - if (IS_ABSOLUTE_PATH(path, path_length)) { + if (IS_ABSOLUTE_PATH(path, path_length) || (state-cwd_length 1)) { if (use_realpath realpath(path, resolved_path)) { path = resolved_path; path_length = strlen(path); Will realpath() work in cases where getcwd() didn't work? (btw it's nicer to check state-cwd_length == 0 than 1 IMO). @@ -363,6 +363,7 @@ } + if (state-cwd_length 0 || IS_ABSOLUTE_PATH(path, path_length)) { ptr = tsrm_strtok_r(path_copy, TOKENIZER_STRING, tok); while (ptr) { ptr_length = strlen(ptr); @@ -416,6 +417,11 @@ state-cwd[state-cwd_length+1] = '\0'; state-cwd_length++; } + } else { + state-cwd = (char *) realloc(state-cwd, path_length+1); + memcpy(state-cwd, path, path_length+1); + state-cwd_length = path_length; + } I'm trying to think if there's some other way of doing this. What is the main problem in this loop? Does it add / or c:\ in the beginning of the string? Andi -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] Sablotron XSLT
On 23 Feb 2003, Ray Hunter wrote: RH Who is working on the sablotron xslt module? I would like to help out RH with its development. See the header in ext/xslt/sablot.c :) Currently, there's not much going on though - PHP-4.x tree is in feature-freeze, and XML support in PHP5 is under the microscope. -- With kind regards, Melvyn Sopacua ?php include(not_reflecting_employers_views.txt); ? -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] zend_eval_string
Hi, can i get only the errors of the script and not the html code who returned the zend_eval_string function? -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] [WARNING] Release process for 4.3.2 starts RSN..
To get this thing started, I'm going to roll PHP 4.3.2-pre1 on Wednesday, 26th Feb, around 3pm EEST. And I'll announce it on php-general too, to get some more people testing it before we start with any RCs. Following is collection of bugs marked as critical and verified which should be looked into and dealt with. If not fixed, then please, PLEASE add some comment why they won't ever be fixed and bogus the out. Critical: http://bugs.php.net/bug.php?id=20190edit=1 . Random mem corruption: zend_get_executed_filename() mismatch http://bugs.php.net/bug.php?id=21820edit=1 . bc break in parser: $arr[val] vs $arr['val'] http://bugs.php.net/bug.php?id=22372edit=1 . Don't forget to bump the PHP API number for 4.3.2 release Verified bugs (Scripting Engine related): http://bugs.php.net/bug.php?id=15209edit=1 . register_shutdown_function() broke between 4.0.x to 4.1.x - Zeev: Either close as bogus saying it's intended behaviour or finally get around and FIX IT. ([EMAIL PROTECTED] has a patch?) http://bugs.php.net/bug.php?id=21513edit=1 . shutdown functions not executed if timed out [win32 only] http://bugs.php.net/bug.php?id=15438edit=1 . include_once fails when comparing output to a value http://bugs.php.net/bug.php?id=17997edit=1 . got wanning when combing switch reference http://bugs.php.net/bug.php?id=20548edit=1 . Decrement ($x[$y]--) doesn't work on uninitiated variable http://bugs.php.net/bug.php?id=21478edit=1 . Zend/zend_alloc.c :: shutdown_memory_manager produces segfault http://bugs.php.net/bug.php?id=22367edit=1 . undefined variable has a value . RFC: Just bogus with Don't do this. ? http://bugs.php.net/bug.php?id=21918edit=1 . strange behaviour of mixed type in array-keys . See #21788 http://bugs.php.net/bug.php?id=21788edit=1 . array_multisort() changes array keys unexpectedly given numeric strings as keys . See #21918 Last two are related to each other, afaics, and need some discussion what we should do about it or if nothing. Also related to these is http://bugs.php.net/bug.php?id=8325. --Jani -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [WARNING] Release process for 4.3.2 starts RSN..
I wanted to run through all the cgi stuff in detail again for 432, but likely wont have the time by the 26th to do that. Shane Jani Taskinen wrote: To get this thing started, I'm going to roll PHP 4.3.2-pre1 on Wednesday, 26th Feb, around 3pm EEST. And I'll announce it on php-general too, to get some more people testing it before we start with any RCs. Following is collection of bugs marked as critical and verified which should be looked into and dealt with. If not fixed, then please, PLEASE add some comment why they won't ever be fixed and bogus the out. Critical: http://bugs.php.net/bug.php?id=20190edit=1 . Random mem corruption: zend_get_executed_filename() mismatch http://bugs.php.net/bug.php?id=21820edit=1 . bc break in parser: $arr[val] vs $arr['val'] http://bugs.php.net/bug.php?id=22372edit=1 . Don't forget to bump the PHP API number for 4.3.2 release Verified bugs (Scripting Engine related): http://bugs.php.net/bug.php?id=15209edit=1 . register_shutdown_function() broke between 4.0.x to 4.1.x - Zeev: Either close as bogus saying it's intended behaviour or finally get around and FIX IT. ([EMAIL PROTECTED] has a patch?) http://bugs.php.net/bug.php?id=21513edit=1 . shutdown functions not executed if timed out [win32 only] http://bugs.php.net/bug.php?id=15438edit=1 . include_once fails when comparing output to a value http://bugs.php.net/bug.php?id=17997edit=1 . got wanning when combing switch reference http://bugs.php.net/bug.php?id=20548edit=1 . Decrement ($x[$y]--) doesn't work on uninitiated variable http://bugs.php.net/bug.php?id=21478edit=1 . Zend/zend_alloc.c :: shutdown_memory_manager produces segfault http://bugs.php.net/bug.php?id=22367edit=1 . undefined variable has a value . RFC: Just bogus with Don't do this. ? http://bugs.php.net/bug.php?id=21918edit=1 . strange behaviour of mixed type in array-keys . See #21788 http://bugs.php.net/bug.php?id=21788edit=1 . array_multisort() changes array keys unexpectedly given numeric strings as keys . See #21918 Last two are related to each other, afaics, and need some discussion what we should do about it or if nothing. Also related to these is http://bugs.php.net/bug.php?id=8325. --Jani -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DEV] [WARNING] Release process for 4.3.2 starts RSN..
It's just the date for pre1, no need to worry about that yet. :) (RC1 will be later) --Jani On Sun, 23 Feb 2003, Shane Caraveo wrote: I wanted to run through all the cgi stuff in detail again for 432, but likely wont have the time by the 26th to do that. Shane Jani Taskinen wrote: To get this thing started, I'm going to roll PHP 4.3.2-pre1 on Wednesday, 26th Feb, around 3pm EEST. And I'll announce it on php-general too, to get some more people testing it before we start with any RCs. Following is collection of bugs marked as critical and verified which should be looked into and dealt with. If not fixed, then please, PLEASE add some comment why they won't ever be fixed and bogus the out. Critical: http://bugs.php.net/bug.php?id=20190edit=1 . Random mem corruption: zend_get_executed_filename() mismatch http://bugs.php.net/bug.php?id=21820edit=1 . bc break in parser: $arr[val] vs $arr['val'] http://bugs.php.net/bug.php?id=22372edit=1 . Don't forget to bump the PHP API number for 4.3.2 release Verified bugs (Scripting Engine related): http://bugs.php.net/bug.php?id=15209edit=1 . register_shutdown_function() broke between 4.0.x to 4.1.x - Zeev: Either close as bogus saying it's intended behaviour or finally get around and FIX IT. ([EMAIL PROTECTED] has a patch?) http://bugs.php.net/bug.php?id=21513edit=1 . shutdown functions not executed if timed out [win32 only] http://bugs.php.net/bug.php?id=15438edit=1 . include_once fails when comparing output to a value http://bugs.php.net/bug.php?id=17997edit=1 . got wanning when combing switch reference http://bugs.php.net/bug.php?id=20548edit=1 . Decrement ($x[$y]--) doesn't work on uninitiated variable http://bugs.php.net/bug.php?id=21478edit=1 . Zend/zend_alloc.c :: shutdown_memory_manager produces segfault http://bugs.php.net/bug.php?id=22367edit=1 . undefined variable has a value . RFC: Just bogus with Don't do this. ? http://bugs.php.net/bug.php?id=21918edit=1 . strange behaviour of mixed type in array-keys . See #21788 http://bugs.php.net/bug.php?id=21788edit=1 . array_multisort() changes array keys unexpectedly given numeric strings as keys . See #21918 Last two are related to each other, afaics, and need some discussion what we should do about it or if nothing. Also related to these is http://bugs.php.net/bug.php?id=8325. --Jani -- - For Sale! - -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DEV] CVS Account Request: luisdaniel
Help translate documentation to portuguese (PORTUGAL) and mantain it (if you need). -- PHP Development Mailing List http://www.php.net/ To unsubscribe, visit: http://www.php.net/unsub.php