start session_start interpreta ejemplos ejemplo ejecuta php apache memory

interpreta - session_start php ejemplos



PHP sin memoria: ¿se bloquea Apache? (5)

¿No estás usando la recursión? He visto PHP salirse y matar al hijo de Apache sin ningún resultado de registro útil cuando se produce una recursión infinita.

Estoy ejecutando PHP versión 5.3.0 y Apache: 2.2.11

Cuando ejecuto scripts PHP que consumen mucha memoria (creo): bucles grandes, etc. Mi servidor web Apache informa un bloqueo?

[Sat Jan 02 00:51:30 2010] [notice] Parent: child process exited with status 255 -- Restarting.

¿Debo aumentar la memoria en alguna parte? Actualmente tengo memoria configurada para

memory_limit = 512M

PHP no se ha quejado de esto, así que estoy pensando que es otra cosa.

Gracias a todos

Actualizar

Este error ha sido registrado por mi máquina de Windows en el visor de eventos:

Aplicación de error httpd.exe, versión 2.2.11.0, marca de tiempo 0x493f5d44, módulo de fallas php5ts.dll, versión 5.3.0.0, marca de tiempo 0x4a4922e7, código de excepción 0xc0000005, error de corrección 0x00083655, id. De proceso 0x1588, tiempo de inicio de la aplicación 0x01ca8b46e4925f90.

Actualización 2

Script en cuestión. He eliminado la URL.

<?php error_reporting(E_ALL); set_time_limit(300000); echo ''start<br>''; include_once(''simple_html_dom.php''); $FileHandle = fopen(''tech-statistics3.csv'', ''a+'') or die("can''t open file"); for($i =1; $i < 101; $i ++){ // Create DOM from URL $html = file_get_html("http://www.x.com/$i"); foreach($html->find(''div[class=excerpt]'') as $article) { $item0 = $article->children(1)->children(1)->children[0]->plaintext; $item1 = $article->children(1)->children(1)->children[0]->plaintext; $item2 = $article->children(1)->children(0)->children(0)->children(0)->plaintext; //$item3 = $article->children(1)->children(0)->children(0)->children[1]->children(0)->next_sibling(); $stringa = trim($item0).",".trim($item1).",".trim($item2)."/r/n"; fwrite($FileHandle, $stringa); echo $stringa.''<br>''; echo ''------------>''.$i; } } fclose($FileHandle); echo ''<b>End<br>''; ?>

Actualización 3

Estoy usando el analizador PHP DOM HTML simple y acabo de encontrar esto:

http://simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak

Creo que debería limpiar la memoria, de lo contrario, se bloqueará. Probando ahora.

Actualización4

Sí, ¡fue una pérdida de memoria! :)


Me he encontrado con problemas como estos usando PHP con Apache en Windows. En lugar de informar cualquier información útil a la pantalla, el proceso simplemente muere. Si es posible, te sugiero que ejecutes tu código en un cuadro de Linux con Apache y PHP. En mi experiencia, esa combinación generalmente informará esto como un error de memoria, mientras que en Windows, nada parece suceder en absoluto. Solo he visto esto suceder con recursividad por cierto.


Apache se bloqueaba debido a una pérdida de memoria causada por no cerrar un recurso que se estaba utilizando una y otra vez en un bucle for, así como por el script que hacía uso de la recursión.

Gracias por toda la ayuda.


Me encontré con esto hoy al analizar un montón de HTML en un bucle. Aquí está la solución simple:

$dom = file_get_html("http://www.x.com/$i"); ... // parse your DOM $dom->clear() // clear before next iteration

Simplemente llamando al método clear () en el objeto dom cuando terminé en cada iteración lo aclaró para mí.


Llegué un poco tarde a la fiesta, pero me he encontrado con el mismo problema con una falla de segmentación cuando utilizo el DOM HTML simple. Me estoy asegurando de estar usando $ html-> clear (); y unset ($ html); para borrar el HTML que he cargado, pero todavía recibía el error de falla de segmentación durante un gran roce de datos.

Descubrí que necesitaba comentar un código claro en el archivo simple_html_dom.php. Busque la función clear () dentro de la clase simple_html_dom_node, y comente todo dentro;

function clear() { // These were causing a segmentation fault... // $this->dom = null; // $this->nodes = null; // $this->parent = null; // $this->children = null; }