php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2008

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.08.2008, 17:43  
Neuer Benutzer
 
Registriert seit: 21.08.2008
Beiträge: 8
naweko befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] readdir() erzeugt trotz korrekter Ausgabe einen Fehler

Hallo,

ich habe folgende Abfrage:

PHP-Code:
function ff_vorlagen() {
        
$handle        opendir($this->pfad);
        
$vorlagen     '';
        
$vorlagen .= '<div class="tabellenAdmin"><table>';

        while (
false !== ($vl readdir($handle))) {
        
            if (
$vl != '.' && $vl != '..' && !empty($vl)) {
                
                
$pfad            $this->pfad.$vl;
                
$vorschaubild    $this->pfad.$vl.'/vorschaubild.jpg';
                
$css            $this->pfad.$vl.'/gestaltung.css';
                
$vorlagen .= '<tr><td><p>';
                
                if (
file_exists($vorschaubild)) {
                    
$vorlagen .= '<img width="200px" src="'.$vorschaubild.'"><br>';
                }
                
                
$vorlagen .= '</p></td><td>';
                
$vorlagen .= '<p>Angaben zur Vorlage:</p>';
                
$vorlagen .= '<p>';
                
$vorlagen .= $this->ff_vorlagen_daten($css);
                
$vorlagen .= '</p>';
                
$vorlagen .= '<p>Die komplette Vorlage finden Sie unter:<br>'.$this->pfad.$vl.'</p>';
                
$vorlagen .= '<input type="hidden" name="vorlage" value="'.$vl.'">';
                
$vorlagen .= '<p><input type="submit" value="Vorlage verwenden" name="aktualisieren" /></p>';
                
$vorlagen .= '</td></tr>';        
                
            }
            
        }
        
$vorlagen .= '</table></div>';
        
closedir($handle);

        return 
$vorlagen;
        
    } 
PHP-Code:
$this->pfad 
wird vorher korrekt initialisertDas ganze soll ein Ausleseverfahren für Templates werden. Es wird auch alles korrekt ausgegeben. Trotzdem wird in der error_log folgende Fehlermeldung ausgegeben:

Code:
PHP Warning:  readdir(): supplied argument is not a valid Directory resource in /var/www/web3/html/admin/klassen/klasse_vorlagen.php on line 49
Zeile 49 ist das hier:

