Newsgroup: it.comp.www.php
Titolo: Php crasha scrivendo molti dati su un socket?

Apro una connessione socket con fsockopen verso un mailserver. Se cerco 
di spedire email un po' pesanti, 2 mega, quindi se cerco di scrivere su 
questo socket questi dati, l'esecuzione della pagina php si arresta di 
colpo, in pratica php crasha di brutto.
Vi risulta una cosa del genere?
Configurazione linux centos, apache e php all'ultimo aggiornamento.
Bo.

IlPoetastro wrote:

beh, se conti che deve spedire una mail cosě grande č ovvio che il sistema
rimanga "appeso" e aspetti che la connessione sia chiusa. no?
sei sicuro che sia un crash  o non un semplice timeout?
-- 
non stare in buco

 sei sicuro che sia un crash  o non un semplice timeout?
L'elaborazione della pagina si arresta immediatamente e l'output al 
browser si interrompe. Non c'è nessuna attesa. E' sicuramente un crash.

 browser si interrompe. Non c'č nessuna attesa. E' sicuramente un crash.
e l'errore cosa ti dice?
metti in cima alla pagina error_reporting(E_ALL);
e vedi cos'č che si lamenta cosě.
ciao


browser si interrompe. Non c'è nessuna attesa. E' sicuramente un crash.
Sembra un timeout... che output fai dare alla pagina? Limiti di memoria (in 
genere 8 mb)? error reporting? Hai impostato un set_time_limit(0)?
ciao,
Luca(riello) 

 e l'errore cosa ti dice?
Se restituisse un errore non sarebbe un crash di php ma solo un errore 
del codice php.
Ho trovato la riga esatta che genera il crash, eccola qua.
$testo = str_replace("\r\n.\r\n","\r\n. \r\n",$testo);
Non è la prima volta che trovo bug in php e non è la prima volta che ad 
essere buggata risulta proprio essere la funzione str_replace.
Va be' adesso cerco di inventarmi qualcosa per aggirare il bug.
Mah.

$testo = str_replace("\r\n.\r\n","\r\n. \r\n",$testo);
Se ricordo bene, lo standard e'
$testo	= str_replace("\r\n.\r\n", "\r\n..\r\n", $testo);
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

 essere 
a me non crasha.
<?php
$testo = "\r\n.\r\nsdfsdf";
$testo = str_replace("\r\n.\r\n","\r\n. \r\n",$testo);
print($testo);
?>


 Se ricordo bene, lo standard e'
Non sapevo ci fosse uno standard e così simile al mio replace, io c'ero 
arrivato a logica, ti ringrazio.

 a me non crasha.
Si parlava di stringhe di testo sopra i 2 mega.
E magari stringhe che possono contenete una porzione della stringa per 
cui viene fatto il replace come "ABC\r\nDEF" o "ABC\r\n.DEF".
E' chiaro che a far crashare php non è la stringa in sè "\r\n" che è una 
stringa come tutte le altre ma la lunghezza della stringa da controllare 
(sopra i 2 mega dicevo) e la presenza della stringa per cui fare il 
replace o una sua porzione nella stringa da controllare.

IlPoetastro wrote:

ok, allora prova a postare il bug su 
php.net
 e vedi se altri utenti hanno
avuto questo problema.
ciao


arrivato a logica, ti ringrazio.
Ah, una cosa che m'e' venuta in mente: quando fai
$testo = str_replace(..., $testo);
in realta' PHP fa temporaneamente due copie della stringa. Quindi ci sta
che tu vada in "out of memory".
Prova a vedere se crasha anche soltanto facendo
$testo2 = $testo;
...tante volte.
Prova a ripulire la memoria facendo un unset() della roba che non serve,
se non puoi aumentare la massima dimensione di uno script in memoria.


 browser si interrompe. Non c'è nessuna attesa. E' sicuramente un crash.
Se va in timeout o out of memory (tranne strane configurazioni) l'errore 
viene riportato nel log di apache.
	Francesco

 che tu vada in "out of memory".
Php quando termina la memoria assegnata alla pagina ritorna comunque 
sempre un errore a video. Per cui non mi aspetto che sia lo stesso 
problema.
Poi come dicevo avevo già trovato bug sulla funzione str_replace quando 
la nuova stringa è più lunga della stringa da sostituire e contiene 
caratteri presenti anche nella stringa da sostituire. Forse qualche 
forma di loop infinito nella sostituzione e/o qualche errore nel 
puntamento del testo controllato quando questo si allunga a causa della 
sostituzione di una stringa lunga x con una stringa lunga y dove y > x.

 problema.
Puoi provare duplicando l'array: se è un problema di memoria, il 
problema si presenta.
Hai verificato la versione di php installata ed eventuali aggiornamenti?
E se la variabile contiene meno dati (p.e. 200k) cosa succede?
	Francesco

sostituzione di una stringa lunga x con una stringa lunga y dove y > x.
Mah... puo' essere. Prima pero' farei la prova $testo2 = $testo, che fino
a prova contraria l'operatore di assegnazione e' bug-free :-)
