Script wird nach kurzer Zeit zum Download angeboten

Maniac

Erfahrenes Mitglied
Moin,

Ich weiß grad nicht weiter....

Wenn ich mein Script starte wird nach etwa 3-4 Minuten die Datei zum Download angeboten, also steigt mein Apache da aus.
In der php.ini ist "max_execution_time" auf 18000 (6 min) eingestellt.
Was für einstellmöglichkeiten gibt es denn noch, denn wie ich auf der Datenbank sehe werden die Querys weiterhin ausgeführt, obwohl das PHP-Script nicht mehr läuft...
 
18000 sind doch 5 Stunden?
Und Apache hat auch ein Timeout, Standard 5min.

Nur Downloaden lassen sollte er nichts...
Mime-Einstellungen?
 
18000 sind doch 5 Stunden?

Stimmt, weiß nicht wo ich grad meinen Kopf hatte :D


Und Apache hat auch ein Timeout, Standard 5min.

Wo finde ich diese Einstellung? Welche Auswirkungen können Veränderungen haben?

Mime-Einstellungen?

Inwiefern meinst du das? Es ist nur eine PHP-Datei welche einige Querys verarbeitet (~ 200.000)

Nur Downloaden lassen sollte er nichts...

Es poppt nach einer bestimmten Zeit ein Dialog auf wo ich gefragt werde ob ich die Datei speichern möchte oder nicht....
 
? Es ist wirklich das php-Script, das man dann herunterladen kann ? Böse..

Essentiell würde ich den Programmieransatz überdenken. Was hälst Du davon, das Script sich selbst rekursiv aufrufen zu lassen? Damit umgehst Du

(A) die lange Abarbeitungszeit eines Scripts
(B) fehlende Meldungen zum Scriptstand
(C) TimeOut-Probleme
(D) Abstürze?

Gib dem Script einfach per POST einen begrenzten Datenbereich (zB id 1-100) mit und laß nach Abarbeitung den nächsten Haufen mit einem Selbstaufruf bearbeiten ( zB id 101-200). Zusätzlich kannst Du noch per POST alle Infos mitschicken, die wichtig sein könnten.

mfg chmee
 
? Es ist wirklich das php-Script, das man dann herunterladen kann ? Böse..

Essentiell würde ich den Programmieransatz überdenken. Was hälst Du davon, das Script sich selbst rekursiv aufrufen zu lassen? Damit umgehst Du

(A) die lange Abarbeitungszeit eines Scripts
(B) fehlende Meldungen zum Scriptstand
(C) TimeOut-Probleme
(D) Abstürze?

Gib dem Script einfach per POST einen begrenzten Datenbereich (zB id 1-100) mit und laß nach Abarbeitung den nächsten Haufen mit einem Selbstaufruf bearbeiten ( zB id 101-200). Zusätzlich kannst Du noch per POST alle Infos mitschicken, die wichtig sein könnten.

mfg chmee

An das hab ich auch schon gedacht, nur kommt das erstmal nicht in Frage.

Es handelt sich um eine Zend-Framework-Applikation.
 

Naja, im Grunde hole ich nur Datensätze mit einem Mapper, geh sie in der Schleife durch und setze sie neu. Das sind halt über 200.000 Datensätze....

PHP:
public function updatepositionAction(){
    	$ModelPosition  = new Model_Position();
    	$MapperPosition = new Model_Mapper_Position();
    	
    	$entrysPosition = $MapperPosition->fetchAll();
    	
    	$output = array();
    	$counter = 0;
    	
    	foreach ($entrysPosition as $row){
    		
    		$output[$counter]['old']['ttime'] 	   = $row->getTtime();
    		$output[$counter]['old']['acceptdate'] = $row->getAcceptdate();
    		$output[$counter]['old']['id_account'] = $row->getId_account();
    		
    		$ttime = new Zend_Date($row->getTtime());
    		
    		if($row->getAcceptdate() != 0){
    			$acceptdate    = new Zend_Date($row->getAcceptdate());
    			$newAcceptDate = $acceptdate->add(5, Zend_Date::YEAR)->toValue(Zend_Date::TIMESTAMP);
    		}else{
    			$newAcceptDate = 0;
    		}
    		
    		$newTime = $ttime->add(5, Zend_Date::YEAR)->getTimestamp();
    		
    		
    		$output[$counter]['new']['ttime'] 	   = $newTime;
    		$output[$counter]['new']['acceptdate'] = $newAcceptDate;
    		$output[$counter]['new']['id_account'] = $row->getId_account();
    		
    		$newTimes = array(
    			'ttime' 	 => $newTime,
    			'acceptdate' => $newAcceptDate
    		);
    		
                $MapperPosition->find($row->getId(), $ModelPosition);
    		$ModelPosition->setOptions($newTimes);
    		$MapperPosition->save($ModelPosition);
    		
    		$counter++;
    	}
    	
    	$this->view->output = $output;   	
    }

Es wird genau nach 2 Minuten abgebrochen, die SQL-Querys laufen aber weiterhin.
 
Du machst das ewas umständlich, wenn ich den Code richtig deute. Zuerst holst du alle Datensätze raus, dann loopst du drüber und holst dann noch mal den jeweiligen Datensatz, um ihn abzudaten. Hast du mal Vergleiche gemacht, wie das mit Plain-SQL läuft? Ich könnte mir vorstellen, das du dir wenigstens den einen Abholprozess sparen kannst, in dem du ein update() mit WHERE-Condition einbaust.
 
Zurück