PHP mein erstes Programm

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
GTA26
Mitglied
Beiträge: 20
Registriert: 20.04.2008 02:47
Wohnort: Zürich

PHP mein erstes Programm

Beitrag 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>

Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
GTA26
Mitglied
Beiträge: 20
Registriert: 20.04.2008 02:47
Wohnort: Zürich

Beitrag 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
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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.
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
GTA26
Mitglied
Beiträge: 20
Registriert: 20.04.2008 02:47
Wohnort: Zürich

Beitrag von GTA26 »

OK ich weiss das es nicht Parallel ablauft.
Ich meinte damit im gleichen durchlauf (In einem Atemug ;-) hehe)
Antworten

Zurück zu „Coding & Technik“