ugrás a tartalomhoz

PHP timeout

fledgling42 · 2011. Jan. 13. (Cs), 16.49
Sziasztok,

felmerült egy gondolat egy PHP kóddal kapcsolatban. A kód igen egyszerű, egy egyszerű feladatra. Annyit tesz, hogy e-mailt küld számos e-mail címre (kb. 600 db). A címeket egy txt-ből, a szöveget és tárgyat pedig egy HTML formból kapja. A kód szerintem elég egyértelmű, nem is szaporítom tovább a szót. A felmerülő kérdésem az, hogy kell-e ilyenkor olyan dolgokon gondolkozni, hogy script time-out?

Lévén, hogy nem függvény hívásokról van szó, hanem egy ciklusról, nem tudom, hogy egyáltalán felmerül-e ez a probléma (mert hogy maga a mail mindig csak egy levelet küld). Szerintetek? Előre is köszönöm!
<?php
if ( $fp = fopen("contacts.txt","r") ) // fájl megnyitása olvasásra
	{$temp = "";
	
		while (! feof ($fp))  // fájlból beolvasás, mail küldés ha elérjük a $ karaktert ez ismételve egészen a fájl végéig
		{
			$karakter = fgetc($fp);
			if ($karakter != "$") {
				$temp = $temp . $karakter;}
			else {  $subject = ($_GET[subject]);
					$message = $_GET[message];
					$headers  = 'MIME-Version: 1.0' . "\r\n";
					$headers .= 'Content-type: text/html; charset=ISO-8859-2' . "\r\n";
					$headers .= 'From: tkis62##kukac##gmail.com' . "\r\n" .
								'Reply-To: tkis62##kukac##gmail.com' . "\r\n" .
								'X-Mailer: PHP/' . phpversion();
					mail($temp, $subject, $message, $headers);
				  echo $temp;
				  echo "<br />";
				  $temp = "";
				  }
		}
	}
	else echo "Fájl hiba";
	fclose($fp);
?>
 
1

Igen

thgab · 2011. Jan. 13. (Cs), 17.16
Ha elég sok címzetted van.
2

jQuery-vel

vtsoftware · 2011. Jan. 13. (Cs), 20.35
A php első sorába:
ini_set("max_execution_time", _MÁSODPERCEK_);
Így megadhatod hogy hány másodperc legyen a fájl max. futási ideje.

A hírlevélküldést én úgy oldottam meg hogy egy oldalon elhelyeztem egy linket egy DIV-en belül.
Mikor ezt az oldalt megnyitom, a mailcímeket, az indexet és az levelekben levő változó adatokat session-ban tömbökbe tárolom el.

A linkre kattintáskor jQuery $.post-al megnyitom a mailküldőt - ami épp a 0 indexen áll (az indexet is session-ban tárolom) - és végiglépked a session-ban tárolt tömbön (az index alapján).

A mailküldés után az indexet növelem egyel, hogy a következő betöltésnél már a következő indexű adatok legyenek érvényesek.

A jQuery Post-ot úgy kell megírni hogy a betöltés után töltse újra a mailküldő fájlt. (http://api.jquery.com/jQuery.post)
Nekem bevált... így minden betöltés, egy levél, nincs timeout.
3

Cron

Thomas · 2011. Jan. 16. (V), 14.38
Logikusabb cron-ból meghívni a kiküldő scriptet, igy lehet időziteni és nem kell külön a böngészőben meghívni, addig a saját gépedet is futtatni. Percenként x darabot kiküld, szusszan egyet, ellenőrzi a szerverterhelést és folytatja.
4

Pontosan, mivel nem szolgálsz

gphilip · 2011. Jan. 18. (K), 23.18
Pontosan, mivel nem szolgálsz ki weboldalt, sokkal egyszerűbb lefuttatni a scriptedet egyszerűen a shellen:

/usr/local/bin/php /itt/van/a/scriptem/fuss.php param1 param2


Nyilván a PHP binary-d ott van ahol, és paraméterek sem feltétlen kellenek (ha vannak, az $argv globális változóból könnyedén kiolvashatod őket)

A time limitet meg ennyivel elintézed a script elején:

set_time_limit(0);
5

Sziasztok, köszönöm szépen a

fledgling42 · 2011. Jan. 22. (Szo), 22.15
Sziasztok, köszönöm szépen a sok választ, de ahogy a php referenciát nézegettem még korábban, a set_time_limit(0); nem csak ott működik, ahol ki van kapcsolva a safe mode? Vagy az általában ki van kapcsolva? Mert ha igen, akkor ez tűnik a legegyszerűbb megoldásnak - nomeg a parancssoros megoldás (arra akkor nem is kell limiteket állítani, mert parancssori scriptre nincs?). CRON nem nagyon érhető el alapból, meg nem is értek hozzá, a helyzet ua. a JQuery-vel is.