Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] "Platzhalter" für if?/pseudo-code benötigt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] "Platzhalter" für if?/pseudo-code benötigt

    Moin,
    ich arbeite immernoch an einem Art PHP Ordner Explorer.
    Da dort immer wie "Ordner" . und .. ausgegeben werden, schließe ich diese aus:
    PHP-Code:
    if ($file != "." && $file != ".." && $file != "readme.txt")
    {
    bla();

    Soweit so gut, ich möchte nun alle Dateien mit der Endung *.desc ausblenden. Die haben kein statischen Namen, also ich kann nicht eine einzelne ausschließen wie oben die readme.txt
    Gibts da eine ARt Platzhalter (was ich bezweifle), oder wie muss ich das lösen?

    Zweiteres: Wenn dann eben solch eine desc Datei in dem Ordner ist, soll bei Klick auf den Link einer Datei (die genauso heißt wie die .desc) nochmal eine seite bzw unterseite öffnen, die dann die beschreibung dieser desc anzeigt und den Link zur richtigen Datei enthält.
    Mein php code zum Ausgeben der Dateien sieht bisher so aus:
    PHP-Code:
    foreach($dateiarray as $datei)
        {
            
            
    $filetime filemtime($newscriptdir."/".$getdir."/".$datei);
            
    $filesize filesize($newscriptdir."/".$getdir."/".$datei);
            
    $filesize_mb round(($filesize 1048576), 2);
            echo 
    '
            <table width="100%" style="background-color:#8ec5e1; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
            <img src="images/file.png" alt="Datei" />&nbsp;<a href="'
    .$getdir.'/'.$datei.'">'.$datei.'</a><br></td>
            <td width="25%">'
    .$filesize_mb.' MB</td><td width="25%">'.date("d.m.Y, H:i"$filetime).'</td></tr></table>';
        } 
    Allerdings blicke ich grad nicht ganz, wie ich das am besten löse. Den Dateinamen auslesen und dann eben nach einer .desc sollte ich hinbekommen (basename($pfadzurzipdatei); und dann eben ein .desc anhängen)
    Aber irgendwie fehlt mir da noch ein entscheidender Denkansatz..

    hm..vielleicht sollte ich nicht früh morgens arbeiten *gähn*

    Wäre dankbar für für Hilfe, PseudoCodes oder sonstiges!
    "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

  • #2
    Soweit so gut, ich möchte nun alle Dateien mit der Endung *.desc ausblenden. Die haben kein statischen Namen, also ich kann nicht eine einzelne ausschließen wie oben die readme.txt
    Gibts da eine ARt Platzhalter (was ich bezweifle), oder wie muss ich das lösen?
    Das löst du am Besten mit einem regulären Ausdruck.

    Aber irgendwie fehlt mir da noch ein entscheidender Denkansatz..
    Wo hängst du denn genau?
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Achja..genau.
      Wie bau ich das aber in die if Abfrage ein? Wohl nicht mit einer replace funktion?
      Ich möchte einfach, dass alles mögliche vor dem .desc stehen kann! Bei der Dokumentation steht, für ein beliebiges Zeichen einen ".". Allerdings ja nur EINS?

      Tschuldige, blick das nicht ganz durch

      Zum zweiten..da probiere ich noch ein bisschen rum!
      "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

      Kommentar


      • #4
        PHP: preg_match - Manual

        Ein Tutorial zu regulären Ausdrücken findest du z.B. unter Der RegExp-Evaluator - RegExp-Tutorial .
        [URL]http://hallophp.de[/URL]

        Kommentar


        • #5
          würde nicht auch ein
          PHP-Code:
          if(substr($dateiname, -55) == '.desc'
          ebenfalls reichen?

          Kommentar


          • #6
            Solange es funktioniert!

            Und performanter ist es auch!
            [URL]http://hallophp.de[/URL]

            Kommentar


            • #7
              Hatte es jetzt so:
              PHP-Code:
              if ($file != "." && $file != ".." && $file != "readme.txt" && preg_match("/.desc\b/i"$file)) 
              @nuna: Ach klar, wieso einfach wenns auch kompliziert geht..naja danke, dann nehm ich das und falls ich nochmal Hilfe brauch, schreib ich

              edit: Wenn ich da == nehme, wird nichs angezeigt. Wenn ich != als Operator nehme, wird wieder alles angezeigt, aber eben ALLES!
              PHP-Code:
              if ($file != "." && $file != ".." && $file != "readme.txt" && substr($file, -44) != '.desc'
              edit2: Hab obere Methode genommen, funktioniert auch (abe rmit einem "!" noch vor dem preg_match)
              Wegen der Perfomance sollte das nicht so schlimm sein, läuft nur lokal
              "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

              Kommentar


              • #8
                ..so jetzt hänge ich aber wirklich fest.
                Also, hab den Dateipfad angehängt (?dir=builds/cccoinout) und ggf wird noch ein &desc=ccbscd-dist-build.1865 drangehängt. wenn das dranhängt, soll die desc datei aufgerufen werden bzw ausgelesen und eingebunden werden - die dateiliste hingegen wird nicht angezigt. (die .desc heißt genauso wie eben mit desc übergeben)

                ALso öffne ich erst den angegeben ordner und prüfe ob da die datei drinnen ist; wenn ja wird sie ausgegeben. Allerdings bekomm ich erst nicht richtig hin; hab den großteil von der dateiliste übernommen, weil so ganz gebildet bin ich ja noch nicht!

                PHP-Code:
                $dirPath 'builds';
                $getdir $_GET['dir']; 
                $descname $_GET['desc']; 
                hier erstmal die GET variablen

                PHP-Code:
                $scriptdir dirname(__FILE__);
                $newscriptdir str_replace("\\""/"$scriptdir);
                //Arrayvariablen
                $ordnerarray = array();
                $dateiarray = array();
                $descarray = array(); 
                arrays definiert

                PHP-Code:
                //verzeichnis öffnen und Dateien auslesen
                    
                if ($handle opendir($getdir)) 
                    {
                        while (
                false !== ($file readdir($handle))) 
                            {
                        
                                if (!
                is_dir("$getdir/$file")) {
                                
                // Datei
                                
                $descarray[] = $file;
                            }
                            }
                            
                closedir($handle);
                    }
                    
                $dateidesc $descarray;
                    
                $filedir $newscriptdir."/".$getdir."/".$dateidesc//Dateiverzeichnis
                    
                $path_parts pathinfo($filedir); //Pfadinfo
                    
                $dateiendung $path_parts['extension']; //Dateiendung
                    
                $dateiname $path_parts['filename']; //Dateiname ohne Endung
                    
                $descdatei $newscriptdir."/".$getdir."/".$dateidesc.".desc"//Neuer Dateiname
                    
                $zeilendesc file($descdatei); 
                verzeichnis wird geöffnet und in variablen gespeichert (die letzte zeile hier ist zeile 103)

                PHP-Code:
                if(isset($descname) AND is_file($descdatei))
                    {
                            
                $zeilendesc file($descdatei);    
                            echo 
                "<div class=\"readme\">";
                            echo 
                "<b>readme.txt</b> - ".date("d.m.Y"$filetime)."<br/>";
                            foreach (
                $zeilendesc as $zeile)
                                {
                                echo 
                $zeile."<br/>";
                                }    
                            echo 
                "</div><br/><br/>";
                    
                        } 
                ausgeben der *.desc

                ALs Fehlermeldung erhalte ich das:

                Warning: file(D:/Programme/xampp/htdocs/php_arbeiten/builds/ccbscd/Array.desc) [function.file]: failed to open stream: No such file or directory in D:\Programme\xampp\htdocs\php_arbeiten\index.php on line 103

                Das Array kommt von $dateidesc, aber wieso wird in dieser Array gespeichert?

                Wo liegt mein Fehler/meine Fehler?

                Verzeiht mir unoptimierten Quellcode oder sonstige "Hols den Teufel was hat der denn da gemacht" Momente
                "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                Kommentar


                • #9
                  PHP-Code:
                                  $descarray[] = $file;

                  ..


                     
                  $dateidesc $descarray;
                      
                  $filedir $newscriptdir."/".$getdir."/".$dateidesc//Dateiverzeichnis 
                  $descarray ist ein Array (von Strings), du verwendest es aber wie einen String...
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Ja, weil es doch nur eine Datei dieses Namens gibt, und..ähm, ja soll ich dann einfach das Array weg nehmen?
                    "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                    Kommentar


                    • #11
                      Zitat von wernersbacher Beitrag anzeigen
                      Ja, weil es doch nur eine Datei dieses Namens gibt, und..ähm, ja soll ich dann einfach das Array weg nehmen?
                      Du packst einen Dateinamen in ein Array, also musst du ihn auch zur weiteren Verarbeitung wieder aus diesem Array rausholen. Musst schon konsequent bleiben
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Jop, habs jetzt hinbekommen..bzw den Ansatz.

                        Das Feld wird alleine angezeigt, auch die desc; allerdings IMMER die gleiche. Ob der Pfad da ist spiel keine Rolle; eine andere geht auch nicht.

                        Hier mal mein Code:
                        PHP-Code:
                        if ($handle opendir($getdir)) 
                            {
                                while (
                        false !== ($file readdir($handle))) 
                                    {
                                
                                        if (!
                        is_dir("$getdir/$file")) {
                                        
                        // Datei
                                        
                        $dateidesc[] = $file;
                                    }
                                    }
                                    
                        closedir($handle);
                            }
                            
                        $descarray_num array_search($descname$dateidesc); 
                            
                        $filedir $newscriptdir."/".$getdir."/".$dateidesc[$descarray_num]; //Dateiverzeichnis
                            
                        $path_parts pathinfo($filedir); //Pfadinfo
                            
                        $dateiendung $path_parts['extension']; //Dateiendung
                            
                        $dateiname $path_parts['filename']; //Dateiname ohne Endung
                            
                        $descdatei $newscriptdir."/".$getdir."/".$dateidesc[$descarray_num]; //Neuer Dateiname
                            
                        $zeilendesc file($descdatei);
                            
                            
                        //.desc wird ausgegeben - die dateiliste erscheint in diesem falle nicht
                            
                        if(isset($descname) AND is_file($descdatei))
                            {
                                    
                        $zeilendesc file($descdatei);    
                                    echo 
                        "<div class=\"desc\">";
                                    echo 
                        "<b>".$descname.".desc</b><br/>";
                                    foreach (
                        $zeilendesc as $zeile)
                                        {
                                        echo 
                        $zeile."<br/>";
                                        }
                                    echo 
                        "<br/><u><a href=\"".$getdir."/".$descname.".zip\">".$descname.".zip</a></u>";
                                    echo 
                        "</div><br/><br/>";
                            
                            } 
                        "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                        Kommentar


                        • #13
                          Und die Lösung über substr() funktioniert auch.
                          Code:
                          if (substr($file, -5, 5) == '.desc') {
                            // do something
                          }
                          Da hättest du nur etwas debuggen müssen.

                          Gruß
                          [URL]http://hallophp.de[/URL]

                          Kommentar


                          • #14
                            Stimmt, das geht auch

                            Hat noch jemand eine Ahnung, wieso das oben nicht funktioniert?
                            "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                            Kommentar


                            • #15
                              edit: Für alle, die das interessiert, hab ich mal den ganzen Quellcode (habs Problem gelöst):

                              PHP-Code:
                              <?php 
                              // Pfadangabe der Builds (ein Ordner) 
                              $dirPath 'builds';
                              $getdir $_GET['dir']; 
                              $descname $_GET['desc'];
                              //Sicherung gegen das Auslesen Dritter im System (falls dirPath und getdir nicht übereinstimmt (am Anfang) weiterleitung auf ?dir=$dirPath
                              $strlen strlen($dirPath); //Stringlänge vom Stammordner
                              $dirlet substr($_GET['dir'], 0$strlen); //Erste x Zeichen von getdir überprüfen
                              if($dirPath != $dirlet) { header("Location: ?dir=builds"); }
                              if(
                              $descname == "" OR $descname == " ") { unset($descname);}
                              ?>
                              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                              <html>
                                <head>
                                  <title>Builds</title>
                                  <style type='text/css'>
                                      body { font-family: tahoma, sans-serif; font-size: 12pt; color:#000}
                                      .header { background-image: url(images/header.jpg); width: 1000px; height: 100px; background-repeat: no-repeat; margin-bottom: 10px; }
                                      .bmTable { text-align: left; width: 1000px; }
                                      a, a:visited { color: #000; text-decoration: none; }
                                      a:hover { text-decoration: underline; }
                                      input[type="text"] { border: 1px solid #AAAAAA; }
                                      .backbutton { border: none; text-decoration: none; }
                                      #seite { margin-left:auto; margin-right:auto; width:1000px;}
                                      .divordner {background-color:#3a80c8; margin-bottom:3px; padding:2px 4px 2px;}
                                      .divdatei {background-color:#8ec5e1; margin-bottom:3px; padding:2px 4px 2px;}
                                      .readme {background-color:#cce4f1; border: 1px solid #3a80c8; margin:8px; padding:3px 5px 3px;; text-align:justify; width:76%;}
                                      .desc {background-color:#cce4f1; border: 1px solid #3a80c8; margin:8px; padding:3px 5px 3px;; text-align:justify; width:97%;}
                                      </style>
                                </head>
                                <body>
                                  <div id="seite">
                                    <div class='header'></div>
                              <?php $last substr($getdir, -1); //Vom Pfad wird der letzte Shlash abgeschnitten
                                                
                              if($last == "/")
                                                {
                                                
                              $getdir substr($getdir0, -1);
                                                }
                                                if(
                              $getdir == $dirPath OR $getdir == $dirPath."/") { echo "<div style=\"height:33px;\"></div>"; } else { ?>
                              <!-- Backlinks -->
                                          <table>
                                            <tr>
                                              <td align='left' width='30'>
                                                <a href='?dir=<?php
                                                
                              echo $dirPath;
                                                
                              ?>' class='backbutton'>
                                                  <img src='images/top.png' alt="Stammordner" border='0' />
                                                </a>

                                              </td>
                                              <td align='left' width='30'>
                                                <?php
                                                
                              echo "<a href=\"?dir=";
                                                if(isset(
                              $descname) AND $descname != " ")
                                                {
                                                echo 
                              $getdir;
                                                }
                                                else {
                                                
                              $backlink explode("/"$getdir);
                                                
                              array_pop($backlink);
                                                for(
                              $i=0$i count($backlink); $i++) 
                                                {
                                                echo 
                              $backlink[$i]."/";
                                                }
                                                }
                                                echo 
                              "\" class='backbutton'>"
                                                
                              ?>
                                                  <img src='images/back.png' "Höher springen" border='0' />
                                                </a>
                                              </td>
                                            </tr>
                                          </table>
                                          
                              <!-- Backlinks ende -->

                              <!-- Dateiliste -->
                                  <?php }
                                  
                              $scriptdir dirname(__FILE__);
                                  
                              $newscriptdir str_replace("\\""/"$scriptdir);// "\" werden durch "/" ersetzt
                                  //Arrayvariablen
                                  
                              $ordnerarray = array();
                                  
                              $dateiarray = array();
                                  
                              $dateidesc = array();


                              if(isset(
                              $getdir)) //Falls ['dir'] gegeben ist, was auf jeden fall sein sollte
                              {    
                                      
                              //verzeichnis öffnen und Dateien auslesen
                                  
                              if ($handle = @opendir($getdir)) 
                                  {
                                      while (
                              false !== ($file readdir($handle))) 
                                          {
                                              if (!
                              is_dir("$getdir/$file")) //Nur Dateien auslesen
                                          
                              {    //in Array speichern
                                              
                              $dateidesc[] = $file;
                                          }
                                          }
                                          
                              closedir($handle);
                                  }
                                  
                              $descarray_num array_search($descname.".desc"$dateidesc); //Array dursuchen
                                  
                              $filedir $newscriptdir."/".$getdir."/".$dateidesc[$descarray_num]; //Dateiverzeichnis
                                  
                              $path_parts pathinfo($filedir); //Pfadinfo
                                  
                              $dateiendung $path_parts['extension']; //Dateiendung
                                  
                              $dateiname $path_parts['filename']; //Dateiname ohne Endung
                                  
                              $zipdatei $newscriptdir."/".$getdir."/".$descname.".zip"//Alter Dateiname
                                  
                              $descdatei $newscriptdir."/".$getdir."/".$dateiname.".desc"//Neuer Dateiname
                                  
                              $zeilendesc = @file($descdatei);
                                  
                              /* Debug
                                  var_dump($dateidesc[$descarray_num]);
                                  echo "<br/>";
                                  var_dump($descarray_num);
                                  echo "<br/>";
                                  var_dump($dateidesc);
                                  echo "<br/>";
                                  var_dump($descname);
                                  echo "<br/>";*/

                                  //.desc wird ausgegeben - die dateiliste erscheint in diesem falle nicht
                                  
                              if(isset($descname))
                                  {
                                          
                              $descpfad $newscriptdir."/".$getdir."/".$descname.".zip";
                                          if(
                              is_file($descpfad) == false AND is_file($zipdatei) == true//Falls desc nicht existiert
                                          
                              {
                                          echo 
                              "<div class=\"desc\">";
                                          echo 
                              "<b>".$descname.".desc</b><br/>";
                                          echo 
                              "Keine Beschreibung vorhanden!<br/>";
                                          echo 
                              "<br/><u><a href=\"".$getdir."/".$descname.".zip\">".$descname.".zip</a></u>";
                                          echo 
                              "</div><br/><br/>";
                                          }
                                          
                                          else if(
                              $descdatei == "" OR $descarray_num === false//Falls Link falsch ist
                                          
                              {
                                          echo 
                              "Ein Fehler ist aufgetreten/Der Link ist fehlerhaft!<br/><a href=\"?dir=".$getdir."\">Zurück zum Ordner</a>";
                                          }
                                          else 
                              //.desc Ausgabe
                                          
                              {
                                          
                              $filetime filemtime($descpfad); //Änderungsdatum
                                          
                              $filesize filesize($descpfad); //Dateigröße
                                          
                              $filesize_mb round(($filesize 1048576), 2); //Größe runden
                                          
                              $zeilendesc file($descdatei);    
                                          echo 
                              "<div class=\"desc\">";
                                          echo 
                              "<b>".$descname.".desc</b><br/>";
                                          foreach (
                              $zeilendesc as $zeile)
                                              {
                                              echo 
                              $zeile."<br/>";
                                              }
                                          echo 
                              "<br/><br/><u><a href=\"".$getdir."/".$descname.".zip\">".$descname.".zip</a></u>&nbsp;-&nbsp;".date("d.m.Y, H:i"$filetime)." - ".$filesize_mb." MB";
                                          echo 
                              "</div><br/><br/>";
                                          }
                                  }
                                  else
                                  {
                                      if (
                              is_dir($getdir)) {
                                      echo 
                              "<b>Ordner: </b>".$getdir."<br/><br/>";//Aktueller Ordner
                                      // Dateilistenkopf
                                      
                              echo '<table width="100%" style="background-color:#fff; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
                                          &nbsp;&nbsp;&nbsp;&nbsp;<b>Datei/Ordner</b><br></td>
                                          <td width="25%"><b>Dateigröße</b></td><td width="25%"><b>Änderungsdatum</b></td></tr></table>'
                              ;
                                  
                                      
                              // Pfad
                                      
                              if ($handle opendir($getdir)) {
                                      
                              // Ordner ganz auslesen
                                      
                              while (false !== ($file readdir($handle))) {
                                      
                                          if (
                              $file != "." && $file != ".." && $file != "readme.txt" && substr($file, -55) != '.desc') {
                                              if (
                              is_dir("$getdir/$file")) {
                                              
                              // Ordner
                                              
                              $ordnerarray[] = $file;
                                          } else {
                                              
                              // Datei
                                              
                              $dateiarray[] = $file;            
                                          }
                                      }
                                  }    
                                      
                              closedir($handle); //Verzeichnis schließen
                                      //Ausgabe der Ordner
                                      
                              foreach($ordnerarray as $ordner)
                                      {
                                      echo 
                              '<table width="100%" style="background-color:#3a80c8; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
                                      <img src="http://www.php.de/images/folder.png" alt="Ordner" />&nbsp;<a href="?dir='
                              .$getdir.'/'.$ordner.'">'.$ordner.'</a><br></td>
                                      <td width="25%">-</td><td width="25%">-</td></tr></table>'
                              ;
                                      }
                                      
                              //Ausgabe der Dateien
                                      
                              foreach($dateiarray as $datei)
                                      {
                                      
                              $filedir $newscriptdir."/".$getdir."/".$datei//Dateiverzeichnis
                                      
                              $filetime filemtime($filedir); //Änderungsdatum
                                      
                              $filesize filesize($filedir); //Dateigröße
                                      
                              $filesize_mb round(($filesize 1048576), 2); //Größe runden
                                      
                              $path_parts pathinfo($datei); //Pfadinfo
                                      
                              $dateiname $path_parts['filename']; //Dateiname ohne Endung
                                      
                                      
                              echo '
                                      <table width="100%" style="background-color:#8ec5e1; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
                                      <img src="http://www.php.de/images/file.png" alt="Datei" />&nbsp;<a href="?dir='
                              .$getdir.'&desc='.$dateiname.'">'.$datei.'</a><br></td>
                                      <td width="25%">'
                              .$filesize_mb.' MB</td><td width="25%">'.date("d.m.Y, H:i"$filetime).'</td></tr></table>';
                                      }
                                      
                              //Ausgabe der readme.txt (Falls vorhanden)
                                      
                              if($file "readme.txt")
                                      {
                                      
                              $pfad1 $newscriptdir."/".$getdir."/readme.txt";
                                          if(
                              is_file($pfad1))
                                          {
                                          
                              $zeilen file($pfad1);
                                          
                              $filetime filemtime($pfad1);
                                          echo 
                              "<div class=\"readme\">";
                                          echo 
                              "<b>readme.txt</b> - ".date("d.m.Y"$filetime)."<br/>";
                                          foreach (
                              $zeilen as $zeile)
                                              {
                                              echo 
                              $zeile."<br/>";
                                              }    
                                          echo 
                              "</div><br/><br/>";
                                          }
                                      }
                                  }
                                  }
                              else
                              {    
                              //Nochmal Falscher Link ABsicherung
                              echo "Falscher Link. <a href=\"?dir=".$dirPath."\">Zur Buildsübersicht</a>";
                              }
                              }
                              }
                              else
                              {    
                              //Falls ein unerwarteter Fehler auftritt (Chance liegt gegen 0)
                              echo "Ein unbekannter Fehler ist aufgetreten. <a href=\"?dir=".$dirPath."\">Zur Buildsübersicht</a>";
                              }
                              //www.unlimitedgraphics.de/
                              ?>
                              <!-- Dateiliste ende-->
                                  </div>
                                </body>
                              </html>
                              "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                              Kommentar

                              Lädt...
                              X