Antworten auf deine Fragen:
Neues Thema erstellen

Erledigt - PHP Ordner Auslesen und Inhalt einen Byte Hinzufügen | Hashwert Veränderung

D3ATH

Noch nicht viel geschrieben

Hi Phpler, Ich stehe gerade vor einem kleinen Problem. Ich sehe nicht ganz durch! Nach einigen Schnippseln und Suchen konnte man eine Basic geschaffen. Im moment muss Ich jede Datei im Verzeichniss einzeln Anklickem zum verändern des Hashwertes. (Ein Byte wird Hinzugefügt)

Nun zum eigentlich Problem
  • Jeder Datei im Verzeichniss einen Byte hinzufügen (Zur Veränderung des Hashwertes)
  • Es soll nach dem Auslesen jeder Datei ein Byte hingefügt werden
  • Die Ausgelesene Liste der Dateien soll dennoch Sichtbar sein
  • Mit einem Button eventuell Realisierbar welcher dann die Bytes Hinzufügt wenn man klickt (Allen Dateien)
 

D3ATH

Noch nicht viel geschrieben

In der nächsten Nachricht habt ihr das Script bzw. den Schnippsel welcher dieses schon mal mit einer Datei erlaubt.

Entschuldigt die vielen Posts... die Code Einfügen Funktion klappte nicht und musste von Hand den BBCode setzen.
 
Zuletzt bearbeitet:

D3ATH

Noch nicht viel geschrieben

Hier der kleine Code welcher dieses Soweit mit jeder Datei einzeln machbar macht.
Code:
<?php
// In diesem Verzeichnis befinden sich die Dateien
$path = "vereichniss_was_ausgelesen_wird";

if (isset($_GET['file'])) {
$handle = fopen("$path/".$_GET['file']."", 'a+');

if ($handle) {
fwrite($handle, '0');
} else {
echo "<br />Es ist ein Fehler aufgetreten;<br />";
}

fclose($handle);
}

echo "Einfach auf die Datei klicken damit sie geaendert wird.<br /<br />";


// Öffnen des Verzeichnisses
$handle = opendir ($path);
// Für jede Datei im Verzeichnis eine neue Zeile als Schleife
while (false !== ($file = readdir ($handle))){
if ($file != "."){
if ($file != ".."){
if ($file != "index.html") {
// Grösse bestimmen
$byte = filesize($path."/".$file);

// Ausgabe des Links
if (! is_dir($path."/".$file)) {
echo "<a href='script.phpx?file=$file'>vereichniss_was_ausgelesen_wird/$file</a> ($byte Bytes)<br />";
}
}
}
}
}
// Verzeichnis wieder schliessen
closedir($handle);
?>
 
Zuletzt bearbeitet:

D3ATH

Noch nicht viel geschrieben

Und wo ist da jetzt Deine Frage?
Was möchtest Du wissen?

Es steht Oben im Erstellungspost wo das Problem ist wo Ich nicht weiterkomme.
Ich möchte es gerne Automatisieren für den ganzen Ordner und nicht jede Datei einzeln anklicken.
Nur weiß Ich nicht wie Ich alle Dateien im Verzeichniss anspreche statt eben jede nur eine Einzelne.

Hab Mir vorgestellt es eventuell nach der Auflistung mit einen Button zu realisieren damit man auch sieht welche Dateien man ändert.
Wie schon geschrieben ist vorerst das Problem.... Alle Dateien statt einzelne Dateien anzusprechen.
 
G

Gelöschtes Mitglied 633957

Guest

Dein Stichwort lautet Schleife
Sehr richtig und seit PHP5 gibt es die nützliche scandir-Funktion!
Hier einmal an einem Beispiel:
PHP:
<?php
$folder = "ordner";               // (Pfad zu:) Dein Ordner
$array = scandir($folder);        // Ordner auslesen und in Array speichern
foreach ($array as $handle) {     // Schleifendurchlauf
  if (is_file($handle)) {         // Nur Dateien verarbeiten

     // AB HIER DEIN CODE

        echo $handle."<br />";    // Diese Zeile durch Deinen Code ersetzen

     // ENDE DEINES CODES

  }
}
?>
Der Code ist ungetestet, sehe aber keinen Grund warum er nicht funktionieren sollte!

