Codeoptimierung PHP

  • #1
W

Warlock0

Bekanntes Mitglied
Themenersteller
Dabei seit
16.12.2005
Beiträge
64
Reaktionspunkte
0
So, ich hab hier ein wenig PHP Code der aber IMHO nicht wirklich optimal programmiert ist. Der Code sollte in einem Ordner nach Dateien mit den Namen Folie0.png, Folie1.png usw suchen, und die nächste zu erstellende Datei dementsprechend benennen.Knapp zusammengefasst besitzt dann $Filecounter den Wert der Anzahl der Dateien + 1. Das funktioniert auch, aber irgendwie denk ich mir das das auch eleganter als mit ner 1000 Durchlauf For Schleife gehen sollte.

Code:
	$Filecounter = 1;
	
				//Suchen der bisher erstellten Dateien --> Nummerierung
				
	for($Filename=0;$Filename<1000;$Filename++)
	{
	  if (file_exists(Folien/Folie.$Filecounter..png)) 
		{
		$Filecounter++;		
		}										
	}

PS: Mein anderes Problem ist auch noch immer nicht gelöst, hoffe es fällt noch jemandem was ein: :-[
 
  • #2
Hi

Du könntest den Aufwand reduzieren indem du statt einer linearen Suche eine binäre Suche durchführst.
Du fängst bei 512 an ,wenn es nicht existiert dann gehst du zu 256 etc.

Gruß, Michael
 
  • #3
noch ne Möglichkeit:
Code:
<?php
$dir = Folien/;
$name = Folie;
$extension = \.png; # Punkt muss maskiert werden

if($fh = @opendir($dir)) {
	while($file = readdir($fh)) {
		if(!ereg($name.[0-9]+.$extension, $file)) continue;
		$arr[] = $file;
	}
}

natcasesort($arr); # Array sortieren
$max_file = array_pop($arr); # letzes Array-Teil
$nr = ereg_replace($name,,$max_file);
$nr = ereg_replace($extension,,$nr);
echo $nr;
?>

Das Verzeichnis brauch nur 1x gelesen zu werden ;)

Für die neue Datei brauchst du dann nur ++$nr zu machen ;)
 
  • #4
THX funktioniert.
 
  • #5
So, aus rgendeinem Grund läufts jetzt nicht mehr, deswegen dache ich ich hohl den Thread hoch bevor ich nen neuen mache....

Das ist mein aktueller Code:

Code:
$dir = Userdata/.$Username./Folien/;
			 $name = Folie;
			 $extension = \.jpeg; # Punkt muss maskiert werden

				if($fh = @opendir($dir)) 
					{
					while($file = readdir($fh)) {
  
  echo $file.<br />;
  
  if(!ereg($name.[0-9]+.$extension, $file)) continue;
  $arr[] = $file;
}
					}

			natcasesort($arr); # Array sortieren
			$max_file = array_pop($arr); # letzes Array-Teil
			$nr = ereg_replace($name,,$max_file);
			$nr = ereg_replace($extension,,$nr);
			$nr = $nr + 1;
			
			echo $nr;

In die Variable $nr wird immer 1 geschreiben, was mich annehmen lässt das sie Grundsätzlich 0 ist (vor $nr = $nr + 1;)

Das ist meine Ausgabe:

.
..
Folie1.jpg
Thumbs

Warning: natcasesort() [function.natcasesort]: The argument should be an array in C:\wamp\www\OPS\SaveScetchboardpic.php on line 34

Warning: array_pop() [function.array-pop]: The argument should be an array in C:\wamp\www\OPS\SaveScetchboardpic.php on line 35
1

Der 1er unten ist das Echo von $nr

Funktioniert hats übrigens nur lokal am Testserver, am richtigen Server macht er die Fehler

* Themen zusammengeführt *
 
  • #6
Gerade nachgebaut, funktioniert Tadellos ;)

Stimmt das Verzeichnis => $dir ?? (Groß-/Kleinschreibung)
Stimmt der Folienname => $name ?? (Groß-/Kleinschreibung)
Stimmt die Erweiterung => $extension ?? (Groß-/Kleinschreibung)
 
  • #8
Jep hattest Recht, thx...
Ich erstell in dem Script ja über ein Commandlinetool jpg Files - als Parameter will der für den Dateityp jpeg, speichert dann aber als jpg..und ich hab natürlich nach jpeg gesucht.

THX
 
Thema:

Codeoptimierung PHP

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben