Such-Funktion in php mit Berücksichtigung der _SESSION-Vars
Tom1tk
- php
Guten Morgen alle zusammen,
ich versuche gerade eine Suchmaschine für meine Seite zu bauen. Problem dabei ist, dass ich einen Login-Bereich habe, den ich mit php und Sessions realisert habe. Nun möchte ich, dass die geparsten Dateien durchsucht werden, und zwar derart, dass die Suchmaschine Rücksicht auf den Login-Rechte macht ( nicht alle User dürfen alle Seiten sehen, wenn aber User A Rechte auf alle Seiten hat und nach einer bestimmten Seite sucht, soll er die auch finden!)
Unten aufgeführt ist nur das Grundgerüst (noch keine Suchfunktion!), wie ich die Dateien geparst öffnen möchte, nur kann ich die phpsessID natürlich nicht so übernehmen, wie ich das gerne hätte.
Hat jemand Ideen?
<?php
$pfad="http://www.domain.de?".SID;
#Kontrolle
print $pfad."<br>";
$file = fopen ($pfad, "r");
if (!$file) {
echo "<p>Datei konnte nicht geöffnet werden.\n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file, 1024);
if (eregi ("<title>(.*)</title>", $line, $out)) {
$title = $out[1];
print $title;
break;
}
}
fclose($file);
?>
Thanx Tom1tk
Hello und guten Morgen,
wie werden denn die Seiten bisher gegen unberechtigten Besuch abgeschirmt. Da muss es ja ein Konzept geben. Kommen die aus einer Datenbank oder liegen die in speziellen Verzeichnissen?
Liebe Grüße aus http://www.braunschweig.de
Tom
Guten Morgen nach Braunschweig,
bist Du eigentlich auch mal nicht Forum? :-):-) (Doppel g*)
Die Dateien sind abgeschirmt über ne Session Var "eingeloggt"=ja oder =nein
Also erste Zeit des Scripts:
if ($_SESSION["eingeloggt"]!="ja")header("LOCATION: Zum Login mit Hinweisen");
Ich arbeite ohne Datenbank(en). Jeder User bekommt zusätlich noch Berechtigunen für diverse Seiten. Da steht dann z.B.
if ($user!="109827")header("Loaction: Sie haben keine Berechtigung")
Alle Scripts nur Sinngemäß! Keine korrekte Syntax!
Und ich hätte gerne, dass die User beim Suchen auch diese (geparsten) Seiten korrekt dargestellt bekommen. Also auch wenn die nach deren Login-Namen suche, dass die dann die Seite "persönliche Einstellungen" finden, auf der deren Daten zur Änderungszwecken dargestellt sind.
Geht das überhaupt?
Greets Tom1tk
Hello,
bist Du eigentlich auch mal nicht Forum? :-):-) (Doppel g*)
Naja, ich fange morgens ziemlich früh an zu arbeiten. Meistens so zwischen 0600 und 0800. Eher 0600. Da ist auch der Self-Server kaum ausgelastet, sodass ich meine ganzen Recherchen machen kann. Nebenbei schaeu ich eben immer, wer noch so postet.
Nicht im Forum bin ich meistens dann, wenn ich mit einem Kollegen zusammen arbeite. Da muss man dann acuh mal sechs bis acht Srunden Entzug ertragen ;-)
Also erste Zeit des Scripts:
if ($_SESSION["eingeloggt"]!="ja")header("LOCATION: Zum Login mit Hinweisen");
Das bedeutet ja aber, dass man entweder nur zwischen zwei Besuchertypen unterscheidet (Auth und Gast) oder dass der Verwaltungsoverhead einen erschlägt. Oder man macht Benutzerklassen. Die Rechte müssen dann sinnvollerweise included werden.
Ich arbeite ohne Datenbank(en). Jeder User bekommt zusätlich noch Berechtigunen für diverse Seiten. Da steht dann z.B.
if ($user!="109827")header("Loaction: Sie haben keine Berechtigung")
Das Konzept ist nicht so prall. Dann kann der User ja auch auf Seiten zugreifen, die irgendwo tiefer im Baum liegen und bekommt dann ggf. immer einen auf die Finger.
Um zu suchen, musst Du die zu durchsuchenden Seiten erst einmal kennen.
Dann wäre es doch einfacher, eine Anzeige-Maschine zu schreiben. Die kann im (geschützten) Dateibaum nach allen Seiten suchen, die einem gewissen Namensmuster entsprechen. Dann werden diese Seiten in eine Variable geladen. In der Seite (wenn es dann so sein soll) steht ein Array mit den Usernummern, die Rechte auf diese Seite haben. Wenn man nun ein gekapseltes eval() mit der Seite durchführt, kann man das Array auswerten und die Seite dann entweder berechnen -> in den output-Buffer (schau die also die OB-Funktionen an) oder eben verwefen. Den OB kannst Du dann ganz normal parsen, so als wäre die Seite an den Client geschickt worden.
Besser ist es natürlich, die Rechte von den Seiten zu lösen und in einer separaten Verwaltung abzulegen. Sonst verliert man doch schnell die Übersicht.
Liebe Grüße aus http://www.braunschweig.de
Tom
Nochmals ich,
ich habe das so gelöst:
##Alles nur sinngemäß!!
<?php
include "meine_funktionen.php";
$berechtigung_für_user=array("1","12","27");
berechtigungsabfrage($user_id,$berechtigung_für_user);
Hier Steht dann der Text für User 1, 12 und 27
?>
<?php funktionen
function berechtigungsabfrage($user_id,$berechtigung_für_user)
{
foreach($berechtigung_für_user as $wert)
{
if ($user_Daten[$wert][Zugangsberechtigung]!="ja_der_darf")header(Location: Weg hier!!);
}//Ende foreach
}/Ende function
?>
Und meine $user_Daten[]=(Berechtuigung=>"ja_der_darf")
Nur vom Prinzip her. Ich arbeite anstelle einer Datenbank mit nem Array. Das funktioniert alles einwandfrei, bis auf diese Suchfunktion.
In tiefere Baumstrukturen kommt der User gar net, da mein Menü für jeden Besuchertyp spezifisch zusammengestellt wird. Auch die Sitemap ist dynamisch.
Die Suchfunktion durchsucht auch bereits erfolgreich alle Ordner und Dateien, aber eben ohne den geparsten php-Anteil.
Daher meine Frage: Wie bekomm ich ne geparste PHP-Datei (die geparst wurde in Abhängigkeit von meinem Einloggstatus==_SESSION) in meine Suchmaschine???
Greets Tom1tk
Hallo?!
Noch jemand da? Oder haben alle Angst vor dieser Frage? So schwer kann das doch nicht sein. Wie lösen das andere? Soll ich überhaupt auf den Login-Status eingehen? Oder soll ich der Einfachheit wegen nur die offiziellen Seiten druchsuchen?
Greets Tom1tk
Hello,
Noch jemand da? Oder haben alle Angst vor dieser Frage? So schwer kann das doch nicht sein. Wie lösen das andere? Soll ich überhaupt auf den Login-Status eingehen? Oder soll ich der Einfachheit wegen nur die offiziellen Seiten druchsuchen?
Dein Konzept ist nicht gut.
Du willst doch nur die Ausgabe durchsuchen, oder? Oder soll auch der PHP-Code durchsucht werden? Also lass die Seiten in den Outputbuffer berechnen, ohne ihn auszugeben
http://de.php.net/manual/de/function.ob-start.php
dann durchsuchst Du ihn:
http://de.php.net/manual/de/function.ob-get-contents.php
und gibst ihn wieder frei:
http://de.php.net/manual/de/function.ob-end-clean.php
Um die Userrechte beachten zu können, müssen Deine Scripte natürlich genauso aufgerufen werden, als ob Du ein Client wärst. Also schau Dir mal PostToHost von Köhntrupp an. Muss Du mal Googlen. da kannst Du dem Apachen dann den Usercookie mitschicken, den er haben will oder die Credentials, die er braucht oder wie auch immer der Zugriffsschutz aufgebaut ist.
Ich denke, als Self-Vorschlag sollte das reichen. Nun beiß Dich rein und frag dann zu den Detailproblemen. Und wenn es fertig ist, dann wollen wir hier die Funktionen sehen, die so nebenbei für den Allgemeingebrauch entstanden sind... ;-))
Viel Erfolg.
Nachbemerkung:
Wahrscheinlich wäre es weniger Arbeit, den ganzen Content auf DB umzustellen oder zumindest auf Trennung von Content und Templates, eine zentrale Userverwaltung einzuführen und dann nur die für den jeweiligen User eingetragenen Contentdateien durchzusuchen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hi Tom,
jetzt hab ich mal ein paar (vielleicht auch saublöde) Fragen zu den Datenbanken. Ich hab noch nie mit solchen gearbeitet.
Sind meine Daten nach aussenhin sichtbar? Z.B. Bilder? Wie werden die eingebunden? Kann ich da dann z.B. auf die "Bildschleuse" verzichten oder kann man über geeignete Eingabe doch an die Daten aus meiner DB kommen?
Wie wäre dann die Suchfunktion?
Ich will definitiv nicht jedem User eine bestimmte Anzahl an Seiten zur verfügung stellen (ist mir zu Aufwendig jedem User seine Seiten einzutragen). Die User bekommen von mir Rechte, die ich abfrage und dann ggf. darf er die Seite besuchen oder eben nicht. Und genau da liegt "mein Hund begraben".
Letzte Frage: Lohnt es sich überhaupt, dem User die Möglichkeit zu geben den "internen" Bereich zu durchsuchen, oder ist das zu viel des Guten?
Ich möchte gerne den php-Code mit durchsuchen, aber eben geparsten php-Code!!
Greets Tom1tk
Hello,
Sind meine Daten nach aussenhin sichtbar? Z.B. Bilder? Wie werden die eingebunden? Kann ich da dann z.B. auf die "Bildschleuse" verzichten oder kann man über geeignete Eingabe doch an die Daten aus meiner DB kommen?
Bilder muss man nicht in der DB ablegen. Die können auch extern in einem geschützten Verzeichnis stehen und nur der Pfad auf das Bild (und ein paar Metadaten) kommen in die DB.
Man wird dann ggf. aber wieder ein Script für die Auslieferung der Bilder benötigen.
Wie wäre dann die Suchfunktion?
Da legt man dann eben fest, welche Felder der DB durchsucht werden sollen.
Ich will definitiv nicht jedem User eine bestimmte Anzahl an Seiten zur verfügung stellen (ist mir zu Aufwendig jedem User seine Seiten einzutragen). Die User bekommen von mir Rechte, die ich abfrage und dann ggf. darf er die Seite besuchen oder eben nicht. Und genau da liegt "mein Hund begraben".
Dann richte doch Userlevel und Usergroups ein. Die kannst Du beliebig kombinieren. Da kann man dann schon eine Menge mit erschlagen.
Letzte Frage: Lohnt es sich überhaupt, dem User die Möglichkeit zu geben den "internen" Bereich zu durchsuchen, oder ist das zu viel des Guten?
Ich möchte gerne den php-Code mit durchsuchen, aber eben geparsten php-Code!!
Also doch nur die HTML-Ausgabe nebst JavasScript und CSS. Letzten beiden kannst Du Dir beim Arbeiten mit Datenbanken auch ersparen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Noch was:
was ist der Unterschied zwischen
ob_start()
und f_open()?
f_open() gibt doch auch nix aus, sondern öffnet nur die Datei.
Sinngemäß:
ob_start();
$handle=f_open("bla.php");
##Durchsuche $handle nach $suchbegriff
f_close();
ob_end_clean();
Hab ich das so richtig gecheckt?
Was gibt f_open() zurück? Ne geparste Datei oder genau die php-text-Datei??
Thanx Tom1tk
Hello,
1. RTFM ;-)
2.
ob_start()
und f_open()?
f_open() kenn ich nicht
ob_start() leitet einen vorhandenen Kanal (Standardausgabe, normalerweise eben der Browser-Kanal) auf einen internen Puffer um, ohne den eigentlichen externen Kanal zu schließen. Es kommt dort aber nix mehr an, weil man es vorher abfängt.
<schlenker>
Ist wie bei den Sozialleistungen des Staates. Die kommen auch nicht beim Bürger an, weil sie vorher von Beratergesellschaften, Ministern und Führungsmanagern eingesackt werden. Siehe Weiterbildung. Dort wurden in BS in den letzten Jahren immer 80 Millionen DM für Weiterbildung ausgegeben. bei den Dozenten (die ja die eigentliche Leistung bringen) kamen aber nur ca. 15-20% davon an. Der Rest kann unmöglich für Miete, Strom, Telefon, Ausstattung und das bischen verwaltung draufgegengen sein. Eine PC-Ausstattung eines Unterrichtsraumes hat ja für ca. vier Kurse gehalten.
</schlenker>
fopen() und fwrite() öffnen einen [neunen][externen] Kanal und leiten einen Buffer auf diesen Kanal um.
Verstanden?
Liebe Grüße aus http://www.braunschweig.de
Tom