Edit: Mit »durch Deinen Code ersetzen« ist natürlich ein entsprechend passender Code gemeint und nicht der komplette Code aus Deinem Posting.
$handle entspricht dem Dateinamen mit Erweiterung (ohne Pfadangabe) des jeweils aktuell angefassten Arrayeintrags. Z.B.: "textdatei.txt"


Edit: @D3ATH, Dein Code, sofern ich nichts übersehen habe, hängt den Dateien eine Null an. Es ist praktisch so, als würdest Du die jeweilige Datei in einem Texteditor öffnen, den Cursor hinter das letzte Zeichen in der Datei setzen und dann eine "0" tippen. Ist es wirklich das was Du erreichen willst? Natürlich ändert sich damit auch der Hashwert - es kann aber auch, unter Umständen, je nachdem um was es sich für einen Dateityp handelt, die Datei unbrauchbar machen!
 
Zuletzt bearbeitet von einem Moderator:

D3ATH

Noch nicht viel geschrieben

Sehr richtig und seit PHP5 gibt es die nützliche scandir-Funktion!
Hier einmal an einem Beispiel:
PHP:
<?php
$folder = "ordner";               // (Pfad zu:) Dein Ordner
$array = scandir($folder);        // Ordner auslesen und in Array speichern
foreach ($array as $handle) {     // Schleifendurchlauf
  if (is_file($handle)) {         // Nur Dateien verarbeiten

     // AB HIER DEIN CODE

        echo $handle."<br />";    // Diese Zeile durch Deinen Code ersetzen

     // ENDE DEINES CODES

  }
}
?>
Der Code ist ungetestet, sehe aber keinen Grund warum er nicht funktionieren sollte!

Edit: Mit »durch Deinen Code ersetzen« ist natürlich ein entsprechend passender Code gemeint und nicht der komplette Code aus Deinem Posting.
$handle entspricht dem Dateinamen mit Erweiterung (ohne Pfadangabe) des jeweils aktuell angefassten Arrayeintrags. Z.B.: "textdatei.txt"


Edit: @D3ATH, Dein Code, sofern ich nichts übersehen habe, hängt den Dateien eine Null an. Es ist praktisch so, als würdest Du die jeweilige Datei in einem Texteditor öffnen, den Cursor hinter das letzte Zeichen in der Datei setzen und dann eine "0" tippen. Ist es wirklich das was Du erreichen willst? Natürlich ändert sich damit auch der Hashwert - es kann aber auch, unter Umständen, je nachdem um was es sich für einen Dateityp handelt, die Datei unbrauchbar machen!

Ja das mit dem Nullbyte ist genau dieses was Ich möchte.
Da Ich im moment leider noch nicht ganz durch schaute was die Schnippsel damals bedeuteten und wie das ganze Konstrukt arbeitete, bin Ich gerade dabei einwenig mich ins Php einzulesen. Natürlich werde Ich mich an den Schnippsel und deinen Tipp halten, denn damit hab Ich einen kleinen Leitfaden. Es ist zwar noch nicht so wie Ich es möchte aber das wird es sicherlich bald.
 

D3ATH

Noch nicht viel geschrieben

Leider gibt der Code Mir nur das definierte Echo aus, die Dateien welche in dem Array ausgelesen wurden bearbeitet Er hier gar nicht. Ich hab nun schon etwas einwenig Probiert, aber bin Irgendwie nicht wirklich viel Schlauer geworden aus dem ganzen.

Eventuell könnte Mir Hier jemand etwas Helfen, und Mich über meinen Fehler aufklären.

Code:
<?php


if (isset($_GET['file'])) {
$handle = fopen("$folder/".$_GET['file']."", 'a+');

if ($handle) {
fwrite($handle, '0');
} else {
echo "<br />Es ist ein Fehler aufgetreten;<br />";
}

fclose($handle);
}

echo "Einfach auf die Datei klicken damit sie geaendert wird.<br /<br />";



$folder = "change";                                                                                                                                  // (Pfad zu:) Dein Ordner

$array = scandir($folder);                                                                                                                      // Ordner auslesen und in Array speichern

    
$byte = filesize($handle);                                                                                                                        // Grösse bestimmen

