Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-Code wird als Text ausgegeben



Xero.
18.09.2008, 12:40
Warnung: Ich hab noch nie mit PHP oder XAMPP gearbeitet

Ich hab nach einer Suchmaschine für ein Intranet gesucht und folgenden Code gefunden, den man einfach nur einfügen sollte.
Leider wird der Code als Text ausgegeben.
Hab XAMPP installiert und die Seite unter htdocs gespeichert.
Ist der Code fehlerhaft oder mache ich was falsch?
Wahrscheinlich muss man doch etwas in XAMPP einstellen, oder?


<?php
echo "<HTML><BODY>";
echo "<FORM ACTION=$PHP_SELF METHOD=POST> ";
echo "<INPUT TYPE=TEXT NAME=wort VALUE=$wort>";
echo "<INPUT TYPE=SUBMIT VALUE=Durchsuchen></FORM>";
$wort = strtolower(trim($wort));

if($wort) {

// Funktion zum Auslesen des Verzeichnisses
function read_dir($dir=".",$endung=".htm") {
settype($dateinamen,"array");
if(!is_dir($dir)) return false;
$verzeichnis = dir($dir);
while($datei = $verzeichnis -> read()) {
if($datei[0] != "." && substr($datei,strlen($endung)*(-1)) == $endung) {
$dateinamen[] = $datei;
}
}
$verzeichnis->close();
sort($dateinamen);
return $dateinamen;
}

// Das Hauptprogramm
$dateinamen = read_dir(".");
for($i=0;$i<count($dateinamen);$i++) {
$name = $dateinamen[$i];
$datei = "$name";
$start = 0;
$fp = fopen($datei,"r");
while(!feof($fp)) {
$zeile = strtolower(trim(fgetss($fp,1024)));
if(strstr($zeile,$wort)) {
$name = substr($name,0,strlen($name)-4);
if (!$ergebnis) echo "Folgende Dateien enthalten Ihren Suchbegriff:<P>";
echo "<A HREF=\"$datei\">$name()</A><BR>";
$ergebnis++;
break;
}
}
fclose($fp);
}

if(!$ergebnis) echo "Keine passenden Dateien gefunden";

}

echo "</BODY></HTML>";

?>

Xardas der Dunkle
18.09.2008, 12:55
Nein du musst die Datei nur als .php abspeichern, also nicht .html oder ähnliches!
Zudem ist der Code imo grausam und aus Großmutterszeiten.

Xero.
18.09.2008, 13:04
Aahhh danke, jetzt funtionierts, aber...
wenn ich etwas eingebe kommt 404^^
kannst du das erklären, bzw was würdest du anders machen, damit der code nicht so veraltet ist?

Xardas der Dunkle
18.09.2008, 13:17
Bitte sehr. Ist aber nicht zu empfehlen für große Verzeichnisstrukturen^^.


