Platzhalter
Daniel
- php
Hi,
ich suche einen platzhalter für php, ich möchte nähmlich alle dateien
mit einem bestimmten anfang, z.B. "peter" und einer bestimmten endung,
z.B. ".data" in ein unterverzeichniss kopieren. als z.B.
fopen("peter*.data");
grund. bei einer löschung von "peter" sollen seine daten für einen
gewissen zeitraum gespeichert werden um eine evtl. wiederherstellung zu
ermöglichen. Aber wie bekomme ich das hin? ich steh grad total auf dem
schlauch.
MfG
Seitwann beschäftigst du dich mit PHP?
Jedenfalls wird man aus deiner Frage ned ganz schlau :-)
WeinSchweinerich
Hi WeinSchweinerich,
Jedenfalls wird man aus deiner Frage ned ganz schlau :-)
Die Frage war doch eingentlich klar, er hat z.B. folgende Dateien in einem Verzeichnis:
Und jetzt möchte er alle Dateien, die mit peter beginnen und mit .data enden kopieren.
MfG, Dennis.
Hi Daniel,
ich suche einen platzhalter für php, ich möchte nähmlich alle dateien
mit einem bestimmten anfang, z.B. "peter" und einer bestimmten endung,
z.B. ".data" in ein unterverzeichniss kopieren.
Dazu müsstest zuerst das ganze Verzeichnis einlesen, dazu benötigst du die Funktionen opendir, readdir und closedir - alternativ kannst du direkt die Funktion dir2array aus meiner dir_funcions Library nehmen.
//Library includen
include "dir_functions-0.2_beta.lib.php";
//Verzeichnis einlesen
$files = dir2array("mydir");
//Zur Kontrolle Array ausgeben.
echo "<pre>";
print_r($files);
echo "</pre>";
Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.
MfG, Dennis.
Hi,
Dazu müsstest zuerst das ganze Verzeichnis einlesen, dazu benötigst du die Funktionen opendir, readdir und closedir
Verzeichniss einlesen ist OK, die funktionen kenn ich daher kein problem.
- alternativ kannst du direkt die Funktion dir2array aus meiner dir_funcions Library nehmen.
werd ich mir ankucken
//Library includen
include "dir_functions-0.2_beta.lib.php";
sollte wohl include ("dir_functions-0.2_beta.lib.php"); heißen.
//Verzeichnis einlesen
$files = dir2array("mydir");
mydir = das verzeichniss in dem die wie in meinem bsp die .data datein liegen.
//Zur Kontrolle Array ausgeben.
echo "<pre>";
print_r($files);
echo "</pre>";[/code]
Kontrolle? ich bin selbstbewusster Programmierer und vertraue auf die macht von php.
Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.
ereg? preg_match? nie gehört. aber die Idee das verzeichniss in ein
array auszulesen und dann dort die strings zu prüfen ist eine geniale
Idee. So werd ich es wohl machen. außer es kommt noch ein "besserer"
Vorschlag was ich aber bezweifele.
Vielen Dank Dennis
MfG (an alle außer Mr Prams)
Hi Daniel,
//Library includen
include "dir_functions-0.2_beta.lib.php";sollte wohl include ("dir_functions-0.2_beta.lib.php"); heißen.
Nein, nicht nötig - AFAIK ist include genau wie echo ein Sprachkonstrukt, du kannst ja auch echo ("Text"); schreiben, oder einfach bei echo "Text"; bleiben.
//Verzeichnis einlesen
$files = dir2array("mydir");mydir = das verzeichniss in dem die wie in meinem bsp die .data datein liegen.
Richtig, könnte natürlich auch ../path/to/mydir sein.
//Zur Kontrolle Array ausgeben.
echo "<pre>";
print_r($files);
echo "</pre>";[/code]Kontrolle? ich bin selbstbewusster Programmierer und vertraue auf die macht von php.
PHP kann sich aber schlecht selber programmieren - und es ist _deine_ Aufgabe als Programmierer auch auf _deine_ Fehler zu stoßen, würde beispielsweise beim Einlesen der Daten etwas schieflaufen, würdest du es hier sehen.
Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden (ersteres ist schneller), und somit dir die entsprechenden Einträge zum Kopieren rausfiltern.
ereg? preg_match? nie gehört. aber die Idee das verzeichniss in ein
array auszulesen und dann dort die strings zu prüfen ist eine geniale
Idee.
Schau doch einfach im Manual nach: ereg_replace() und preg_replace().
Sämtliche preg_* Funktionen arbeiten nach PCRE - du kannst dort also reguläre Ausdrücke anweden nach PCRE Standard, deshalb solltest du dir dazu, wenn du die Funktionen mal brauchen solltest auch die Pattern Syntax und Modifiers zu Gemüte führen. Ein gutes deutsches Tutorial, was dich (in einem Abschnitt) in dieses Thema einführt ist http://tut.php-q.net/regex.html.
So werd ich es wohl machen. außer es kommt noch ein "besserer"
Vorschlag was ich aber bezweifele.
Mir ist keine fertige Funktion für dein Vorhaben bekannt.
MfG, Dennis.
Hi Daniel,
Schau doch einfach im Manual nach: ereg_replace() und preg_replace().
Sorry, bin jetzt durcheinander gekommen, mit einem anderen Posting hier im Forum - du brauchst natürlich nicht die *_replace Funktionen, da du ja nichts ersetzen willst.
Für dich reicht: ereg() bzw. preg_match.
MfG, Dennis.
Hi,
Sorry, bin jetzt durcheinander gekommen, mit einem anderen Posting hier im Forum
macht doch nix. ich habs jetzt so "gelöst":
$verzeichniss = opendir("./");
while($inhalt = readdir($verzeichniss))
{
$string = $inhalt;
if(strpos($string, $dateianfang) === false)
{
//nicht eine datei mit gesuchtem anfang
}
else
{
echo $string." -> treffer<br>";
}
}
closedir($verzeichniss);
jetzt brauch ich ja nurnoch
echo $string." -> treffer<br>";
durch fopen($datei, "r") etc. ersetzten und die sache funktioniert, nichtwar?
MfG
Hi Daniel,
while($inhalt = readdir($verzeichniss))
Wie du auch meiner Funktion entnehmen kannst, solltest du hier es lieber so schreiben:
`while(($inhalt = readdir($verzeichniss)) !== FALSE)`{:.language-php}
Denn, rein theoretisch könnte ja auch eine Datei mit dem Namen "0" dabei sein, dabei würde deine Schleife oben "bei draufgehen".
> ~~~php
$string = $inhalt;
> if(strpos($string, $dateianfang) === false)
> {
> //nicht eine datei mit gesuchtem anfang
> }
Dir ist aber schon bewusst, dass du hier jetzt nur den Datei Anfang prüfst? In deinem Ausgangsposting wolltest du ja Dateinamen-Anfang und -Ende überprüfen...
jetzt brauch ich ja nurnoch
echo $string." -> treffer<br>";
durch fopen($datei, "r") etc. ersetzten und die sache funktioniert, nichtwar?
Was willst du mit fopen()? Die Datei einlesen und den Inhalt wieder in eine neue Datei schreiben? Nein, das ist doch viel zu umständlich - PHP kennt bereits eine fertige Funktion zum verschieben von Dateien: rename(). Damit kannst du z.B. eine Datei "bla.txt" in "ordner/bla.txt" „umbenennen” - in diesem Fall hier also auch verschieben. Wenn du die Datei nur kopieren möchtest, verwende copy().
MfG, Dennis.
Hi,
if(strpos($string, $dateianfang) === false)
//nicht eine datei mit gesuchtem anfang
else
echo $string." -> treffer<br>";
Achtung! Stell Dir vor, Du hast zwei User namens "Andrea" und "Andreas".
Und jetzt sollen die Daten für "Andrea" gelöscht werden ...
cu,
Andreas
hi,
Im folgenden könntest du dann ganz einfach das Array $files durchgehen und auf jeden Eintrag ereg oder preg_match anwenden
fnmatch() könnte sich dafür auch als recht angenehm herausstellen.
gruß,
wahsaga