Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
[Suche] Script, dass alle Dateinen in Unterordner verschiebt ausser der neuesten [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
[Suche] Script, dass alle Dateinen in Unterordner verschiebt ausser der neuesten


 
Stefanie2
07-04-2010, 16:15 
 
Hallo,
ich geb zu ich bin noch ein Scriptblödi.
Bin schon stolz ein Script in meine Seite eingebaut zu haben welches nur das neueste Bild anzeigt.
Das ganz ist für 4 Webcams die ich darstelle. Alle haben ein eigenes Unterverzeichnis.
Jedoch wird mein Script ab ein paar hundert Dateien echt lahm wegen der Auswertung welche die neuste ist.
Ich hab das Script auch in der Version: Zeig neueste an und lösch den Rest.
Da ich die Bilde aber benötige suche ich aber:
Zeig neustes Bild an und verschiebe alle anderen in Unterverzeichnis "Sicherung"
Hat da jemand vielleicht etwas fertiges für mich?
Bei Bedarf setz ich auch gern den vh. Code hier rein.

 
fireweasel
10-04-2010, 00:20 
 
...
Ich hab das Script auch in der Version: Zeig neueste an und lösch den Rest.

Wie funktioniert der "lösch den Rest"-Teil des Scripts?
Wahrscheinlich klapperst du das Verzeichnis Datei für Datei ab und löschst jede Datei, die nicht den gewünschten Kriterien entspricht. Dann sollte es kein Problem sein, die Löschfunktion durch den Aufruf von rename() (http://php.net/manual/de/function.rename.php) zu ersetzen. Diese Funktion verschiebt auch Dateien ...

 
Stefanie2
11-04-2010, 20:10 
 
Freu, das jemand geantwortet hat :) DANKE
Also mein Code sieht so aus:
(Vielleicht könnte man unlink durch rename ersetzen? Ich möchte aber auf dem Server nicht rumexperimentieren.
<?PHP
$verzeichnis = './xyz/';
$tempfile = "";
$verz = opendir($verzeichnis);
while($file = readdir($verz))
{
$verzfile = $verzeichnis.$file;
$info = @getimagesize($verzfile);
if($info[2]==(1||2||3) && $file != "." && $file != ".." && !is_dir($file))
{
$tzeit = filemtime($verzfile);
if($tzeit>$tempzeit)
{
$tempfile = $file;
$tempzeit = $tzeit;
$breite = $info[0];
$hoehe = $info[1];
$datumanz = date("d.m.Y - H:i", $tzeit);
}
}
}
closedir($verz);

//alle alten Dateien löschen
$verz = opendir($verzeichnis);
while($file = readdir($verz))
{
if($file !=$tempfile && $file != "." && $file != ".." && !is_dir($file))
{
@unlink($verzeichnis.$file);
}
}
closedir($verz);
//Ausgabe
if($tempfile==""){
$anzeige = 'Kein Bild'; //Text wenn kein Bild
}else{
//Ausgabe wenn Bild / Datum über dem Bild
$anzeige = 'Update am: '.$datumanz.' Uhr<br><img src="'.$verzeichnis.$tempfile.'" border="0"><br>';
}
echo $anzeige;
?>

 
AmicaNoctis
12-04-2010, 00:36 
 
Hallo,

$info[2]==(1||2||3)

das macht mit Sicherheit nicht das, was du denkst. Vermutlich meinst du

($info[2] >= 1 && $info[2] <= 3)

oder

in_array($info[2], array(1, 2, 3))

Gruß,

Amica

 
Stefanie2
13-04-2010, 08:37 
 
Ich weiß, um ehrlich zu sein, nicht was der Abschnitt macht.
Habe das Script gefunden und nach meinen Bedürfnissen angepasst.
PHP ist etwa wie mein Schulfranzösisch: Am Ende bekomme ich mein Brot, aber meistens lacht der Bäcker.

Der Code funktioniert jedenfalls prima. Er wird nur, bedingt durch die wachsende Zahl der Bilder, logischerweise langsamer.

Aktuell habe ich mir mit einem FTP Batch geholfen. Das holt die Dateien auf den Lokalen Rechner und löscht sie anschließend.

Eine PHP Online Lösung wär mir jedoch lieber.

Weiß echt keiner von euch wie man das umschreiben müsste? (rename?)

 
TobiaZ
13-04-2010, 15:42 
 
*move* nach Projekthilfe.

 
boeserfrosch
15-04-2010, 13:23 
 
Ersetze

unlink($verzeichnis.$file);

durch

rename($verzeichnis.$file,$verzeichnis."sicherung/".$file);

"sicherung" kannst du dann durch den Unterordner ersetzen in welchem du deine Dateien dann haben willst.

 
Stefanie2
15-04-2010, 16:19 
 
Danke, dachte nicht, dass es so simpel.
Nur ein Fehler ist noch drin.
Das Unterverzeichnis Sicherung ist für ihn auch ein File und er möchte es mit sichern, was logisch nicht geht. Daraus folgt dann:
Warning: rename(./verzeichnis/sicherung,./verzeichnis/sicherung/sicherung) [function.rename]: Invalid argument in /mnt/web1/11/12/56492123/htdocs/m/verschieb.php on line 92

Wie kann ich ihm sagen, dass er nur files und keine Verzeichnisse nimmt?

Stelle mir das etwa so vor:
rename($verzeichnis.$file.".JPG",$verzeichnis."sicherung/".$file);

Gibt es so etwas?

 
AmicaNoctis
15-04-2010, 16:24 
 
PHP: is_file - Manual (http://php.net/is_file)
PHP: is_dir - Manual (http://php.net/is_dir)

 
Stefanie2
15-04-2010, 19:59 
 
Hallo,
könntest du mir nen Tipp geben?
Muss ich das in die IF Zeile einfügen?
Vielleicht ein Beispiel?
Ich kriegs nicht hin :(

 
AmicaNoctis
15-04-2010, 20:18 
 
Mein Tipp: Klick nochmal die Links an und sieh dir dort die vielen, vielen Beispiele an, die es vollkommen unnötig machen, dass ich dir jetzt noch eins gebe.

 
boeserfrosch
15-04-2010, 20:35 
 
Die Überprüfung ist eigentlich schon in der if-bedingung drin.
Siehe "&& !is_dir($file)" in:
if($file !=$tempfile && $file != "." && $file != ".." && !is_dir($file))aber du kannst ja noch drauf prüfen ob es tatsächlich eine Datei ist.

if($file !=$tempfile && $file != "." && $file != ".." && !is_dir($file) && is_file($file))

 
Stefanie2
15-04-2010, 20:50 
 
Dankeschön an den lieben Frosch. Das geht anstandslos.
Ich glaub ich geb das auf mit PHP und bezahl lieber jemanden der sich damit auskennt. Auf Dauer schone ich damit wohl nerven.
Wirklich was lernen tu ich bei meinen seltenen Einsätzen auch nicht. In den Zeiträumen dazwischen vergess ich ja mehr als ich gelernt hab :D

Nochmals lieben Dank


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