foreach ($array as $handle) {                                                                                                                // Schleifendurchlauf

    if (is_file($handle)) {                                                                                                                            // Nur Dateien verarbeiten

 while (false !== ($array = scandir ($folder))) {
 
    if ($file != "."){
 
    if ($file != ".."){
    
    if ($file != "index.html") {
 
                                     
    
    echo "<a href='take2.phpx?file=$array'>change/$handle</a> ($byte Bytes)<br />";                            // Ausgabe des Links
    
    }
    }
    }
    }
    }
 
  }
?>
 
G

Gelöschtes Mitglied 633957

Guest

Eventuell könnte Mir Hier jemand etwas Helfen, und Mich über meinen Fehler aufklären.
Tatsächlich sind es mehrere Fehler. Das Hauptproblem, so wie ich es sehe, ist einfach, dass Dein Code sehr durcheinander geraten ist!

Auch wenn ich noch immer nicht verstehe, warum man den Dateiinhalten eine 0 anhängen sollte, schreibe ich Dir hier einmal eine Idee wie ich es lösen würde und habe mich bemüht den Code so nachvollziehbar wie möglich zu gestalten und dabei Deine Ansätze mit einfließen zu lassen...

In meinem Beispiel befindet sich der Code in der index.php und die Ordner in denen die zu ändernden Dateien stecken, befinden sich auf gleicher Ebene wie die index.php.

Das Verzeichnis könnte so aussehen:
Code:
..
ordner_1
   index.html
   datei1.txt
   datei2.css
   datei3.dat
ordner_2
   datei4.html
   datei5.mp4
index.php

Das Problem dass ich sehe und in Post #8 schon genannt habe ist, dass bis auf die index.html in ordner_1 alle anderen Dateien verändert werden! (Möglicherweise sind bei Dir aber nur Dateien enthalten bei denen das kein Problem ist!)

Inhalt von index.php:
PHP:
<?php

// Werte von folder und change aus Adresse holen
// Bei error_reporting(E_ALL); würden bei Erstaufruf der Datei zwei Fehlermeldungen ausgegeben da folder und change nicht definiert sind
$getfolder = strip_tags(htmlspecialchars($_GET['folder']));
$getchange = strip_tags(htmlspecialchars($_GET['change']));

// HTML-Kram
echo "<!doctype html />
<html lang=\"de\" />
<head />
   <meta charset=\"UTF-8\" />
   <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\" />
   <title />Dateien in einem Ordner eine Null anh&auml;ngen</title>
   <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />
</head>
<body />";

// Verzeichnis in dem sich diese Datei befindet scannen
$folderarray = scandir("./");

