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