static int phpdbg_is_auto_global(char *name, int len) {
int ret;
zend_string *str = zend_string_init(name, len, 0);
ret = zend_is_auto_global(str);
zend_string_free(str);
return ret;
}
static PHP_RINIT_FUNCTION(phpdbg_webhelper)
{
if (strcmp(sapi_module.name, "fpm-fcgi")) {
return SUCCESS;
}
zval globals;
zval *server, *script, *root;
smart_str buf = {0}, path = {0};
php_stream *stream;
size_t numbytes = 0;
array_init(&globals);
phpdbg_is_auto_global(ZEND_STRL("GLOBALS"));
phpdbg_is_auto_global(ZEND_STRL("_ENV"));
phpdbg_is_auto_global(ZEND_STRL("_SERVER"));
phpdbg_is_auto_global(ZEND_STRL("_REQUEST"));
zend_hash_copy(Z_ARRVAL(globals), &EG(symbol_table), NULL);
Z_ARRVAL(globals)->pDestructor = NULL;
zend_hash_str_del(Z_ARRVAL(globals), ZEND_STRL("GLOBALS"));
if ((server = zend_hash_str_find(Z_ARRVAL(globals), ZEND_STRL("_SERVER"))) && Z_TYPE_P(server) == IS_ARRAY) {
if ((script = zend_hash_str_find(Z_ARRVAL_P(server), ZEND_STRL("SCRIPT_FILENAME"))) && Z_TYPE_P(script) == IS_STRING
&& (root = zend_hash_str_find(Z_ARRVAL_P(server), ZEND_STRL("DOCUMENT_ROOT"))) && Z_TYPE_P(root) == IS_STRING) {
smart_str_appends(&path, Z_STRVAL_P(root));
smart_str_appends(&path, "/.phpdbginit");
smart_str_0(&path);
stream = php_stream_open_wrapper(ZSTR_VAL(path.s), "cb", 0 | REPORT_ERRORS, NULL);
php_stream_truncate_set_size(stream, 0);
php_stream_write_string(stream, "exec ");
php_stream_write_string(stream, Z_STRVAL_P(script));
php_stream_write_string(stream, "nn<:n$globals = ");
php_var_export_ex(&globals, 1, &buf);
smart_str_0(&buf);
numbytes = php_stream_write(stream, ZSTR_VAL(buf.s), ZSTR_LEN(buf.s));
php_stream_write_string(stream, "; foreach ($globals as $key => $value) { $$key = $value; }n:>n");
php_stream_close(stream);
smart_str_free(&path);
smart_str_free(&buf);
}
}
return SUCCESS;
}
近期评论