ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
428
428
EMPFEHLEN
-
Hallo zusammen.
Ich habe ein Problem in einem Skript, wo ich die Ursache nicht so recht finden kann. Kurze Erklärung, was dieses Skript macht: Es werden Dateinamen in einem Verzeichnis ausgelesen und mit einer vorhandenen Ersetzliste verglichen. Ist die Datei als Name in dieser Liste vorhanden, wird der Ersatzname daraus genommen und später das ganze als Links dargestellt.
Wird nun diese Seite aufgerufen, die dieses Skript enthält, bekomme ich nur folgenden Fehler angezeigt:
Das ist der Quellcode dazu:Warning: readdir(): 4 is not a valid Directory resource in /var/www/vhosts/wh1022.ath.cx/httpdocs/blatest/index.php on line 18
Zeile 18 ist in diesem Fall:PHP-Code:<!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=UTF-8" />
<title>Unbenanntes Dokument</title>
</head>
<body>
<?php
$file = file('replaces.txt');
foreach($file as $replace)
{
list($find,$replace) = explode(" => ",trim($replace));
$replaces[$find] = $replace;
}
$dir = opendir("tempss");
if ($dir)
{
while($file = readdir($dir))
{
if ($file != '.' && $file != '..')
{
if (empty($replaces[$file]))
$name = $replaces[$file];
else
$name = $file;
echo "<a href=\"".$file."\">".$name."</a><br>";
}
closedir($dir);
}
}
echo "1: $file<br>";
echo "2: $dir<br>";
echo "3: $replace<br>";
echo "4: $replaces<br>";
echo "5: $find<br>";
echo "6: $name";
?>
</body>
</html>
Im Moment befinde ich mich noch in der Testpahse, weshalb ich dies nur in eine unschöne Seite verpackt habe.PHP-Code:while($file = readdir($dir))
Könnt ihr mir sagen, wo da der Fehler ist?
-
21.07.10 14:00 #2
Die Funktion opendir ist eindeutig fehlgeschlagen.
Vielleicht existiert das Verzeichnis garnicht.mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
21.07.10 14:05 #3
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Das Problem liegt m.E. eher darin, dass in der while-Schleife am Ende closedir() aufgerufen wird. Dann ist das Handle futsch und readdir() funktioniert nicht mehr.
Würde opendir() nicht funktioniert, würde das if($dir) das ja abfangen
-
21.07.10 14:09 #4
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Kann es sein das die Pfadangabe für "tempss" u.a. falsch ist.
Wenn ich folgende Änderung vornehme erscheint zumindest kein Fehler mehr:
Habe es allerdings ohne Dateien im Verzeichnis getestet. Ob die Funktion selbst so richtig funktioniert weiß ich nicht.PHP-Code:$dir = opendir("./tempss/");
if (is_dir($dir))
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
21.07.10 14:11 #5
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Naja, wenn ich cd tempss eingebe, gelange ich ja auch ins Verzeichnis. Und letztendlich genau das macht opendir() ja erstmal. Die Abfrage is_dir($dir) kannst du dir auch sparen, da opendir() das auch prüft. Und ohne Dateien geht er ja erst gar nicht in die while-Schleife
-
Tim hat Recht. closedir() gehört ausserhalb der while Schleife.Das Problem liegt m.E. eher darin, dass in der while-Schleife am Ende closedir()
Wenn opendir nicht funktionieren würde hätte es vermutlich sowieso einen Fehler geworfen und noch dazu gibt opendir im Fehlerfall false zurück, folglich wäre das script dann nie beim readdir() angekommen.
//edit
Die while Bedingung solltest du übrigens eher so schreiben:
Den Grund dafür findest du in der readdir doku.PHP-Code:while(false !== ($file = readdir($dir)))
Diese Funktion kann sowohl das boolsche FALSE zurückliefern, als auch einen nicht-boolschen Wert, wie zum Beispiel 0 oder "", der von einem einfachen if-Statement als FALSE ausgewertet wird. Weitere Informationen entnehmen Sie bitte dem Abschnitt über die boolschen Typen. Benutzen Sie deshalb den === Operator, um den Rückgabewert dieser Funktion zu überprüfen.Geändert von rd4eva (21.07.10 um 14:17 Uhr)
In order to understand recursion, one must first understand recursion.
-
21.07.10 14:16 #7mfg ComFreek
Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
[PHP] Überprüfen, ob Website erreichbar • Sicherheit in PHP-Codes schaffen • Google Chrome-Extension für tutorials.de • json_compress()
-
Danke euch für eure schnellen und hilfreichen Antworten.
Ich habe das Ganze jetzt soweit geändert, dass erstmal überhaupt Links erscheinen (auch wenn deren Namen noch nicht richtig sind). Funktionsfähig ist das mit diesem Script:
Ändere ich jetzt aber die Zeile der while-Schleife so um, wie rd4eva es vorgeschlagen hat, bekomme ich erneut eine Fehlermeldung angezeigt:PHP-Code:<?php
$file = file('replaces.txt');
foreach($file as $replace)
{
list($find,$replace) = explode(" => ",trim($replace));
$replaces[$find] = $replace;
}
$dir = opendir("./tempss/");
while($file = readdir($dir))
{
if ($file != '.' && $file != '..')
{
if (empty($replaces[$file]))
$name = $replaces[$file];
else
$name = $file;
echo "<a href=\"".$file."\">".$name."</a><br>";
}
}
closedir($dir);
?>
An den Rechten kann es eigentlich nicht liegen, ich habe dem gesamten Ordner sowie den Unterordner mit Chmod 777 Vollzugriff gegeben.Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Fatal error: Unknown: Failed opening required '/var/www/vhosts/wh1022.ath.cx/httpdocs/blatest/index.php' (include_path='.:') in Unknown on line 0
-
21.07.10 14:52 #9
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Den Gedanken mit dem !== false hatte ich auch, allerdings dachte ich mir, dass jene Ausdrücke, die PHP als false wertet doch für einen Dateinamen eher unwahrscheinlich sind. Wenn deine Dateien also nicht 0 oder false heißen, kannst du die normale Abfrage lassen. Weshalb da allerdings dann diese Fehlermeldung kommt, während es mit der "einfachen" Bedingung funktioniert, kann ich auch nicht sagen...
-
Grundsätzlich gebe ich dir da recht. Allerdings sollte man nicht vergessen das es nicht nur um Dateinamen sondern auch Ordnernamen geht. Und ein Ordner der 0 heisst ist jedenfalls mMn schon nicht mehr so unwahrscheinlich.die PHP als false wertet doch für einen Dateinamen eher unwahrscheinlich sind.
Das kann ich mir ehrlich gesagt auch nur schwer erklären.Warning: Unknown: failed to open stream: Permission denied in Unknown on line 0
Fatal error: Unknown: Failed opening required '/var/www/vhosts/wh1022.ath.cx/httpdocs/blatest/index.php' (include_path='.:') in Unknown on line 0
Wem hast du denn Vollzugriff verpasst? Ich frage das deshalb weil der Webserver oft als autarker Benutzer läuft. Diesem müsstest du dann den Vollzugriff verpassen.In order to understand recursion, one must first understand recursion.
-
21.07.10 15:11 #11
- Registriert seit
- Apr 2009
- Ort
- Düsseldorf (NRW)
- Beiträge
- 508
Wohl nicht mehr so unwahrscheinlich wie bei Dateinamen. Deshalb sollte er in seinem Fall erstmal wissen, was in dem Ordner so drin sein kann, bis das andere Problem gelöst ist und man es sauber lösen kann.
Es hängt schon irgendwie mit den Rechten zusammen, die Frage ist nur die Rechte auf was. Das gibt die Fehlermeldung ja leider nicht her. Die zweite Fehlermeldung verstehe ich gerade überhaupt nicht... Ist das Script, das du geposted hast, die index.php oder gibt es noch weitere php-Dateien, in denen du ein bisschen rumincludest?An den Rechten kann es eigentlich nicht liegen, ich habe dem gesamten Ordner sowie den Unterordner mit Chmod 777 Vollzugriff gegeben.
-
-
Am Ende lag es dann an den Rechten der PHP. Da andere Dateien auch ohne Probleme funktionieren, dachte ich, dass es daran nicht liegen kann. Habe jetzt die Rechte dieser PHP verändert (die waren auf 000) und mit den richtigen Rechten funktioniert es dann auch.
Am Ende werden in den Ordner nur normale Dateien kommen.
So an sich funktioniert jetzt das Skript, es gibt nur noch zwei Dinge, die geändert werden müssen: Die Links haben noch den gleichen Namen wie die Dateien selber, es wird noch nichts ersetzt.
Aber das sollte kein Thema sein, das zu ändern. Und der Link ist noch verkehrt. Hier muss nur noch im Link selbst was geändert werden.
Das Hauptproblem ist aber gelöst, dafür danke ich euch.
Ähnliche Themen
-
Verzeichnis rekursiv auslesen, readdir-Fehler?
Von Stephan Liebig im Forum PHPAntworten: 3Letzter Beitrag: 22.03.10, 15:45 -
Kein Zugang ohne gültiges Passwort ! Please Help
Von Roma3 im Forum Visual Basic 6.0Antworten: 6Letzter Beitrag: 14.05.08, 17:52 -
Kein gültiges DateTime für Update
Von Deletemaster im Forum .NET DatenverwaltungAntworten: 2Letzter Beitrag: 08.03.07, 22:24 -
readdir funktioniert nur im selben Verzeichnis?
Von alloisxp im Forum PHPAntworten: 0Letzter Beitrag: 13.02.07, 02:40 -
Kein gültiges Argument? Wieso?
Von Nimroy im Forum PHPAntworten: 3Letzter Beitrag: 17.03.04, 21:49





Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren