ID:               21625
 Comment by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
 Status:           Feedback
 Bug Type:         PHP options/info functions
 Operating System: Mandrake Linux 9.0/Cooker
 PHP Version:      4.3.0
 New Comment:

Is there a way to cleanly add a patch to bugs.php.net? 

I e-mailed it to sniper and oden, but anyways, here it is. Hope it's
readable...

--- php-4.3.0/main/php_ini.c.orig       2003-01-13 18:17:18.000000000
-0400
+++ php-4.3.0/main/php_ini.c    2003-01-13 19:03:23.000000000 -0400
@@ -30,6 +30,9 @@
 #include "zend_highlight.h"
 #include "SAPI.h"
 #include "php_main.h"
+#include <sys/types.h>
+#include <sys/dir.h>
+extern  int alphasort();
=20
 #ifndef S_ISREG
 #define S_ISREG(mode)   (((mode) & S_IFMT) =3D=3D S_IFREG)
@@ -232,6 +235,8 @@
        zend_file_handle fh;
        DIR *dirp =3D NULL;
        struct dirent *dir_entry;
+       struct dirent **inifiles;
+       int inicount,i;
        struct stat sb;
        char ini_file[MAXPATHLEN];
        char *p;
@@ -400,10 +405,11 @@
                dirp =3D VCWD_OPENDIR(PHP_CONFIG_FILE_SCAN_DIR);
                if (dirp) {
                        fh.type =3D ZEND_HANDLE_FP;
-                       while ((dir_entry =3D readdir(dirp)) !=3D NULL)
{
+                       inicount =3D scandir(PHP_CONFIG_FILE_SCAN_DIR,
&inifiles, NULL, alphaso=
rt);
+                       for(i=3D1;i<inicount+1;++i) {
                                /* check for a .ini extension */
-                               if ((p =3D
strrchr(dir_entry->d_name,'.')) && strcmp(p,".ini")) contin=
ue;
-                               snprintf(ini_file, MAXPATHLEN,
"%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEF=
AULT_SLASH, dir_entry->d_name);
+                               if ((p =3D
strrchr(inifiles[i-1]->d_name,'.')) && strcmp(p,".ini")) co=
ntinue;
+                               snprintf(ini_file, MAXPATHLEN,
"%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEF=
AULT_SLASH, inifiles[i-1]->d_name);
                                if (VCWD_STAT(ini_file, &sb) =3D=3D 0)
{
                                        if (S_ISREG(sb.st_mode)) {
                                                if ((fh.handle.fp =3D
VCWD_FOPEN(ini_file, "r"))) {


Previous Comments:
------------------------------------------------------------------------

[2003-01-13 19:42:35] [EMAIL PROTECTED]

php_ini.c uses readdir, which gives all the files on the directory,
*but
in the order of the filesystem*. ie, it's acting like "ls -U", instead
of just "ls".

The problem is that there is no way of knowing which file will be
loaded
first and which one will be loaded last, with causes problems with the
way Mandrake loads extensions, as we create ini files in the format
16_dba.ini ... 52_xslt.ini. Those files contain the "extention =3D"
directive, so that modules can be loaded in the right order.

For tricky extensions, like recode (who has to be loaded first), apc
and
pspell (who have to be loaded last), we need to be able to control the
load order of the ini files.

I enclose a small hack I made using scandir and alphasort. It should
work on BSD and Linux systems, maybe on other platforms, so we should
use ifdefines on platforms that do not support it.

Regards,

Jean-Michel Dault
MandrakeSoft Apache/PHP packager

------------------------------------------------------------------------

[2003-01-13 19:03:07] [EMAIL PROTECTED]

What do you mean with 'randomly listed' ?
Listed in random order or only some files are listed..?


------------------------------------------------------------------------

[2003-01-13 17:10:49] [EMAIL PROTECTED]

Hi.

This "--with-config-file-scan-dir=/etc/php" is wierd. When compiled as
in Mandrake Linux 9.0/Cooker the included files from /etc/php/ is
randomly listed when viewed in phpinfo(). Here's an example:

This phpinfo.html file was generated from a build from source:
http://d-srv.com/Cooker/PRE/phpinfo.html

This phpinfo.html file was generated from a RPM build as in/for
Mandrake Linux 9.0/Cooker: http://d-srv.com/Cooker/phpinfo.html

Also I noticed that php scans recursivly in this /etc/php/ directory
which is not very nice (or maybe it's per design?).

Chears.

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=21625&edit=1

Reply via email to