<?php
function getResulst($directory = '.', $recursive = true, $extensions = Array('html', 'htm', 'txt'), $files = Array()) {
$dir = dir($directory);
while($file = $dir->read()) {
if(is_dir($dir->path . '/' . $file)) {
if($recursive) {
$files = getResulst($dir->path . '/' . $file, $recursive, $extensions, $files);
}
} elseif($file[0] != '.' && in_array(substr($file, strrpos($file, '.') + 1), $extensions) && is_readable($dir->path . '/' . $file)) {
// Datei durchsuchen
$content = file_get_contents($dir->path . '/' . $file);
if(strpos($content, $_GET['q']) !== false) {
$files[] = $dir->path . '/' . $file;
}
}
}
$dir->close();
return $files;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="de" lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Suchmaschine</title>
</head>
<body>
<h1>Suchmaschine</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<p><input type="text" name="q" /> <input type="submit" value="Suche starten" /></p>
</form>
<?php
if(isset($_GET['q']) && $_GET['q']) {
$results = getResulst();
$length = count($results);

if($length) {
echo ' <p>' . $length . ' Ergebnisse.</p>' . "\n";
echo " <hr />\n<ul>\n";

foreach($results as $result) {
echo ' <li><a href="' . $result . '">' . $result . '</a></li>' . "\n";
}

echo " </ul>\n";
} else {
echo ' <p>Es wurde leider nichts gefunden.</p>';
}
}
?>
</body>
</html>

Xero.
18.09.2008, 13:23
thx, aber:

Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\VR-Pay\Startseite.php on line 11

vorher war auch schon line 3 & 4

Xardas der Dunkle
18.09.2008, 13:29
Ich sage ja, für große Verzeichnisstrukturen nicht zu gebrauchen^^.
Wie weit verschachtelt sich das ganze?

Xero.
18.09.2008, 13:32
1 php-datei
1 js-datei
1 css-datei
3 htm-dateien
1 bild

alles in einem ordner
aber da kommen noch eine Menge htm dateien hinzu...was würdest du denn empfehlen?

Xardas der Dunkle
18.09.2008, 13:33
Und dabei frisst er sich bereits tot? Mh, wie groß sind die HTML-Dateien bitte?^^

Xero.
18.09.2008, 13:35
2 sind 11 kb
und eine ist 4 kb

Xardas der Dunkle
18.09.2008, 13:39
Merkwürdig.
Versuch es nochmal so:

<?php
set_time_limit(0);

function getResulst($directory = '.', $recursive = true, $extensions = Array('html', 'htm', 'txt'), $files = Array()) {
$dir = dir($directory);
while($file = $dir->read()) {
if(is_dir($dir->path . '/' . $file)) {
if($recursive) {
$files = getResulst($dir->path . '/' . $file, $recursive, $extensions, $files);
}
} elseif($file[0] != '.' && ($ext = strrpos($file, '.')) && in_array(substr($file, $ext + 1), $extensions) && is_readable($dir->path . '/' . $file)) {
// Datei durchsuchen
$content = file_get_contents($dir->path . '/' . $file);
if(strpos($content, strtolower($_GET['q'])) !== false) {
$files[] = $dir->path . '/' . $file;
}
}
}
$dir->close();
return $files;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="de" lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Suchmaschine</title>
</head>
<body>
<h1>Suchmaschine</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<p><input type="text" name="q" /> <input type="submit" value="Suche starten" /></p>
</form>
<?php
if(isset($_GET['q']) && $_GET['q']) {
$results = getResulst('.', false);
$length = count($results);

if($length) {
echo ' <p>' . $length . ' Ergebnisse.</p>' . "\n";
echo " <hr />\n<ul>\n";

foreach($results as $result) {
echo ' <li><a href="' . $result . '">' . $result . '</a></li>' . "\n";
}

echo " </ul>\n";
} else {
echo ' <p>Es wurde leider nichts gefunden.</p>';
}
}
?>
</body>
</html>

Xero.
18.09.2008, 13:43
yay jetzt funktioniets, aber kann es sein das so nur die dateinamen und nicht deren inhalt überprüft wird?

Edit: scheint doch so als würde er auch den Inhalt prüfen, aber nach welchen kriterien?
Manche Wörter findet er icht, obwohl sie existiern.

Xardas der Dunkle
18.09.2008, 13:49
Eigentlich nicht. Die Dateinamen prüft er nur auf die korrekte Dateiendung (html, htm oder txt).

EDIT: Er sucht einfach nur nach dem eingegebenen zusammenhängenden Zeichenkette, momentan weder an Leerzeichen aufgetrennt noch kennt er irgendwelche Platzhalter.

Xero.
18.09.2008, 13:53
Kann es sein das die Suchmaschine Wörter in Tags überliest?

Edit: zB Suchmaschine findet er nicht obwohl das ja direkt über der suchmaschine steht^^

Xardas der Dunkle
18.09.2008, 13:58
Das findet er nicht, weil er keine .php-Dateien durchsucht ;).

So mit dem Code durchsucht er sowohl .php-Dateien, trennt den Suchstring anhand von Leerzeichen auf (d.h. er sucht alle Worte einzeln, also eine Oderverknüpfung!) und es ist * als Platzhalter möglich.

<?php
set_time_limit(0);

function searchWord($content, $q) {
foreach(explode(' ', $q) as $sq) {
if( strpos($content, strtolower($sq)) !== false
|| (strpos($sq, '*') !== false && preg_match('/' . str_replace('\\*', '.*', preg_quote($sq, '/')) . '/', $content))) {
return true;
}
}
return false;
}

function getResulst($directory = '.', $recursive = true, $extensions = Array('html', 'htm', 'txt', 'php'), $files = Array()) {
$dir = dir($directory);
while($file = $dir->read()) {
if(is_dir($dir->path . '/' . $file)) {
if($recursive) {
$files = getResulst($dir->path . '/' . $file, $recursive, $extensions, $files);
}
} elseif($file[0] != '.' && ($ext = strrpos($file, '.')) && in_array(substr($file, $ext + 1), $extensions) && is_readable($dir->path . '/' . $file)) {
// Datei durchsuchen
$content = file_get_contents($dir->path . '/' . $file);
if(searchWord($content, $_GET['q'])) {
$files[] = $dir->path . '/' . $file;
}
}
}
$dir->close();
return $files;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="de" lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Suchmaschine</title>
</head>
<body>
<h1>Suchmaschine</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
<p><input type="text" name="q" value="<?php echo htmlspecialchars($_GET['q']); ?>" /> <input type="submit" value="Suche starten" /></p>
</form>
<?php
if(isset($_GET['q']) && $_GET['q']) {
$results = getResulst('.', false);
$length = count($results);

if($length) {
echo ' <p>' . $length . ' Ergebnisse.</p>' . "\n";
echo " <hr />\n<ul>\n";

foreach($results as $result) {
echo ' <li><a href="' . $result . '">' . $result . '</a></li>' . "\n";
}

echo " </ul>\n";
} else {
echo ' <p>Es wurde leider nichts gefunden.</p>';
}
}
?>
</body>
</html>

Xero.
18.09.2008, 14:01
weiß gar nicht wie ich dir danken soll, aber Wörter wie zB Suchmaschine findet er immernoch nicht^^

Edit: bzw verweist die suchmaschine auch manchal auf meine navibar.
Kann man das ausstellen, bzw wenns nicht geht, wird irgendwie der zugriff verweigert.

Xardas der Dunkle
18.09.2008, 14:11
<?php
set_time_limit(0);
function searchWord($content) {
foreach(explode(' ', trim($_POST['q'])) as $sq) {
if (preg_match('/' . str_replace('\\*', '.*', preg_quote($sq, '/')) . '/Ui', $content)) {
return true;
}
}
return false;
}

function getResulst($directory = '.', $recursive = true, $extensions = Array('html', 'htm', 'txt', 'php'), $files = Array()) {
$dir = dir($directory);
while($file = $dir->read()) {
if(is_dir($dir->path . '/' . $file)) {
if($recursive) {
$files = getResulst($dir->path . '/' . $file, $recursive, $extensions, $files);
}
} elseif($file[0] != '.' && ($ext = strrpos($file, '.')) && in_array(substr($file, $ext + 1), $extensions) && is_readable($dir->path . '/' . $file)) {
// Datei durchsuchen
$content = file_get_contents($dir->path . '/' . $file);
if(searchWord($content)) {
$files[] = $dir->path . '/' . $file;
}
}
}
$dir->close();
return $files;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="de" lang="de" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Suchmaschine</title>
</head>
<body>
<h1>Suchmaschine</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p><input type="text" name="q" value="<?php echo (isset($_POST['q']) ? htmlspecialchars($_POST['q']) : ''); ?>" /> <input type="submit" value="Suche starten" /></p>
</form>
<?php
if(isset($_POST['q']) && $_POST['q']) {
$results = getResulst('.', false);
$length = count($results);

if($length) {
echo ' <p>' . $length . ' Ergebnisse.</p>' . "\n";
echo " <hr />\n<ul>\n";

foreach($results as $result) {
echo ' <li><a href="' . $result . '">' . $result . '</a></li>' . "\n";
}

echo " </ul>\n";
} else {
echo ' <p>Es wurde leider nichts gefunden.</p>';
}
}
?>
</body>
</html>

Xero.
18.09.2008, 14:21
Hurraaaaaaaaaaaaaaaaaaaaaaaaaaayyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Glücksspam:p:(;):D:):):D;):p:rolleyes:http://www.multimediaxis.de/images/smilies/old/sm_12.gifhttp://www.multimediaxis.de/images/smilies/old/sm_12.gifhttp://www.multimediaxis.de/images/smilies/old/sm_12.gifhttp://www.multimediaxis.de/images/smilies/old/sm_12.gif
hast mir sehr geholfen danke =)

Edit: kannst du noch machen, dass menü.htm bei den ergebnissen nicht angezeigt wird ?^^

Xardas der Dunkle
18.09.2008, 14:31
[...]
function getResulst($directory = '.', $recursive = true, $extensions = Array('html', 'htm', 'txt', 'php'), $exclude = Array('./menü.htm'), $files = Array()) {
$dir = dir($directory);
while($file = $dir->read()) {
if(in_array($dir->path . '/' . $file, $exclude)) {
continue;
} elseif(is_dir($dir->path . '/' . $file)) {
if($recursive) {
$files = getResulst($dir->path . '/' . $file, $recursive, $extensions, $files);
}
} elseif($file[0] != '.' && ($ext = strrpos($file, '.')) && in_array(substr($file, $ext + 1), $extensions) && is_readable($dir->path . '/' . $file)) {
// Datei durchsuchen
$content = file_get_contents($dir->path . '/' . $file);
if(searchWord($content)) {
$files[] = $dir->path . '/' . $file;
}
}
}
$dir->close();
return $files;
}
[...]

Xero.
18.09.2008, 14:36
Vielen Dank, hast was gut bei mir^^