PHP-Code:
while (false !== ($vl readdir($handle))) { 
Berechtigungen sind alle richtig gesetzt (Ordner = 0755)
save_mode = Off

Geändert von naweko (21.08.2008 um 17:47 Uhr).
naweko ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 21.08.2008, 20:52  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Schreib doch vor die Schleife mal:
PHP-Code:
if (false === readdir($handle))
  {
  
var_dump ($handle$this->pfad);
  } 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 21.08.2008, 22:27  
Neuer Benutzer
 
Registriert seit: 21.08.2008
Beiträge: 8
naweko befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Schreib doch vor die Schleife mal:
PHP-Code:
if (false === readdir($handle))
  {
  
var_dump ($handle$this->pfad);
  } 
Dann bekomme ich

Code:
bool(false) string(0) ""
was meiner Interpretation nach heißt, dass die Schleife einen "Leerlauf" macht, sprich sich etwas im Verzeichnis befindet, was mitgezählt wird. Der String hat folglich keinen Wert. Das erklärte die Fehlermeldung. Da ist aber definitiv nur ein manuell angelegter Ordner drin.

Ein Gedanke von mir ist, daß ".." mitgezählt wird? Also der Verweis, der mich eine Ebene höher bringt? Kann das sein?

Hat jemand entsprechende Erfahrung damit?
naweko ist offline  
Alt 21.08.2008, 22:31  
Erfahrener Benutzer
 
Registriert seit: 20.08.2008
Beiträge: 119
sharp befindet sich auf einem aufstrebenden Ast
Standard

Jup er zahlt auch "." und ".." als Ordnerinhalt musst halt mit einem if ausschließen
sharp ist offline  
Alt 21.08.2008, 22:40  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Du redest aber nicht von der geposteten while Schleife, oder? Wie der Dump zeigt ist $this->pfad leer und das erzeugt das Problem.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 22.08.2008, 00:27  
Neuer Benutzer
 
Registriert seit: 21.08.2008
Beiträge: 8
naweko befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Du redest aber nicht von der geposteten while Schleife, oder? Wie der Dump zeigt ist $this->pfad leer und das erzeugt das Problem.
Wenn ich den Dump in der while-Schleife ausführe bekomme ich

Code:
resource(17) of type (stream) string(12) "../vorlagen/" resource(17) of type (stream) string(12) "../vorlagen/" resource(17) of type (stream) string(12) "../vorlagen/"
Wenn ich ihn in der if-Schleife ausführe bekomme ich

Code:
resource(17) of type (stream) string(12) "../vorlagen/"
Ist ja auch logisch. In der while-Schleife wird "." und ".." ja auch noch nicht gefiltert.

Vor der while-Schleife ist es leer.
Ich stehe voll auf dem Schlauch.

Hier ist mal die ganze "Klasse" (Hab noch nicht viel mit Klassen gemacht und ist noch nicht fertig)

PHP-Code:
class ff_vorlagen {
    
    private 
$pfad '';
    
    function 
ff_vorlagen_pfad($pf) {
        
$this->pfad $pf;
    }
    
    function 
ff_vorlagen_daten($datei) {
        
$laenge        ceil(filesize($datei));
        
$datei         fopen($datei"r");
        
$b_datei     fread($datei$laenge);
        
$x            = array("Vorlage Name: ","Vorlage URI: ","Beschreibung: ","Version: ","Autor: ","Autor URI: ");
        
$ausg        '';
        foreach (
$x as $y) {
            
$z            explode($y$b_datei);
            
$z            explode("\n"$z[1]);
            
$post_such    = array("! !","!:!");
            
$post_ers    = array("_","");
            
$post        preg_replace($post_such$post_erstrim($y));
            
$ausg        .= '<input type="hidden" name="'.strtolower($post).'" value="'.trim($z[0]).'">';
            
$ausg        .= '<strong>'.$y.'</strong> '.trim($z[0]).'<br>';
        }
        return 
$ausg;
        
fclose($datei);
    }
    
    function 
ff_vorlagen_aktuell() {
        
        
$vorlage mysql_fetch_array(mysql_query("SELECT vorlage FROM ns_grundeinstellungen")) or die(mysql_error());
        
$stammpfad $this->pfad.$vorlage['vorlage'].'/';
        
        
$aktuell '';
        
$aktuell .= '<table>';
        
$aktuell .= '<tr><td>'.$vorlage['vorlage'].'</td></tr>';
        
$aktuell .= '</table>';
        
        return 
$aktuell;
                
    }
            
    function 
ff_vorlagen() {
        
$handle        opendir($this->pfad);
        
$vorlagen     '';
        
$vorlagen .= '<div class="tabellenAdmin"><table>';
        
        while (
false !== ($vl readdir($handle))) {

            if (
$vl != '.' && $vl != '..' && !empty($vl)) {

                
$pfad            $this->pfad.$vl;
                
$vorschaubild    $this->pfad.$vl.'/vorschaubild.jpg';
                
$css            $this->pfad.$vl.'/gestaltung.css';
                
$vorlagen .= '<tr><td><p>';
                
                if (
file_exists($vorschaubild)) {
                    
$vorlagen .= '<img width="200px" src="'.$vorschaubild.'"><br>';
                }
                
                
$vorlagen .= '</p></td><td>';
                
$vorlagen .= '<p>Angaben zur Vorlage:</p>';
                
$vorlagen .= '<p>';
                
$vorlagen .= $this->ff_vorlagen_daten($css);
                
$vorlagen .= '</p>';
                
$vorlagen .= '<p>Die komplette Vorlage finden Sie unter:<br>'.$this->pfad.$vl.'</p>';
                
$vorlagen .= '<input type="hidden" name="vorlage" value="'.$vl.'">';
                
$vorlagen .= '<p><input type="submit" value="Vorlage verwenden" name="aktualisieren" /></p>';
                
$vorlagen .= '</td></tr>';        
                
            }
            
        }
        
closedir($handle);
        
$vorlagen .= '</table></div>';

        return 
$vorlagen;
        
    }
    

So wird der Pfad in dem Script, in dem die Klasse eingebunden wird angegeben:

PHP-Code:
$vorlagen->ff_vorlagen_pfad('../vorlagen/'); 
naweko ist offline  
Alt 22.08.2008, 00:50  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.988
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Wenn ich den Dump in der while-Schleife ausführe bekomme ich
Schon klar. While wird ja für die ungültige Pfadangabe nie ausgeführt
Zitat:
Wenn ich ihn in der if-Schleife ausführe bekomme ich
Es gibt keine IF-Schleifen (Mythos IF-Schleife)

Offenbar wird an irgendeiner Stelle Deines Programmes ff_vorlagen aufgerufen, nachdem ein falscher (leerer) Pfad mit ff_vorlagen_pfad gesetzt wurde.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist gerade online  
Alt 22.08.2008, 08:41  
Neuer Benutzer
 
Registriert seit: 21.08.2008
Beiträge: 8
naweko befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
Schon klar. While wird ja für die ungültige Pfadangabe nie ausgeführt

Es gibt keine IF-Schleifen (Mythos IF-Schleife)

Offenbar wird an irgendeiner Stelle Deines Programmes ff_vorlagen aufgerufen, nachdem ein falscher (leerer) Pfad mit ff_vorlagen_pfad gesetzt wurde.
Das Aufrufen der Klasse in der Datei vorlagen.php erfolgt so:

PHP-Code:
require("klassen/klasse_vorlagen.php");
$vorlagen = new ff_vorlagen();

$vorlagen->ff_vorlagen_pfad('../vorlagen/');
    
echo 
'<h2>Aktuelle Vorlage</h2>';
echo 
$vorlagen->ff_vorlagen_aktuell();
    
echo 
'<h2>Bitte w&auml;hlen Sie eine Vorlage</h2>';
echo 
$vorlagen->ff_vorlagen(); 
Mehr Code gibt es dazu nicht. Die Klasse heißt, genauso wie die hauptausführende Funktion darin ff_vorlagen(). Ist das ein Problem? Wie sieht die Klasse für euch insgesamt aus? Ist da Quatsch drin?

Und ja, if ist keine Schleife...
naweko ist offline  
Alt 22.08.2008, 09:10  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von naweko Beitrag anzeigen
Die Klasse heißt, genauso wie die hauptausführende Funktion darin ff_vorlagen()
Mit new() startest du ja den Konstruktor schon mal ein erstes mal und zwar ohne Parameter. Und ob opendir() geklappt hat, frägst du natürlich besser dort ab, und nicht erst bei readdir():
PHP-Code:
$handle        opendir($this->pfad) or exit("Opendir '$this->pfad' failed"); 
__________________
Gruss
L
lazydog ist offline  
Alt 22.08.2008, 09:32  
Neuer Benutzer
 
Registriert seit: 21.08.2008
Beiträge: 8
naweko befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von lazydog Beitrag anzeigen
Mit new() startest du ja den Konstruktor schon mal ein erstes mal und zwar ohne Parameter. Und ob opendir() geklappt hat, frägst du natürlich besser dort ab, und nicht erst bei readdir():
PHP-Code:
$handle        opendir($this->pfad) or exit("Opendir '$this->pfad' failed"); 
Du hast recht. Bei der Prüfung bezüglich opendir() bekomme ich

Code:
Opendir '' failed
Aber warum gibt er dann später in der while-Schleife den einen Ordner, der im Verzeichnis /vorlagen liegt richtig aus?

Also müßte ich schon beim ersten Starten des Konstruktors mit new() den Parameter '../vorlagen/' mitschicken? Meinst Du das?
naweko ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
löschen ausgabe bei fehler robydog PHP Tipps 2008 8 02.05.2008 23:14
preg_replace erzeugt keine Ausgabe peng PHP-Fortgeschrittene 3 09.09.2006 17:43
Fehler bei echo ausgabe nieselfriem PHP Tipps 2006 10 02.07.2006 19:05
scrip für news ausgabe - fehler PHP Tipps 2007 4 11.11.2005 09:02
Alternativer Befehl, wenn Fehler erzeugt wurde? Jacks Rache PHP Tipps 2005-2 4 31.10.2005 12:50
ausgabe fehler? Matthiasnet PHP Tipps 2005-2 2 02.09.2005 19:20
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
finde fehler trotz manual nicht: SELECT lindner Datenbanken 3 13.03.2005 08:39
Fehler trotz richtiger Syntax Datenbanken 8 11.03.2005 17:47
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
readdir(): supplied argument is not a valid directory resource, readdir(): supplied argument is not a valid directory resource in, readdir(): supplied argument is not a valid directory, warning: readdir(): supplied argument is not a valid directory resource, readdir(): is not a valid directory resource, warning: readdir(): 4 is not a valid directory resource, readdir supplied argument is not a valid directory resource, readdir(): supplied argument is not a valid directory resourc, readdir supplied argument is not a valid directory resource in, warning: readdir(): supplied argument is not a valid directory resource in, \readdir(): supplied argument is not a valid directory\, readdir(): 14 is not a valid directory resource, readdir is not a valid directory resource, \readdir(): supplied argument is not a valid directory resource in\, \readdir(): supplied argument is not a valid directory resource \, readdir(): 16 is not a valid directory resource in, \readdir(): supplied argument is not a valid directory resource\, jsn jsn readdir(): supplied argument is not a valid directory resource, readdir(): 10 is not a valid directory, warning: readdir(): 4 is not a valid directory resource in

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum