Czy istnieje sposób uzyskania dostępu do listy zarejestrowanych funkcji wyłączania?lista zarejestrowanych funkcji wyłączania systemu
5
A
Odpowiedz
9
Możesz napisać rozszerzenie i spojrzeć na BG(user_shutdown_function_names)
. Prawdopodobnie łatwiejsze jest utworzenie opakowania dla register_shutdown_function
, które zapisuje funkcje wyłączania do pewnej tablicy i wywołuje ją.
(Nietestowane)
#include "ext/standard/basic_functions.h"
//usual include suspects here
typedef struct _php_shutdown_function_entry {
zval **arguments;
int arg_count;
} php_shutdown_function_entry;
static void _shutdown_function_dtor(php_shutdown_function_entry *shutdown_function_entry) /* {{{ */
{
int i;
for (i = 0; i < shutdown_function_entry->arg_count; i++) {
zval_ptr_dtor(&shutdown_function_entry->arguments[i]);
}
efree(shutdown_function_entry->arguments);
}
static int _build_shutdown_array(php_shutdown_function_entry *entry, zval *arr TSRMLS_DC)
{
zval *inner;
zval *args;
int i;
array_init(inner);
array_init(args);
Z_ADDREF_P(entry->arguments[0]);
add_assoc_zval(inner, "callback", entry->arguments[0]);
for (i = 1; i < entry->arg_count; i++) {
Z_ADDREF_P(entry->arguments[i]);
add_next_index_zval(args, entry->arguments[i]);
}
add_assoc_zval(inner, "arguments", args);
add_next_index_zval(arr, inner);
}
PHP_FUNCTION(list_shutdown_functions)
{
if (zend_parse_parameters_none() == FAILURE)
return;
if (!BG(user_shutdown_function_names)) {
ALLOC_HASHTABLE(BG(user_shutdown_function_names));
zend_hash_init(BG(user_shutdown_function_names), 0, NULL,
(void (*)(void *)) _shutdown_function_dtor, 0);
}
array_init(return_value);
zend_hash_apply_with_argument(BG(user_shutdown_function_names),
(apply_func_arg_t) _build_shutdown_array, return_value TSRMLS_CC);
}
2
Poza utrzymywaniem ruchu samodzielnie, nie. Lista zarejestrowanych nazw funkcji nie jest narażona na działanie skryptów PHP. Jeśli jesteś otwarty na rozszerzanie samego PHP (byłoby to proste zadanie), zobacz odpowiedź Artefacto.
Powiązane problemy
- 1. Lista urządzeń zarejestrowanych na platformie Azure
- 2. Lista wszystkich typów zarejestrowanych w instancji kontenera Castle Windsor
- 3. Lista wszystkich zarejestrowanych plików w jednym zatwierdzeniu cvs
- 4. Lista funkcji cukru Rcpp?
- 5. Lista "magicznych" funkcji Scala
- 6. zatrzymać wszystkie podmioty w systemie bez wyłączania samego systemu?
- 7. Funkcja włączania i wyłączania funkcji Twig tag obejmuje:
- 8. Lista funkcji abstrakcyjnych i zmiennych
- 9. Sfinks: lista funkcji w module
- 10. Lista funkcji Lua w pliku
- 11. Python - lista krotek funkcji/argumentów
- 12. Jak przetwarzać żądania serwletów podczas długiego wyłączania
- 13. Wyświetlanie zarejestrowanych tras w Laravel
- 14. Maksymalna liczba procesów zarejestrowanych globalnie
- 15. Przycisk włączania/wyłączania ExtJS
- 16. Przycisk wyłączania w jQuery
- 17. Skąd mogę wiedzieć urządzeń zarejestrowanych w My GCM Application Cloud (Lista urządzeń)
- 18. Lista wszystkich plików zarejestrowanych w TFS przez użytkownika w ciągu ostatnich kilku dni.
- 19. lista dynamicznych funkcji i dynamiczne wywoływanie ich.
- 20. Efektywna lista dołączeń/przedkładania przez skład funkcji
- 21. Lista funkcji na głównej stronie z doxygenem
- 22. Lista wszystkich wywołań funkcji utworzonych w aplikacji
- 23. haXe: Przekazywanie lista arbitralnych argumentów funkcji
- 24. Lista wszystkich wbudowanych funkcji w javascript?
- 25. BroadcastReceiver do włączania/wyłączania ekranu
- 26. Android: przyciski włączania/wyłączania masy
- 27. Klucze wyłączania i włączania MySQL
- 28. sposób wyłączania przycisku DataTables/TableTools
- 29. Przycisk wyłączania po kliknięciu problemu
- 30. Jak wyświetlić zarejestrowanych użytkowników w serwerze kamailio?
wow, co za dogłębne odpowiedź. przez większość czasu PHP ma już funkcję na poziomie PHP, aby robić różne rzeczy, ale w tym przypadku tak się nie dzieje, a mimo to wciąż masz rozwiązanie! –