phpbar.de logo

Mailinglisten-Archive

[php] speicher =?iso-8859-1?Q?l=F6schen=3F?=

[php] speicher =?iso-8859-1?Q?l=F6schen=3F?=

Pascal Schult info_(at)_schuborg.de
Wed, 26 Jan 2000 17:02:47 +0100


Hi Ulf..


also, ich hatte mal ein ca. 21 millionen zeichen enthaltenes Logfile. 
ich habe dies zeilenweise auslesen lassen und nach 500 zeichen ab in
die datenbank. dann hat das script wieder an der stellen angefangen
an der es aufgehört hat und weitere 500 zeilen ausgelesen etc.
mehr als ca. 3 durchlaeufe waren aber nicht drin, dann ist es
abgestürzt.
ich habe immer schön alles variablen unsettet etc. aber es klappte
nicht.

jezt soll ein script ein verzeichnis öffnen, dies auslesen und nach-
einander die enthaltenen files öffnen, auslesen in einen string packen
und dann in ein neues file in einem anderen verzeichnis schreiben.
klappt auch wunderbar. jedoch schafft dieses script nur ca. 6 files
auszulesen und neu zu schreiben, bis es abstürzt. auch hier habe ich
immer alle variablen unsettet. die textfiles, die ausgelesen werden
sind auch nur ca. 5kb groß, also nicht zu groß eigentlich. oder kann 
ein string das nicht mehr auffassen?

Ulf Wendel wrote:

> Dies ist nicht möglich. PHP bietet keinen Zugriff auf die
> Speicherverwaltung. Mit unset() kann jedoch der von einer Variable
> belegte Speicher zur erneuten Nutzung durch den Interpreter freigegeben
> werden. Das OS profitiert hiervon jedoch nur indirekt, da möglicherweise
> weniger zusätzlicher Speicher alloziiert wird.

hmm, laeuft hier auf nem wxmp (win98, xitami, mysql, php3.11)
aber wie gesagt, ich habe ja auch jede relevante variable nach einer 
schleife unsettet.

> 
> Falls es zufällig genau dreißig Sekunden sind, wirst Du an der
> Laufzeitbegrenzung scheitern (php3.ini -> time_limit und
> set_time_limit()).
> 
ne, so lange hält es nicht durch. nach ca. 4-7 sekunden ist sense :(

> Ob es am Speicherverbrauch liegt oder nicht siehst Du an den
> Systemanzeigen. Bitte prüfe ob wirklich der Speicherverbrauch dich
> killt.
> 
> Setze überall im Skript Statusmeldungen wie echo "fopen mit Datei
> $datei"; (und denke an die sofortige Ausgabe mit flush()), und versuche
> mal den Fehler einzukreisen.

hast du mal ein beispiel wie flush() arbeitet? habe das heute nacht auch 
schon probiert, aber sehe keinen sinn darin, da ich eigentlich keine
bildschirmausgabe brauche. es wäre nur schön, wenn man <html> UND
</html>
sehen könnte, denn dann wüsste ich, dass das script durchgelaufen ist.
aber soweit kommt es nicht. flush() ist doch nur dafür da, daß alles an
den
browser übergeben wird, schon bevor das script fertig ist, oder?

> 
> Wofür, was ist das Ziel? Obiges ist eine undeutliche
> Aufgabenbeschreibung.
sorry, kannst du jetzt nach obigem text nachvollziehen was ich bezwecken
möchte? o.k., eigentlich schreibe ich ja nicht gerne solche langen
mails in dieser liste, aber hier der quellcode:

<html><body>
<?php	

  $verzeichnis=opendir('C:\\WiNDOWS\\Desktop\\dir'); //verzeichnis auf
  if(!$verzeichnis)
  {echo "fehler aufgetreten";}	
  else 
  {
     $i=0;
	while ($file = readdir($verzeichnis))    //Inhalt auslesen
	{
	$file_array[$i] = $file;                 //filenamen in array
	$i++;
	}
	closedir($verzeichnis);                 //verzeichnis schliessen
	
	echo "Files im Verzeichnis: $i <br>\n";
		
		for ($j = 3; $j <= $i; $j++)    //ab drittem file auslesen
		{
		$read_host="C:\\WiNDOWS\\Desktop\\dir\\$file_array[$j]";
		$read_file = fopen($read_host, "r");

			if(!$read_file)
			{echo "fehler aufgetreten";}	
			else 
			{
			echo "File $j -> $file_array[$j] geöffnet --> ";
				while(!feof($read_file))
				{
				$read_line=fgets($read_file,1024);
				$text .= $read_line;
				}
   				fclose($read_file);
				unset ($read_file);

					$write_host="C:\\WiNDOWS\\Desktop\\dir\\test\\$file_array[$j]";
					$write_file = fopen($write_host, "w");
					if (!$write_file) { echo "fehler aufgetreten"; }
					else {	
					fwrite($write_file, $text);
					fclose($write_file);
					echo " $file_array[$j]  geschlossen<br>\n";
					unset ($text); unset ($write_file);unset ($line); }
			}
		}	
   }   
?>
</body></html>

--------
ich habe hier jetzt alles unnötige rausgenommen, aber nach ca. 100 von
ca. 1000 files ist schluss.
das letzt (ca. 100ste) file wird noch geöffnet, teilweise geschrieben
und dann ist schluss.

any idea?  CPUlast ist 100% speicher ebenfalls, aber nur für ca. 3
sekunden.


php::bar PHP Wiki   -   Listenarchive