{"id":29,"date":"2007-05-19T00:34:29","date_gmt":"2007-05-18T22:34:29","guid":{"rendered":"http:\/\/robert.kolatzek.org\/wblog\/?p=29"},"modified":"2007-05-19T00:34:29","modified_gmt":"2007-05-18T22:34:29","slug":"html-seiten-mit-php-und-regularen-ausdrucken-durchsuchen","status":"publish","type":"post","link":"https:\/\/blog.kolatzek.org\/wblog\/29\/html-seiten-mit-php-und-regularen-ausdrucken-durchsuchen","title":{"rendered":"HTML Seiten mit PHP und regul\u00e4ren Ausdr\u00fccken durchsuchen"},"content":{"rendered":"<p>Vielleicht kennt ihr das Problem:<\/p>\n<p>Man hat jede Menge HTML-Seiten, aber man braucht spezielle Software oder externe Dienste, um sie auf Wunsch des Benutzers durchzusuchen&#8230; Das ist \u00e4rgerlich! Doch es geht auch ohne diese &#8222;Helfer&#8220;. Es reicht, PHP Unterst\u00fctzung auf dem Server und das lookuPhp Skript. Dieser kann als DIV in jede Seite eingebunden werden und durchsucht die im Setup vorgegebenen Seiten mit Hilfe von regul\u00e4ren Ausdr\u00fccken (RegEx).<\/p>\n<p>Diese L\u00f6sung erzeugt eine gewisse Last auf dem Server und die Antworten sind auch nicht innerhalb von Milisekunden da, aber f\u00fcr eine Domain mit 100 Seiten reicht das alle mal!<br \/>\n<!--more--><br \/>\n<H2>Grunds&auml;tzliche &Uuml;berlegungen<\/H2><\/p>\n<p align=\"justify\" class=\"text\">Diese Skripte sind in PHP programmiert und nutzen die regul&auml;ren Ausdr&uuml;cke (in den meisten Distributionen kein eigenes PHP-Packet, sondern vorinstalliert). Die Suchmaschiene braucht keine Datenbanken, weil sie die Dateien direkt von der Festplatte liest. Die Art der Suche kann ausgew&auml;hlt werden: <em>ganze W&ouml;rter oder Teilw&ouml;rter<\/em> <strong>und<\/strong> <em>S&auml;tze (Satzteile) oder jedes Wort einzeln<\/em>. Wurde etwas in eiener Seite gefunden, wird der Seitentitel als Link dargestelt. Die Suche mit diesen Skripten liefert gute Ergebnisse nur auf kleinen Homepages unter 100-150 Seiten. Je h&auml;figer gesuchte Begriffe auf den Seiten vorkommen, desto langsamer die Ausgabe. Ausserdem ist dieses Skript nur f&uuml;r Internetauftritte geeignet, die als eigene Domain im Apache mit <strong>DOCUMENT_ROOT<\/strong> eingetragen worden sind. <em>(Seiten in Home-directories vom Typ http.\/\/dom&auml;ne\/~benutzer\/ k&ouml;nnen mit diesem Skript nicht durchsucht werden.)<\/em> Es liegt daran, dass der Einrichtungsskript das Wurzelverzeichnis des Servers &ouml;ffnet, darin alle Dateien und Unterordner (auch als Sym-Links unter Linux) durchsucht und die Liste der durchzusuchenden Dateien ebenfalls in DOCUMENT_ROOT speichert. Beim Starten der Suche wird diese Liste von DOCUMENT_ROOT eingelesen und nur die darin genannten Seiten durchsucht!\n<\/p>\n<p><H2>Installation<\/H2><\/p>\n<p align=\"justify\" class=\"text\">Entpacke <a href=\"\/lookuPhp\/lookuPhp.tar.gz\">lookuPhp.tar.gz<\/a> am besten in das Hauptverzeichnis (&quot;DOCUMENT_ROOT&quot;) deines Servers. F&uuml;hre <strong>searchsetup.php<\/strong> aus, <em>wenn du dir sicher bist, dass es dort keine rekursiven Symlinks gibt, sonst l&auml;uft sich der Server ein einer Schleife m&ouml;glicherweise tot<\/em>. Dieser Skript durchsucht alle Unterordner vom DOCUMENT_ROOT aus (unter Linux auch Symlinks) und stellt sie in einer Liste dar. Du kannst einzelne Dateien von der Suche auszuschlie&szlig;en, indem du das H&auml;kchen herausnimmst. &Uuml;ber das Eingabefeld kannst du Dateiendungen vorgeben, die in die Liste  aufgenommen werden sollen. Voreinstellung ist html und htm (Schreibweise: &quot;<strong>html|htm<\/strong>&quot;). Du kannst nat&uuml;rlich auch php-Skripte darin aufnehmen. (Dazu muss das Feld um &quot;<strong>|php<\/strong>&quot; erweitert werden und die Suche neu gestartet.) Jedoch werden dadurch <em>m&ouml;glicherweise auch Variablen mit passw&ouml;rtern sichtbar. Hier liegt Deine VERANTWORTUNG!<\/em> Angesichts der neuen W&uuml;rmer, die php-Skripte Angreifen k&ouml;nnen, w&uuml;rde ich gar keine php-Skripte in die Liste aufnehmen. W&auml;hle Dateien ab, die nicht durchsucht werden sollen und lass die Liste speichern. Sie hei&szlig;t &quot;<strong>search.inc<\/strong>&quot; (DOCUMENT_ROOT\/search.inc bzw http:\/\/dom&auml;ne.de\/search.inc) und enth&auml;lt Dateinamen mit vollem Pfad (ab DOCUMENT_ROOT des Servers) getrennt durch PIPE-Zeichen &quot;|&quot;. Diese Datei wird immer ge&ouml;ffnet, egal wo Du die search.php platzierst.<\/p>\n<p><H2>Einrichtung<\/H2><\/p>\n<p align=\"justify\" class=\"text\">Die Links zum <strong>Such-Formular<\/strong> (<strong>search.php<\/strong>) musst Du um &quot;<strong>?language=de<\/strong>&quot; erweitern (also <em>href=&quot;search.php?language=de&quot;<\/em>) f&uuml;r Deutsch oder &quot;pl&quot; f&uuml;r Polnisch! Du kannst die Datei vom Aussehen her aufpeppen (jedoch ohne den php-Code zu &auml;ndern). Ein fataler Fehler w&auml;re, die CSS und &Uuml;bersetzungsdateien aus dem Ordner zu entfernen! Denke daran, dass die URL&#8217;s zu css-styles und bildern absolut (d.h. mit &quot;\/&quot; anfangen) sein sollen. Die Links werden ebenfalls absolut ausgegeben. Damit kannst Du aus jedem Unterordner auf Dateien im Hauptverzeichnis springen. M&ouml;glich sind auch andere Sprachen f&uuml;r das Suchformular und Ergebnisse, vorausgesetzt, Du machst Dir die M&uuml;he und machst eine eigene <strong>&Uuml;bersertzung<\/strong> z.B. f&uuml;r ukrainisch (<em>abzuspeichern nach dem L&auml;nder-code &quot;ua&quot; als &quot;lang.ua.php&quot;<\/em>) und benutzt &quot;<em>search.php?language=ua<\/em>&quot; (also Bestandteil des Dateinamens der &Uuml;bersetzungsdatei).<\/p>\n<p align=\"justify\" class=\"text\"> Suchen kann man &#8211; wie bereits erw&auml;hnt &#8211;  eine <strong>Zeichenfolge<\/strong> (<em>genaue Reihe von W&ouml;rtern im Satz<\/em>) oder <strong>jedes Wort einzeln<\/strong>. Die W&ouml;rter werden dabei durch ein Leerzeichen voneinander getrennt. Die einzelnen W&ouml;rter oder die W&ouml;rterkette kann auch als ein Teil eines anderen Wortes bzw. einer &auml;hnlichen W&ouml;rterkette gesucht werden, wenn man &quot;als Wort-Teile&quot; ausw&auml;hlt. Damit findet man &quot;Haus&quot; und &quot;Hauses&quot; aber auch &quot;Robert&quot; und &quot;e<strong>robert<\/strong>e&quot; (da die Gro&szlig;- und Kleinschreibung nicht beachtet wird). Wird jedes Wort einzeln gesucht, so werden Ergebnisse nach Suchbegriff geordnet (zuerst das erste Wort mit passenden Ergebnissen, dann das zweite usw.)<\/p>\n<p align=\"justify\" class=\"text\"> In der <strong>CSS-Datei<\/strong>, die Du im HEAD der HTML-Datei einbindest (im search.php-Skipt hei&szlig;t sie &quot;style.css&quot; und im Archiv beinhaltet ist) mu&szlig;t Du nur noch CSS-Klasses mit Deinen Lieblingsfarben und Fonts belegen: <strong>searchbackground<\/strong> beinhaltet die <em>Hintergrundfarbe<\/em>, die f&uuml;r highlighting benutzt wird; <strong>searchfound<\/strong> legt das Aussehen der <em>gefundenen Stellen<\/em> fest; <strong>searchstring<\/strong> das <em>Aussehen der Hinweise zu gesuchten Einzelw&ouml;rtern (und -Teilen)<\/em>; <strong>searchsitename<\/strong> legt <em>die Eigenschaften des Links der gefundenen Seite<\/em> = der &Uuml;berschrift fest. Au&szlig;erdem solltest Du darauf achten, dass die Pseudoklassen wie <strong>hover<\/strong> oder <strong>visited<\/strong> (<em>a:hover und a:visited<\/em>) ebenfalls belegt sind, damit das Layout passt.<\/p>\n<p align=\"justify\" class=\"text\">search.php kann man auch in einem IFRAME einbinden z.B.:<\/p>\n<pre>&lt;iframe width=&quot;600&quot; height=&quot;150&quot; \nframeborder=&quot;0&quot; align=&quot;middle&quot; src=&quot;search.php&quot;&gt;&lt;\/iframe&gt;<\/pre>\n<p align=\"justify\" class=\"text\">Bei gleichem Layout der Seite und des search.php-Skriptes sieht das ganze so aus, als w&auml;re es eine Seite! Siehe unten&#8230; (durchsucht nicht den Blog, sondern die statischen Seiten von http:\/\/robert.kolatzek.org)<\/p>\n<p align=\"justify\" class=\"text\"> F&uuml;r Fragen und Anregungen bin ich unter <a href=\"\/about.html\">about myself<\/a> zu finden.<\/p>\n<p align=\"left\" class=\"text\">Viel Spa&szlig; mit lookuPhp!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vielleicht kennt ihr das Problem: Man hat jede Menge HTML-Seiten, aber man braucht spezielle Software oder externe Dienste, um sie auf Wunsch des Benutzers durchzusuchen&#8230; Das ist \u00e4rgerlich! Doch es geht auch ohne diese &#8222;Helfer&#8220;. Es reicht, PHP Unterst\u00fctzung auf dem Server und das lookuPhp Skript. Dieser kann als DIV in jede Seite eingebunden werden [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[74,82,91,96],"class_list":["post-29","post","type-post","status-publish","format-standard","hentry","category-software","tag-opensource","tag-php","tag-regex","tag-server","entry"],"_links":{"self":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/29","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/comments?post=29"}],"version-history":[{"count":0,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/29\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/categories?post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/tags?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}