Seite 1 von 1

PHP mein erstes Programm

Verfasst: 20.04.2008 02:59
von GTA26
Hallo Leute, war gestern und heute none Stop am PC um mir ein kleines
Script zu programmieren. Also es Funktioniert und ich bin super happy.
Aber hat jemand von euch noch verbesserungsvorschläge?
Ich denke es ist noch nicht ganz das Wahre.
Musste sehr viel improviesieren, da ich absolut 0 ahnung hatte
/*noch habe ;-) hehe*/ was mir so für befehle zu verfügung stehen.

Würde mich auf jede Antwort freuen.

LG GTA26

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Unbenanntes Dokument</title>
</head>

<body>
<?php
// TimeOut verhindern
set_time_limit(0);
//phpinfo();


//Anfang wert der URL			
$urlendung = 0;

do {
   		$urlendung+= 36;
		echo "Seite".$urlendung."<br>";
		
		//Starte HTTP Client
		require_once 'HTTP/Client.php';
		$link = "http://www.name.tld/msg-list.html?ps=".$urlendung;
		$client =& new HTTP_Client();
		$code = $client->get($link);
		$res =& $client->currentResponse();
		$html = $res['body']."\n";
		
		
		//Suche alle ID's
		preg_match_all("/http+\:\/\/[-a-zA-Z0-9]{4,20}+\.name+\.tld/", $html, $treffer);

		for ($i=0; $i< count($treffer[0]); $i++) 
		{
			$zwischenergebnis1 = $treffer[0][$i];
	
			$zuersetzen = "/http+\:\/\/admin+\.name+\.tld/";
			$durch = "";
			
			//Filtert unerwünschte ID's raus
			$zwischenergebnis2 = preg_replace($zuersetzen, $durch, $zwischenergebnis1);
	

	
				// Falls das Zwischenergebnis zu den unererwünschten ID's ghört wird sie ignoriert
				if ( $zwischenergebnis2 == $durch)
				{
				//echo "Nicht Schreiben.<br>";
				}
				// Ansonsten wird sie ins TXT file geschrieben
				else
				{
				$dateiname = "cash.txt"; // Name der TXT Datei
				$handler = fopen($dateiname , "a+"); // Datei öffnen, wenn nicht vorhanden dann wird die Datei erstellt.
				fwrite($handler, $zwischenergebnis2."\r\n");
				echo $zwischenergebnis2;
				fclose($handler); // Datei schließen */
				}
				
		}
				// Abfrage ob es weitere ID's zu hollen gibt	
//-------------------------------------------------------------------------------------------------				
				$zusuchen = "/\/rechts+\.gif/";
				$wahr = "wahr";
	
				preg_match_all($zusuchen, $html, $gefunden);
				for ($j=0; $j< count($gefunden[0]); $j++) 
		
				{ $weiter = $gefunden[0][$j];
				echo "<h1>Es geht weiter <br></h1>";
	
				$Resultat = preg_replace($zusuchen, $wahr, $weiter);
				}
//-------------------------------------------------------------------------------------------------

// ID's werden geholt bis keine mehr vorhanden sind
}while ($Resultat==$wahr);

?>


</body>
</html>


Verfasst: 20.04.2008 13:26
von S2B
Hallo,

für das erste Script sieht der Code schon mal gar nicht so schlecht aus. :) Ein paar Dinge hätte ich noch, die du verbessern könntest:
  • Anstatt die Links zu ersetzen und dann zu überprüfen, ob das Ergebnis leer ist, kannst du auch einfach überprüfen, ob Links vorhanden sind:

    Code: Alles auswählen

                if (preg_match($zuersetzen, $zwischenergebnis1) 
                { 
                //echo "Nicht Schreiben.<br>"; 
                }
                else
                // ...
  • An dieser Stelle:

    Code: Alles auswählen

    fopen($dateiname , "a+")
    könntest du anstatt a+ ein einfaches a verwenden, da du ja nichts aus der Datei lesen musst (siehe [php:fopen]).
  • Wenn ich das richtig überblicke, überprüft dieser Teil:

    Code: Alles auswählen

                $zusuchen = "/\/rechts+\.gif/"; 
                $wahr = "wahr"; 
        
                preg_match_all($zusuchen, $html, $gefunden); 
                for ($j=0; $j< count($gefunden[0]); $j++) 
           
                { $weiter = $gefunden[0][$j]; 
                echo "<h1>Es geht weiter <br></h1>"; 
        
                $Resultat = preg_replace($zusuchen, $wahr, $weiter); 
                } 
    lediglich, ob die rechts.gif im Code auftaucht. Das kannst du auch einfach durch:

    Code: Alles auswählen

    if (preg_match("/\/rechts+\.gif/", $html))
    {
       $weiter = true;
    }
    else
    {
       $weiter = false;
    }
    lösen. Wenn es wirklich nur um den String "/rechts.gif" geht, das + also keinerlei Bedeutung hat, würde sogar ein simples

    Code: Alles auswählen

    if (strpos($html, '/rechts.gif') !== false)
    ausreichen.

    Die while-Schleife am Schluss würde dann so aussehen:

    Code: Alles auswählen

    while ($weiter);
Wenn du irgendwelche Fragen dazu hast, einfach nochmal hier melden. :wink:

Verfasst: 20.04.2008 17:29
von GTA26
Vielen Dank!
Hab alles abgeändert wie beschrieben und noch ein paar sachen hinzugefügt.
Nun hab ich noch ein Problem, manchmal bricht das Programm ab und geht einfach weiter. Hier ne beschreibung

Schleife

¦ ¦- HTTP_Client wird simuliert -->
¦ ¦- Link wird aufgerufen -->
¦ ¦ Suchstring wird initialisiert -->
¦ ¦ Wenn alls ok dann wird in TXT file gespeichert -->
¦ ¦ Parallel wird nach parameter rechts.gif gesucht -->
¦ ¦- Wenn vorhanden wird Zähler raufesetzt -->
¦
¦---- Doppelte einträge im TXT werden gesucht und ersetzt -->
¦---- Ende

Das Prozedere wird immer wiederholt und auf einmal (belibige Seite)
bricht es bei der Stelle ab wo parameter
"rechts.gif gesucht -->" wird.
Danach springt er direkt zu
"Doppelte einträge im TXT werden gesucht und ersetzt -->"
wovon noch weitere Seiten vorhanden wären mit dem Parameter
"rechts.gif"

Hmm kann es sein das das der Client zu wenig Zeit hat den
Quellcode vollständig zu laden? Hat jemand eine Idee?

Im Ruby gibt es eine syntax timer() bei der er man ein Timeout setzen
und den befehl Rescue bei der die Routine nochmals durchloffen wird.
Gibt es so was auch im PHP???

LG GTA26

Verfasst: 20.04.2008 18:40
von S2B
GTA26 hat geschrieben:¦ ¦ Parallel wird nach parameter rechts.gif gesucht -->
PHP arbeitet nicht parallel, sondern hintereinander. Wenn der Client es nicht schafft, die Seite zu erhalten, bleibt alles andere stehen, bis der Vorgang abgebrochen wird (z.B. durch einen automatischen Timeout) oder erfolgreich ist.

Verfasst: 21.04.2008 20:18
von GTA26
OK ich weiss das es nicht Parallel ablauft.
Ich meinte damit im gleichen durchlauf (In einem Atemug ;-) hehe)