php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-12-2008, 21:10
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard Verzeichnisse auslesen und auflisten

Hiho,

hab ein kleineres Problem, auch schon ein bisschen gegoogled, komme aber nicht dahinter:

Ich möchte erst alle Unterordner eines Galerie Ordners auslesen, und die Datein aus diesen Unterordnern dann mit Radio-buttons auflisten:

PHP-Code:
<?php

        error_reporting
(E_ALL); #zeig alle Fehler
        
ini_set('display_errors''1'); #sorgt dafür, dass überhaupt Fehler angezeigt werden

        
$pfad="./galerie/";     
        
$verz=opendir ($pfad);
            while (
$file=readdir($verz))
        {
                if(
$file != "." && $file != ".." &&  $file != "temp"
                {
                            
$dir opendir($file);
                            while(
$datei readdir($dir))
                          {
                            if(
$datei != "." && $datei != "..") {
                            
                        echo 
"<input type=\"radio\" name=\"canvas\" value=\"$datei\"><a href=\"$pfad/$datei\" 
target=\"_blank\">$datei</a><br>\n"
;
                                    }
                           }
                        
closedir($dir);
                      
                     
                }
        }

?>
Fehlermeldung:

PHP-Code:
Warningopendir(444) [function.opendir]: failed to open dirNo error in ... (pfad)

Warningreaddir(): supplied argument is not a valid Directory resource in ...(pfad)

Warningclosedir(): supplied argument is not a valid Directory resource in ...(pfad
444 ist der Ordner, der sich testweise im Galerie-Ordner befindet, aber warum ist der nicht zu öffnen?

MFG

Geändert von xserio (18-12-2008 um 21:43 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-12-2008, 21:44
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

opendir(444) sagt doch schon alles. An der Stelle opendir($file) steht in $file nur der Dateiname und nicht der komplette Pfad.
Hint: $pfad.$file
Mit Zitat antworten
  #3 (permalink)  
Alt 18-12-2008, 21:46
SLind
 Newbie
Links : Onlinestatus : SLind ist offline
Registriert seit: Jul 2003
Ort: Bonn
Beiträge: 12
SLind ist zur Zeit noch ein unbeschriebenes Blatt
SLind eine Nachricht über ICQ schicken
Standard

Hi xserio,

in dem Moment in dem Du in Zeile 12 sagst

PHP-Code:
                            $dir opendir($file); 
da ist $file nicht mehr unbedingt ein Verzeichnis, weil Du Sie in Zeile 8 mit einem Verzeichniseintrag überschreibst:

PHP-Code:
            while ($file=readdir($verz)) 
Für solche Zwecke sind rekursiv aufgerufene Funktionen ideal. So würde das in Deinem Fall aussehen:

PHP-Code:
function printDir($pfad)
{
    
// entferne event. abschliessendes slash
    
if ($pfad{strlen($pfad)-1} === '/'$pfad substr($pfad,0,-1);
    
    
$verz=dir($pfad);
    while (
false !== ($file $verz->read()))
    {
        if (
$file != '.' && $file != '..')
        {
            
$file $verz->path.'/'.$file;

            if (
is_dir($file.'/'))
                
printDir($file);
            else
                echo 
                    
'<input'.
                    
' type="radio"'.
                    
' name="canvas"'.
                    
' value="'.$file.'"'.
                    
'>'.
                    
'<a href="'.$file.'"'.
                    
' target="_blank"'.
                    
'>'.
                    
basename($file).
                    
'</a><br />';
        }
    }
    
$verz->close();
}

printDir('galerie/'); 
Rekursiv deshalb, weil sich die Funktion in Zeile 14 selbst aufruft.


Viele Grüße

SLind
Mit Zitat antworten
  #4 (permalink)  
Alt 18-12-2008, 21:57
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von SLind

PHP-Code:
function printDir($pfad)
{
    
// entferne event. abschliessendes slash
    
if ($pfad{strlen($pfad)-1} === '/'$pfad substr($pfad,0,-1);

Zwei Kleinigkeiten: 1. Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat). 2. Die Bedingung kannst du dir sparen:
PHP-Code:
$path rtrim($pathDIRECTORY_SEPARATOR). 
tuts auch.
In puncto Rekursion sei dringlichst auf den Begriff Abbruchbedingung hingewiesen.


Grüße
Mit Zitat antworten
  #5 (permalink)  
Alt 18-12-2008, 22:14
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von PHP-Desaster
opendir(444) sagt doch schon alles. An der Stelle opendir($file) steht in $file nur der Dateiname und nicht der komplette Pfad.
Hint: $pfad.$file
ouh man, da hätte ich auch selber drauf kommen können ;D danke dir

@SLind: deine funktion klappt auch wie gewünscht, danke dafür. Aber welchen Vorteil habe ich davon, das die Funktion rekursiv ist, meine Funktion tut ja im endeffekt das gleiche..?
Mit Zitat antworten
  #6 (permalink)  
Alt 18-12-2008, 22:24
SLind
 Newbie
Links : Onlinestatus : SLind ist offline
Registriert seit: Jul 2003
Ort: Bonn
Beiträge: 12
SLind ist zur Zeit noch ein unbeschriebenes Blatt
SLind eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von Griecherus
Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat).
Gut zu wissen!

Zitat:
Original geschrieben von Griecherus
In puncto Rekursion sei dringlichst auf den Begriff Abbruchbedingung hingewiesen.
Abbruchbedingung: ($file = $verz->read()) === false

Zitat:
Original geschrieben von xserio
@SLind: ... Aber welchen Vorteil habe ich davon, das die Funktion rekursiv ist, meine Funktion tut ja im endeffekt das gleiche..?
Nicht ganz. Die rekursive Funktion zeigt auch Unterverzeichnisse in Unterverzeichnissen in Unterverzeichnissen ... an. Geht also unendlich tief und zeigt somit wirklich alle Dateien an. Deine Funktion endet nach der ersten "Ebene".

Viele Grüße

SLind
Mit Zitat antworten
  #7 (permalink)  
Alt 18-12-2008, 22:26
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ah, gut zu wissen
werd ich bestimmt nochmal brauchen
Mit Zitat antworten
  #8 (permalink)  
Alt 18-12-2008, 22:44
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Griecherus
Zwei Kleinigkeiten: 1. Die {}-Syntax ist bald deprecated. Man hat sich letzten Endes auf [] geeinigt (falls sich das nicht auch wieder geändert hat).
Hast du mal nen Link zu Infos?

mfg
Mit Zitat antworten
  #9 (permalink)  
Alt 18-12-2008, 22:53
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Blackgreetz
Hast du mal nen Link zu Infos?

mfg
Klar, ich habe mich damals hieran orientiert. Ich habe spontan nichts "aktuelleres" aus erster Hand gefunden.


Grüße

EDIT:
Ich sehe gerade ich habe die 1000er Marke geknackt.
Mit Zitat antworten
  #10 (permalink)  
Alt 18-12-2008, 22:56
Blackgreetz
 PHP Junior
Links : Onlinestatus : Blackgreetz ist offline
Registriert seit: Oct 2005
Beiträge: 901
Blackgreetz ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Griecherus
Klar, ich habe mich damals hieran orientiert.
Reicht mir schön - danke

..und glw
Mit Zitat antworten
  #11 (permalink)  
Alt 18-12-2008, 22:59
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Man kann sich es auch komplizierter machen:

PHP-Code:

error_reporting
(E_ALL E_STRICT);
ini_set('display_errors'TRUE);

// Einstellungen
$filter     '/\.jpg$/i';  // regex
$such_in    './Galerie';   // Verzeichnis, welches durchsucht werden soll

class RegexFilter extends FilterIterator
{
  protected 
$regex '';

  public function 
__construct(Iterator $iterator,$regex)
  {
    
$this->regex $regex;
    
parent::__construct($iterator);
  }

  public function 
accept()
  {
    return (bool) 
preg_match($this->regex,$this->current());
  }
}

// Rekursivgedöns
$dir =  new RegexFilter(
            new 
RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in)),$filter);

foreach(
$dir as $datei)
 echo 
"<input type='radio' name='canvas' value='$datei'> $datei <br>"
__________________
Wir werden alle sterben
Mit Zitat antworten
  #12 (permalink)  
Alt 18-12-2008, 23:32
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Warum nicht gleich den "echten" RegexIterator?
Mit Zitat antworten
  #13 (permalink)  
Alt 18-12-2008, 23:53
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Weil er weder ein Recursiv noch ein Directory Iterator ist.
Würde ich mal so sehen...
Ich wüsste nicht wie man ihn dran baut...
Und schließlich will ich ja auch filtern
__________________
Wir werden alle sterben

Geändert von combie (18-12-2008 um 23:56 Uhr)
Mit Zitat antworten
  #14 (permalink)  
Alt 19-12-2008, 00:58
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hrm, jetzt steht ich gleich vor nem nächsten problem, wie ich aus den einzelnen Verzeichnissen die Datein nach der Auflistung lösche :/

PHP-Code:

<?php

        error_reporting
(E_ALL); #zeig alle Fehler
        
ini_set('display_errors''1'); #sorgt dafür, dass überhaupt Fehler angezeigt werden

        
$pfad="./galerie/";     
        
$verz=opendir ($pfad);
            while (
$file=readdir($verz))
        {
                if(
$file != "." && $file != ".." &&  $file != "temp"
                {
                        echo 
"<td valign=\"top\"><p class=\"galüber\" align=\"left\"><b><u>Galerie: $file</u></b><br>
                        <form method=\"post\" action=\"backend.php\">
                        "
;
                            
                            
$dir opendir($pfad.$file);
                            while(
$datei readdir($dir))
                          {
                            if(
$datei != "." && $datei != "..") {
                            
                        
                        echo 
"<input type=\"radio\" name=\"loeschen\" value=\"$datei\">
                        <a class=\"gallinks\" href=\"$pfad$file/$datei\"     target=\"_blank\">
                        <span id=\"gallinks\">$datei</a></span><br>\n"
;
                                    }
                           }
                        
closedir($dir);
                        
                            
$pfadtwo $pfad.$file."/";

                            if (isset( 
$_POST['loeschen'] ))  {
                            
$tempfile $_POST['loeschen'];
                            
unlink($pfadtwo.$tempfile);
                            echo 
"<i>$tempfile</i> gelöscht";
                            }
                        
                        echo 
"<input type=\"submit\" value=\"L&ouml;schen\">
                        </form></p></td>"
;
                              
                     
                }
        }

?>
so sieht das momentan aus... Problem ist, das er natürlich in jeder Spalte der Tabelle, also in jedem Unterordner nach der Datei sucht und die löschen will, ich frag mich, wie ich die Zuweisung auf genau diesen Ordner hinbekommen soll...

mfg

Geändert von xserio (19-12-2008 um 01:27 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 19-12-2008, 01:30
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Ach, ich würde ja den Code von mir nehmen. Von Radio auf Checkbox umbauen. Und dabei gleich aus dem Boxnamen ein Array machen. Per Foreach Schleife kannste dann dutzende von Dateien auf einen Schlag löschen.
Musst nur ein bisschen aufpassen, dass dir kein "falscher" Dateiname untergeschoben wird.
__________________
Wir werden alle sterben
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:01 Uhr.