texto strip_tags remove limpiar etiquetas ent_quotes ejemplo php segmentation-fault sigsegv

strip_tags - ¿Por qué esta función de PHP da un error de segmentación(SIGSEGV)?



strip_tags wordpress (4)

Escribí el siguiente código.

<?php function f(){ return f(); } f();

y obtener la salida

$ php test.php Segmentation fault

¿Por qué? No usé ningún puntero.

Esto es StackOverflow?


¿No es eso una recursión infinita? ¿Qué estás tratando de lograr?


Este es un caso de recursión infinita, pero esa no es específicamente la causa. Es un desbordamiento de pila . Cuando tiene recursividad, ya sea infinita o no, hay una cantidad máxima de profundidad que puede recurse (agregar a la pila) que se basa en el tamaño de su pila (en bytes).

Técnicamente esto es infinito, pero no obtendrás ningún error durante bastante tiempo:

<?php function f(){ sleep(1); return f(); } f();

Lo que necesita se conoce como un base case en su recursión para detenerlo antes de que consuma toda la pila.

<?php function f($i){ if($i == 10) return; echo $i; return f(++$i); } f(0);

Que imprimirá 0 a 9.

El error de segmentation fault proviene del sistema operativo e informa que la aplicación PHP ha encontrado un problema al agregar a la pila. Eso no llegará a su secuencia de comandos porque en el nivel del sistema, el binario que compone PHP ha fallado.


Esto viene específicamente de la extensión XDebug.

Ejecutando GDB, verá:

Program received signal SIGSEGV, Segmentation fault. 0x00007ffff41f7e48 in xdebug_add_stack_frame (zdata=Cannot access memory at address 0x7fffff5fefa8 ) at /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c:772 772 /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c: No such file or directory. in /build/buildd/xdebug-2.1.0/build-php5/xdebug_stack.c

Si XDebug está deshabilitado, se ejecutará hasta que se memory_limit el memory_limit . Si su memory_limit es demasiado alto, puede agotar la RAM y comenzar a intercambiar, congelar / bloquear su máquina.


La recursión infinita que ha configurado continúa agregando cuadros de pila hasta que se sobrepase la cantidad de memoria asignada a la pila de llamadas de proceso de PHP, en cuyo punto se obtiene un error de segmentación .