@@ -699,8 +699,11 @@ int phpdbg_open_sockets(char *address, int port[2], int (*listen)[2], int (*sock
699
699
int main (int argc , char * * argv ) /* {{{ */
700
700
{
701
701
sapi_module_struct * phpdbg = & phpdbg_sapi_module ;
702
+ char * sapi_name ;
702
703
char * ini_entries ;
703
704
int ini_entries_len ;
705
+ char * * zend_extensions = NULL ;
706
+ zend_ulong zend_extensions_len = 0L ;
704
707
zend_bool ini_ignore ;
705
708
char * ini_override ;
706
709
char * exec ;
@@ -717,7 +720,6 @@ int main(int argc, char **argv) /* {{{ */
717
720
zend_bool remote = 0 ;
718
721
int run = 0 ;
719
722
int step = 0 ;
720
- char * sapi_name ;
721
723
char * bp_tmp_file ;
722
724
#ifndef _WIN32
723
725
char * address ;
@@ -768,6 +770,8 @@ int main(int argc, char **argv) /* {{{ */
768
770
ini_entries_len = 0 ;
769
771
ini_ignore = 0 ;
770
772
ini_override = NULL ;
773
+ zend_extensions = NULL ;
774
+ zend_extensions_len = 0L ;
771
775
exec = NULL ;
772
776
exec_len = 0 ;
773
777
init_file = NULL ;
@@ -783,6 +787,7 @@ int main(int argc, char **argv) /* {{{ */
783
787
step = 0 ;
784
788
sapi_name = NULL ;
785
789
790
+
786
791
while ((opt = php_getopt (argc , argv , OPTIONS , & php_optarg , & php_optind , 0 , 2 )) != -1 ) {
787
792
switch (opt ) {
788
793
case 'r' :
@@ -826,8 +831,13 @@ int main(int argc, char **argv) /* {{{ */
826
831
ini_entries_len += len + sizeof ("=1\n\0" ) - 2 ;
827
832
}
828
833
} break ;
834
+
829
835
case 'z' :
830
- zend_load_extension (php_optarg );
836
+ zend_extensions_len ++ ;
837
+ if (zend_extensions ) {
838
+ zend_extensions = realloc (zend_extensions , sizeof (char * ) * zend_extensions_len );
839
+ } else zend_extensions = malloc (sizeof (char * ) * zend_extensions_len );
840
+ zend_extensions [zend_extensions_len - 1 ] = strdup (php_optarg );
831
841
break ;
832
842
833
843
/* begin phpdbg options */
@@ -950,12 +960,35 @@ int main(int argc, char **argv) /* {{{ */
950
960
memcpy (ini_entries , phpdbg_ini_hardcoded , sizeof (phpdbg_ini_hardcoded ));
951
961
}
952
962
ini_entries_len += sizeof (phpdbg_ini_hardcoded ) - 2 ;
963
+
964
+ if (zend_extensions_len ) {
965
+ zend_ulong zend_extension = 0L ;
966
+
967
+ while (zend_extension < zend_extensions_len ) {
968
+ const char * ze = zend_extensions [zend_extension ];
969
+ size_t ze_len = strlen (ze );
970
+
971
+ ini_entries = realloc (
972
+ ini_entries , ini_entries_len + (ze_len + (sizeof ("zend_extension=\n" ))));
973
+ memcpy (& ini_entries [ini_entries_len ], "zend_extension=" , (sizeof ("zend_extension=\n" )- 1 ));
974
+ ini_entries_len += (sizeof ("zend_extension=" )- 1 );
975
+ memcpy (& ini_entries [ini_entries_len ], ze , ze_len );
976
+ ini_entries_len += ze_len ;
977
+ memcpy (& ini_entries [ini_entries_len ], "\n" , (sizeof ("\n" ) - 1 ));
978
+
979
+ free (zend_extensions [zend_extension ]);
980
+ zend_extension ++ ;
981
+ }
982
+
983
+ free (zend_extensions );
984
+ }
953
985
954
986
phpdbg -> ini_entries = ini_entries ;
955
-
987
+
956
988
if (phpdbg -> startup (phpdbg ) == SUCCESS ) {
989
+
957
990
zend_activate (TSRMLS_C );
958
-
991
+
959
992
/* do not install sigint handlers for remote consoles */
960
993
/* sending SIGINT then provides a decent way of shutting down the server */
961
994
#ifdef ZEND_SIGNALS
0 commit comments