// Wenn folder in Adresse nicht angegeben ist, die Ordner als Links auflisten
if($getfolder == "") {
  echo("<p />Klicke auf einen Ordner um die dort enthaltenen Dateien zu &auml;ndern:<br /><br />");
    foreach($folderarray as $folderhandle) {
// Nur Ordner (Verzeichnisse) anzeigen und .. und . ausschließen
      if(is_dir($folderhandle) && $folderhandle != ".." && $folderhandle != ".") {
        echo("&bull; <a href=\"?folder=".$folderhandle."&change=notnow\" target=\"_self\" alt=\"Dateien in ".$folderhandle." &auml;ndern\" title=\"Dateien in ".$folderhandle." &auml;ndern\" />".$folderhandle."</a><br />");
      }
  }
  echo("</p>");
// Wenn folder angegeben ist, dann nutzen sofern er existiert (in folderarray vorhanden) und nicht leer ist
} elseif(in_array($getfolder, $folderarray) && count(glob("$getfolder/*")) != 0) {
// Den angegebenen Ordner scannen
    $filearray = scandir($getfolder);
// Wenn change nicht gleich "doit" ist, dann Dateien auflisten (mit Größe in Bytes) und fragen ob alle geändert werden sollen
    if($getchange != "doit") {
      echo("<p />Im Ordner <code />".$getfolder."</code> befinden sich folgende Dateien:<br /><br />");
      foreach ($filearray as $filehandle) {
        $filename = $getfolder."/".$filehandle;
        if (is_file($filename) && $filehandle != "index.html") {
          echo("&bull; ".$filehandle." | ".filesize($filename)." Bytes <br />");
        }
      }
      echo("<br />Alle Dateien &auml;nden? &nbsp;&nbsp;&nbsp; <a href=\"?folder=".$getfolder."&change=doit\" target=\"_self\" alt=\"Alle Dateien in ".$getfolder." &auml;ndern\" title=\"Alle Dateien in ".$getfolder." &auml;ndern\" />JA</a> &nbsp;|&nbsp; <a href=\"?folder=&change=\" target=\"_self\" alt=\"Zur&uuml;ck zur &Uuml;bersicht\" title=\"Zur&uuml;ck zur &Uuml;bersicht\" />NEIN</a><br /><br /><small />Mit einem Klick auf <b />JA</b> wird den Dateiinhalten, am Dateiende eine 0 (Null) hinzugef&uuml;gt!</p>");
// Wenn change gleich "doit" ist, die Dateien verarbeiten und auflisten...
    } else {
      echo("<p />Im Ordner <code />".$getfolder."</code> befinden sich folgende Dateien:<br /><br />");
      foreach($filearray as $filehandle) {
        $filename = $getfolder."/".$filehandle;
// wenn Arrayeintrag (filearray) eine Datei und nicht index.html ist
        if(is_file($filename) && $filehandle != "index.html") {
          $filesize = filesize($filename);
          echo("&bull; ".$filehandle." | alt: ".$filesize." Bytes | neu: ");
// wenn die Datei existiert und beschreibbar ist
          if(is_writable($filename)) {
// a+ ist nicht erforderlich, da die Datei nicht ausgelesen wird - zum Schreiben reicht a
            $singlefile = fopen($filename,"a");
// Hier wird die Null an den Dateiinhalt angehängt
            fwrite($singlefile,"0");
            fclose($singlefile);
// nach Änderung einen Byte hinzuzählen
            echo(($filesize +1)." Bytes<br />");
// Hinweis ausgeben wenn Datei nicht geändert werden kann
          } else {
            echo($filesize." Bytes &nbsp; (<code />Hinweis: Die Datei existiert nicht mehr oder ist schreibgesch&uuml;tzt!</code>)<br />");
          }
        }
      }
// Alle Änderungen wurden abgeschlossen
      echo("<br />Vorgang abgeschlossen!<br /><br /><a href=\"?folder=&change=\" target=\"_self\" alt=\"Zur&uuml;ck zur &Uuml;bersicht\" title=\"Zur&uuml;ck zur &Uuml;bersicht\" />Klicke hier</a>, um zur Ordner&uuml;bersicht zur&uuml;ck zu gelangen.</p>");
    }
// Wenn der angegebene Ordner nicht existiert oder keine Dateien enthält
} else {
    echo("<p />Der Ordner <code />".$getfolder."</code> existiert nicht mehr oder enth&auml;lt keine Dateien!<br /><br /><a href=\"?folder=&change=\" target=\"_self\" alt=\"Zur&uuml;ck zur &Uuml;bersicht\" title=\"Zur&uuml;ck zur &Uuml;bersicht\" />Klicke hier</a>, um zur Ordner&uuml;bersicht zur&uuml;ck zu gelangen.</p>");
}

// HTML-Tags schließen
echo "</body>
</html>";

?>
Hinweis: Nicht berücksichtigt ist hier eine gesonderte Abfrage für den Fall, dass ein Ordner ausschließlich eine index.html enthält!

Da dieser Post wenig mit Hilfe zur Selbsthilfe zu tun hat, möchte ich Dir folgendes empfehlen:
Schaue Dir den Code an und dann was der Code macht...
Anschließend versuche es nachzubauen! (Dein Code kann natürlich anders ausschauen und aufgebaut sein!)
 

D3ATH

Noch nicht viel geschrieben

@tynick
Erstmal vielen Dank für dieses super Sample, es enthält etwas mehr und umfangreicheren Code als Ich dachte.
Dennoch kann Ich denke mit der Grundlage auch einwenig mehr Lernen wieso mein Code nicht Funktionierte.

Ich denke werde mit dem Code einwenig Experimentieren und schauen was Ich eventuell damit noch Anstellen kann.


Herzlichen Dank
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben