#21625 [Opn->Asn]: --with-config-file-scan-dir

From: Date: Fri, 24 Jan 2003 23:55:04 +0000
Subject: #21625 [Opn->Asn]: --with-config-file-scan-dir
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-31194@lists.php.net to get a copy of this message
ID: 21625 Updated by: iliaa@php.net Reported By: oden.eriksson@linux-mandrake.com -Status: Open +Status: Assigned Bug Type: PHP options/info functions Operating System: Mandrake Linux 9.0/Cooker PHP Version: 4.3.0 -Assigned To: +Assigned To: iliaa Previous Comments: ------------------------------------------------------------------------ [2003-01-14 00:44:11] derick@php.net oops, sorry ------------------------------------------------------------------------ [2003-01-14 00:43:27] derick@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php ------------------------------------------------------------------------ [2003-01-13 19:46:35] jmdault@mandrakesoft.com 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"))) { ------------------------------------------------------------------------ [2003-01-13 19:42:35] jmdault@mandrakesoft.com 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] sniper@php.net What do you mean with 'randomly listed' ? Listed in random order or only some files are listed..? ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/21625 -- Edit this bug report at http://bugs.php.net/?id=21625&edit=1

« previous php.bugs (#31194) next »