PHP 2 Anfänger Probleme ;)

Taugenichts schrieb:
Joa, wie soll das auch mit PHP gehen - PHP ist eine serverseitige Scriptsprache (die nicht weiß, was für ein "Benutzer"/Programm die Seite aufruft, mal abgesehen von Informationen die der Browser freiwllig übermittelt)

Iframes sind aber in der Tat doof. Wenn irgendwie möglich, würde ich davon absehen.

Nja ich denk mal müsste iwie gehen das wenn man die Seite aufruft, mit PHP die größe des Frameinhaltes gelesen wird, diese als Variable gespeichert wird und dann die komplette Seite mit jetzt passender Iframe höhe neu geladen wird. War nur ne Idee =/

Auser nem Iframe wüsste ich auch nicht wie ich Wordpress bzw nen Gästebuch in ne statische Seite einfügen könnte..
 
Eagle-PsyX- schrieb:

Nein, ich hab praktisch ne statische Seite die vll ohne Inhalt 300px groß ist. Und dann hab ich ne Seite (Blog, Gästebuch) die da rein soll und zb 1500px groß ist. Also muss die statische Seite sich auf insgesamt 1800px ausdehnen. Nen Blog oder Gästebuch verändert sich aber natürlich automatisch mit jedem neuen Eintrag. Wenn der Inhalt dann also 1600px groß wird, soll die statische Seite auf 1900px gehen.. eben automatisch.

Das was du da zeigst is ja einfach nen frame mit Scrollbalken. Ich will aber das man gar nicht sieht das da ein Frame am werkeln is 0o Und scrollen ist schonmal ganz schlecht.

Bsp:

Seite: http://mxmm.de/gaestebuch.php
Inhalt: http://mxmm.de/guestbook/index.php

Genau so wies jetzt ist soll es auch weiterhin sein, nur eben ohne JS, weil das nicht jeder anhat.
 
Hmm da musst ein PHP Größe ausrechnen, und diese in der passende Stelle ausgeben (in CSS oder HTML).

Und äh nein. Das ist absolut kein Frame, dadrum gehts ja. Das ist CSS mit einem Scrollbalken (schau Quelltext!).
 
Eagle-PsyX- schrieb:
Hmm da musst ein PHP Größe ausrechnen, und diese in der passende Stelle ausgeben (in CSS oder HTML).

Und äh nein. Das ist absolut kein Frame, dadrum gehts ja. Das ist CSS mit einem Scrollbalken (schau Quelltext!).

Ja, aber ich weiß eben nicht wie.. und google spuckt iwie auch nix passendes dazu aus ;)

Ok, hatte es mir nur kurz angeschaut und das sah so nach frame aus 0o So solls aber eben definitiv nicht aussehen..
 
So, mich gibts auch noch^^

Ich habe ein Array, das so (vereinfacht) in einer Schleife erzeugt wird:

PHP:
$UserArray[$User] = $zaehler;

Dieses Array gebe ich danach (wieder vereinfacht dargestellt) so aus:

PHP:
while(list($User,$zaehler) = each($UserArray))
{
	echo $User . ": " . $zaehler . "<br />";
}

Funktioniert auch.. nur das wichtigste kriege ich nicht hin, das das Array nach $zaehler sortiert wird.

Wenn man also annimmt man hat UserA mit 5, UserB mit 10 und UserC mit 3, dann soll eben das rauskommen:

UserB: 10
UserA: 5
UserC: 3

Im Moment ist es halt ganz einfach so in alpabetischer Reihenfolge:

UserA: 5
UserB: 10
UserC: 3

Die ganzen Array-Sortierfunktionen von selfphp habe ich schon durch, ich geh also davon aus das ich echt zu blöd bin das richtig zu machen.. würde mich über eure Hilfe mal wieder sehr freuen ;)


Edit: Wie funktioniert das eigentlich mit den "Crontab"s? Damit kann ich ja einstellen das zB ein Script einmal am Tag von alleine ausgeführt wird.. nur alle Tutorials etc die ich finde beziehen sich auf root-Server -.-^^ Ich habe aber eben nur die Confixx Oberfläche...

Screen ist im Anhang für die, die sich das nicht vorstellen können =P

Was muss ich da eintippen wenn ich einfach eine beispiel.php um 0 Uhr jede Nacht ausführen will?
 

Anhänge

  • cronjob.png
    cronjob.png
    7,8 KB · Aufrufe: 141
Zuletzt bearbeitet:
Soo ich mal wieder :evillol:


Hab mich jetzt mal wieder bischen mit PHP beschäftigt, und wieder mal nen Problem. Ich will mir ne Art Besucherzähler programmieren, der nicht nur die Anzahl der Besucher zählt sondern auch die Anzahl der Zugriffe jeder IP. (Ich weiß dazu gibts fertige Scripte wie Sand am Meer, aber wollte halt lieber was eigenes machen.. =P^^)

So sieht das Script bis jetzt aus:

