PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Cronjob limit


Erna_Huppelberg
05.11.2006, 12:42:06
Hallo !!

Ich habe beim ausführen einer Crond.php probleme mit dem limit. Zwar hat mir der Provider schon ein imit von 25 MB zugesichert leider kommt immer noch die fehlermeldung :

Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 120 bytes) in /var/www/web10/html/kolotool/crond.php on line 56

Nun meine Frage : Kann mann die datei in 2 Teile splitten ??

Wäre nett wenn mir dabei einer helfn kann !

hier mal der link zum ausführen : http://kolotool.ernahuppelberg.hw-server3.de/crond.php


Hier mal die crond.php :


<?php
include("db_vars.php");
opendatabase();

$datekey = date("ymd");

$sqldatum = mysql_query("SELECT `value` FROM `configs` where `name` = 'update';");
$datum = mysql_fetch_assoc($sqldatum);
$datumeintrag = $datum[value];


echo "<b>Bitte das Update komplett durchlaufen lassen, bis unten OK erscheint.</b><br /><br />";

$userdata = file("http://www.piratenkriege.de/user/user_5.txt",0);
foreach ($userdata as $work) {
$workexpl = explode(",",$work);
$users[$workexpl[0]]['uid'] = $workexpl[0];
$users[$workexpl[0]]['name'] = urldecode($workexpl[1]);
$users[$workexpl[0]]['volk'] = $workexpl[2];
$users[$workexpl[0]]['allyid'] = $workexpl[3];
$users[$workexpl[0]]['punkte'] = $workexpl[4];
}
$allydata = file("http://www.piratenkriege.de/user/allianzen_5.txt",0);
foreach ($allydata as $work) {
$workexpl = explode(",",$work);
$ally[$workexpl[0]]['allyid'] = $workexpl[0];
$ally[$workexpl[0]]['allykurz'] = urldecode($workexpl[1]);
$ally[$workexpl[0]]['allyname'] = urldecode($workexpl[2]);
}

$isledata = file("http://www.piratenkriege.de/user/kolonie_5.txt",0);
foreach ($isledata as $key=>$work) {
$workexpl = explode(",",$work);
$isle[$key]['ozean'] = $workexpl[0];
$isle[$key]['gruppe'] = $workexpl[1];
$isle[$key]['position'] = $workexpl[2];
$isle[$key]['islename'] = urldecode($workexpl[3]);
$isle[$key]['besitzeruid'] = $workexpl[4];
$isle[$key]['islepunkte'] = $workexpl[5];

// Ab in die DB
$res = mysql_query("SELECT * FROM inselnneu WHERE ozean = '".$isle[$key]['ozean']."' AND gruppe = '".$isle[$key]['gruppe']."' AND position = '".$isle[$key]['position']."'");
// Falls insel noch nicht existent
if(mysql_num_rows($res) == 0 ) {


$isle[$key]['ozean'] = mysql_real_escape_string($isle[$key]['ozean']);
$isle[$key]['gruppe'] = mysql_real_escape_string($isle[$key]['gruppe']);
$isle[$key]['position'] = mysql_real_escape_string($isle[$key]['position']);
$isle[$key]['islename'] = mysql_real_escape_string($isle[$key]['islename']);
$isle[$key]['islepunkte'] = mysql_real_escape_string($isle[$key]['islepunkte']);
$users[$isle[$key]['besitzeruid']]['name'] = mysql_real_escape_string($users[$isle[$key]['besitzeruid']]['name']);
$ally[$users[$isle[$key]['besitzeruid']]['allyid']]['allykurz'] = mysql_real_escape_string($ally[$users[$isle[$key]['besitzeruid']]['allyid']]['allykurz']);


$insert = "INSERT INTO inselnneu (`id`,`key`,`ozean`,`gruppe`,`position`,`name`,`besitzer`,`punkte`,`al ly`)

VALUES ('','$datekey','".$isle[$key]['ozean']."','".$isle[$key]['gruppe']."','".$isle[$key]['position']."','".$isle[$key]
['islename']."','".$users[$isle[$key]['besitzeruid']]['name']."','".$isle[$key]['islepunkte']."','".$ally[$users[$isle
[$key]['besitzeruid']]['allyid']]['allykurz']."')";

mysql_query($insert);

echo "Creating ".$isle[$key]['islename'] ."<br>";

} else {

$isle[$key]['ozean'] = mysql_real_escape_string($isle[$key]['ozean']);
$isle[$key]['gruppe'] = mysql_real_escape_string($isle[$key]['gruppe']);
$isle[$key]['position'] = mysql_real_escape_string($isle[$key]['position']);
$isle[$key]['islename'] = mysql_real_escape_string($isle[$key]['islename']);
$isle[$key]['islepunkte'] = mysql_real_escape_string($isle[$key]['islepunkte']);
$users[$isle[$key]['besitzeruid']]['name'] = mysql_real_escape_string($users[$isle[$key]['besitzeruid']]['name']);
$ally[$users[$isle[$key]['besitzeruid']]['allyid']]['allykurz'] = mysql_real_escape_string($ally[$users[$isle[$key]['besitzeruid']]['allyid']]['allykurz']);


$update = "UPDATE inselnneu SET `key` = ".$datekey.", punkte4 = punkte3, punkte3 = punkte2, punkte2 = punkte,"."name = '".$isle[$key]['islename']."' , besitzer = '".$users[$isle[$key]['besitzeruid']]['name']."', punkte = '".$isle[$key]['islepunkte']."', ally = '".$ally[$users[$isle[$key]['besitzeruid']]['allyid']]['allykurz']."'"." WHERE ozean = '".$isle[$key]['ozean']."' AND gruppe = '".$isle[$key]['gruppe']."' AND position = '".$isle[$key]['position']."'";

mysql_query($update);

echo "Updating ".$isle[$key]['islename']."<br>";
}
usleep (100);

}

$time=date("d.m.y");
mysql_query("UPDATE configs SET value = 'Stand: ".$time."' WHERE ally ='update'");
mysql_query("UPDATE users SET `mapviews` = '0' WHERE 1");
mysql_query("DELETE FROM inselnneu WHERE `key` != '".$datekey."'");


echo "OK, Fertig ;).";


closedatabase();
?>



Vielen dank für eure Hilfe

mfg
Erna_Huppelberg

meikel (†)
05.11.2006, 14:39:40
Nun meine Frage : Kann mann die datei in 2 Teile splitten?
Lies den Kram zeilenweise, verwende fopen() + fgetcsv() und erledige in der Schleife ebenfalls das INSERT oder UPDATE.

Beachte zusätzlich noch folgendes:
cron ist ein Dienst, bei dem keiner zuguckt. Irgend welche Echos sind da komplett für die Katz...

Wird das Script direkt von cron aufgerufen, dann darf das Script überhaupt keinen Content von sich geben, weil cron alle Ausgaben dem root per email schickt -
es könnten ja Fehlermeldungen sein. Und Herr Root freut sich sicher ganz und gar nicht, wenn er 1440 Emails von wwwrun@localhost bekommt, in dem Deine
Echos drinstehen.

Nur wenn cron einen URL via wget aufruft, muß etwas content, da reicht ein echo 'OK' aus, produziert werden, weil sonst wget Fehlermeldungen produziert, die dann cron dem root schickt...

btw: kürz mal die Zeilenlänge in Deinem Beitrag. Horizontal scrollen, ist out.