PHP:
<? 
	
	Error_reporting (E_ALL) ;

	$fn = "db.txt";	
	$IP = $_SERVER['REMOTE_ADDR'];
	
	if (file_exists($fn))
	{
		$fp = fopen($fn,"r+"); 
		while(!feof($fp))
		{ 
			$zeile = $ZeilenArray[] = fgets($fp,30); 
			if ($zeile != "")
			{
				list($IPArray[],$ZugriffArray[]) = explode('#', $zeile);
			}
		} 
		fclose($fp); 
		
		//echo "<br><br><br>"; print_r($ZeilenArray); echo "<br><br><br>";
		
		$IPVorhanden = array_search ($IP, $IPArray);
		$Laenge = count($ZeilenArray);
		if ($ZeilenArray[$Laenge - 1] == '')
		{
			array_pop($ZeilenArray);
		}
		
		if ($IPVorhanden != "")
		{
			$Zugriffe = $ZugriffArray[$IPVorhanden] + 1;
			$ZeilenArray[$IPVorhanden] = $IP . "#" . $Zugriffe . "\n";
			$Laenge -= 2;
		}	
		else
		{
			$ZeilenArray[] = $IP . "#" . "1\n";
			$Laenge--;
		}
		
		//echo "<br><br><br>"; print_r($ZeilenArray); echo "<br><br><br>";
		
		$fp = fopen("db.txt", "w");
		for ($x = 0; $x <= $Laenge; $x++)
		{
			fputs($fp,$ZeilenArray[$x]);
			//echo $x . ": " . $ZeilenArray[$x] . "<br>";
		}
		fclose($fp);
	}
	else
	{
		$fp = fopen($fn, "w");
		$Zugriffe = 1;
		$Eintrag = $IP . "#" . $Zugriffe;
		fputs($fp,$Eintrag);
		fclose($fp);
	}

?>

Das Script speichert dann sowas in einer Textdatei:

IP#Zugriffe der IP
127.0.0.9#3
127.0.0.10#5
127.0.0.1#38

Funktioniert soweit auch. Außer es steht sowas in der Datei (Weitere Einträge nach dem der aufrufenden IP):

127.0.0.9#3
127.0.0.10#5
127.0.0.1#38
127.0.0.11#1

In diesem Fall wird die Datei zwar korrekt ausgelesen, der Zähler der aufrufenden IP (hier 127.0.0.1) auch korrekt um 1 erhöht, allerdings wird der Letzte Eintrag der Datei nicht wieder zurück in die Datei geschrieben. Das würde also bedeuten Sobald eine IP, die schon auf der Seite war, nach einiger Zeit wieder drauf geht, wird der Besuch des letzten Besuchers gelöscht. (Hier würde also die Zeile der IP .11 verloren gehen) Natürlich ist das irgendwie doof ;)

Hab jetzt schon ewig rumprobiert und mehr verschlimmbessert als verbessert.. ich krieg das Problem nicht in den Griff.

Habt ihr ne Idee wie es funktioniert? Oder sonst noch verbesserungsvorschläge?

mfg
 
$fp = fopen("db.txt", "w");

Schau dir nochmal den zweiten Parameter an.

edit:

Naja, ansonsten halte ich dein Vorgehen, den Besucherzähler über eine Datei zu speichern, nicht so gut wie das Ganze über eine Datenbank zu lösen.

Denn die Datei könnte evtl. von außen zugegriffen und beschrieben werden, wenn man die genaue URL kennt und du keinen Verzeichnisschutz dafür verwendest. Das hätte zur Folge, dass ein Fremder an die IPs herankommt. Abgesehen davon wird die Datei höchstwahrscheinlich sehr schnell voll und eine Datei zu durchlaufen ist nicht so performant wie eine Datenbank. In der Datenbank könntest du dann gleich noch die Aufrufzeit einspeichern und immer nur ein bestimmtes Zeitintervall betrachten (z.B. 30 Minuten) -> das würde verhindern, dass du evtl. zwei verschiedene Nutzer, die mal zufällig mit derselben IP unterwegs waren, als einen Nutzer behandelst. Aber da kommt es natürlich darauf an, wie du es haben willst.
 
Zuletzt bearbeitet:
Viel schlimmer ist, dass bei gleichzeitigem Zugriff durch mehrere Nutzer das Ergebnis in dieser Textdatei undefiniert wird => nimm eine Datenbank, sonst wirst du damit nicht froh! Achja und in der Datenbank am Besten Zahlen und keine Strings für die IPs nutzen, dann geht die Suche danach schneller (gibt entsprechende Umwandlungsfunktionen in MySQL (inet_aton) wie auch in PHP (ip2long)).
 
Zuletzt bearbeitet:
Hm.. hab leider keine Ahnung von Datenbanken. Naja, werd mir dann in der nächsten Zeit mal anschauen wie das geht.. falls ich Fragen habe (wovon ich ausgehe =P), melde ich mich wieder.

Danke für eure Tipps schonmal ;]
 
[o.0] schrieb:
Gibts eigentlich ne bessere Möglichkeit die XML Zeile für Zeile zu lesen?

Ist zwar jetzt schon etwas her, aber vielleicht hilft es dir trotzdem:

PHP:
    $fp = fopen("$url","r");
    
    //XML Daten einlesen
    if ($fp) {
    $i = 0;
    while (!feof($fp)) {
         $zeile = fgets($fp, 100);
            $DatenArray[] = utf8_decode($zeile);
            $i++ ;
        }
        fclose($fp);      
    }

Das gleiche erreichst du mit:

PHP:
foreach(file($url) as $row)
{
	$DatenArray[] = utf8_decode($row);
}
 
Oh, Danke.. werd ich wenn ich mal Zeit habe testen, deine Lösung sieht jedenfalls schonmal um einiges Eleganter aus^^
 
Wenn es nicht mit utf8_decode wäre, könntest du es sogar einzeilig mit $DatenArray = file($url); machen ;)
 
du meinst sowas?

PHP:
$DatenArray = array_map( 'utf8_decode',  file($url) );
 
Zurück
Oben