php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.01.2009, 23:25  
Neuer Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 21
Micha2409 befindet sich auf einem aufstrebenden Ast
Standard Problem bei Datumsvergleich

Hi Leute!

Ich habe mir ein Script gebastelt, das ein Verzeichnis ausliest und die Anzahl der Bilddateien als Zahl ausgibt. Das funktioniert soweit auch super.

Jetzt soll auch noch ausgelesen - und ebenfalls als Zahl angezeigt - werden, wieviele Dateien in den letzten 30 Tagen geändert wurden, aber das haut nicht hin.

Der Browser zeigt mir IMMER eine Null "0" an. Hab auch schon die Variablen geändert - keine Reaktion... Dateien, die älter und neuer als 30 Tage sind, sind in dem Verzeichnis vorhanden - daran liegt's nicht.

Soll dann so aussehen: "Privat [6 | 45]" - also 6 NEUE und 45 INSGESAMT
Bis jetzt kommt aber immer nur: "Privat[0 | 45]"

Hier mal das Script:
PHP-Code:
<?php
function dirCountNew($dirName) {
static 
$i 0;
$dir dir($dirName);
$dateMod filectime($obj)+86400*30;
$dateNow time();

while(
$obj $dir->read()) {
if(
$dateMod $dateNow) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCountNew($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
}

function 
dirCount($dirName) {
static 
$i 0;
$dir dir($dirName);

while(
$obj $dir->read()) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCount($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
echo 
"Privat [".dirCountNew('Privat')." | ".dirCount('Privat')."]";
?>
Vielen Dank schonmal im Voraus!
MICHA

Geändert von Micha2409 (18.01.2009 um 23:32 Uhr).
Micha2409 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.01.2009, 23:32  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
$dateMod = filectime($obj)+86400*30;
An dieser Stelle gibt es (noch) kein $obj.
Mit error_reporting=E_ALL hättest Du an dieser Stelle eine entsprechende Meldung erhalten.
David ist offline  
Alt 18.01.2009, 23:42  
Neuer Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 21
Micha2409 befindet sich auf einem aufstrebenden Ast
Standard Will noch nicht ganz...

Danke für die Hinweise!

Habs jetzt geändert - aber leider immer noch das selbe Ergebnis.
Hab auch mal die Variable auf 1 Tag gesetzt und eben noch ne Datei hochgeladen - so müsste er mir doch zumindest: "Privat [1/45]" anzeigen?!
Ist aber nicht der Fall und eine Fehlermeldung bringt er mir auch nicht

PHP-Code:
<?php
error_reporting
(E_ALL);

function 
dirCountNew($dirName) {
static 
$i 0;
$dir dir($dirName);

while(
$obj $dir->read()) {
if((
filectime($obj)+86400) < (time())) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCountNew($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
}

function 
dirCount($dirName) {
static 
$i 0;
$dir dir($dirName);

while(
$obj $dir->read()) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCount($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
echo 
"Privat [".dirCountNew('Privat')." | ".dirCount('Privat')."]";
?>
Wat nun?

Danke,
MICHA
Micha2409 ist offline  
Alt 18.01.2009, 23:47  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Zitat:
filectime($obj)
...
is_dir($dirName.'/'.$obj)
Einmal setzt Du den Pfadnamen davor, das andere Mal nicht.

Btw: eregi() ist veraltet und wird nicht mehr empfohlen. Statt dessen besser die PCRE Funktionen verwenden.
In diesem Fall vergleichst Du nur gegen statische Zeichenketten. Da tut es ein strpos() oder strrchr() auch.
David ist offline  
Alt 18.01.2009, 23:58  
Neuer Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 21
Micha2409 befindet sich auf einem aufstrebenden Ast
Standard Doof...

Stimmt!

Man-o-man - da such ich mir n Wolf...
aber funktionieren wills trotzdem noch nicht

Script sieht jetzt so aus:

PHP-Code:
<?php
error_reporting
(E_ALL);

function 
dirCountNew($dirName) {
static 
$i 0;
$dir dir($dirName);

while(
$obj $dir->read()) {
if((
filectime($dirName.'/'.$obj)) < (time())) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCountNew($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
}

function 
dirCount($dirName) {
static 
$i 0;
$dir dir($dirName);

while(
$obj $dir->read()) {
if (
$obj != "." && $obj != ".." && !eregi(".htm",$obj) && !eregi(".php",$obj) && !eregi(".hta",$obj) && !eregi(".htp",$obj)) {
if(
is_dir($dirName.'/'.$obj)) {
dirCount($dirName.'/'.$obj);
} else {
$i++;
}
}
}
return 
$i;
}
echo 
"Privat [".dirCountNew('Privat')." | ".dirCount('Privat')."]";
?>
Ich hab auch mal die Zeitvariablen weggenommen, sodass er nur filectime($dirName.'/'.$obj) mit time() vergleichen sollte, aber es bleibt dabei:

Privat [0 | 45]

Hast du noch nen rat für mich?
Und vielen Dank für die Bemühungen - um diese Uhrzeit!

MICHA
Micha2409 ist offline  
Alt 19.01.2009, 00:47  
Erfahrener Benutzer
 
Benutzerbild von David
 
Registriert seit: 05.09.2007
Beiträge: 5.044
David wird schon bald berühmt werden
Standard

Vielleicht kommst Du mit dem DirectoryIterator der SPL besser zurecht

PHP-Code:
<?php
$path 
'.';

$threshold strtotime('30 days ago');
echo 
'threshold='date('d.m.Y H:i:s'$threshold), "<br />\n";

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::LEAVES_ONLY);
foreach(
$iterator as $name=>$fileinfo) {
  echo 
    
$fileinfo->getMTime() > $threshold 'X ' '-  ',
     
$name,
    
"<br />\n"
  
;
}
siehe spl


Und den Code bitte konsequent einrücken. Also nicht
Zitat:
if(is_dir($dirName.'/'.$obj)) {
dirCountNew($dirName.'/'.$obj);
} else {
$i++;
}
sondern
PHP-Code:
if(is_dir($dirName.'/'.$obj)) {
  
dirCountNew($dirName.'/'.$obj);
}
else {
  
$i++;

Zumindest ich verliere sonst sehr schnell den Überblick.
David ist offline  
Alt 19.01.2009, 19:49  
Neuer Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 21
Micha2409 befindet sich auf einem aufstrebenden Ast
Standard Weiteres Problem...

Hab mir jetzt mal folgendes Script gebastelt! (Danke für den Hinweis! habs jetzt auch gleich mit PHP5 gemacht )

PHP-Code:
  <?php
error_reporting
(E_ALL E_STRICT); 
ini_set('display_errors'TRUE);

$verbotene_endungen = array('php','html');
$such_in './Privat'

class 
EndungsFilter extends FilterIterator
{
  protected 
$verbotene_endungen = array();

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

  public function 
accept()
  {
    if(
is_dir($this->current())) return false;
    
$endung pathinfo($this->current(),PATHINFO_EXTENSION);
    return 
in_array($endung,$this->verbotene_endungen)?FALSE:TRUE;
  }
}

$dir =  new EndungsFilter(
            new 
RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in)),$verbotene_endungen);

$alle 0;
$neue 0;

foreach(
$dir as $datei)
{
  ++
$alle;
  if(
$datei->getMtime()>strtotime('-14 DAY')) ++$neue;
}

echo 
"[$neue|$alle]";
?>
Dieses Script habe ich in ein Tabellenfeld (hinter dem Name des Albums "Privat") eingefügt - das funktioniert einwandfrei!

Wenn ich das Script allerdings in ein anderes Tabellenfeld einfüge (z.Bsp.: hinter dem Albumnamen "Sonstige") und einfach den Verzeichnisname anpasse, bekomme ich folgende Fehlermeldung: Fatal error: Cannot redeclare class EndungsFilter in /mnt/...

Woran könnte das liegen?

Hier mal das Script, das NICHT funktioniert:
PHP-Code:
...
<td height="30" bgcolor="#FFFF99" class="Stil8"><div align="center">
  <?php
error_reporting
(E_ALL E_STRICT); 
ini_set('display_errors'TRUE);

$verbotene_endungen = array('php','html');
$such_in './Privat'

class 
EndungsFilter extends FilterIterator
{
  protected 
$verbotene_endungen = array();

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

  public function 
accept()
  {
    if(
is_dir($this->current())) return false;
    
$endung pathinfo($this->current(),PATHINFO_EXTENSION);
    return 
in_array($endung,$this->verbotene_endungen)?FALSE:TRUE;
  }
}

$dir =  new EndungsFilter(
            new 
RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in)),$verbotene_endungen);

$alle 0;
$neue 0;

foreach(
$dir as $datei)
{
  ++
$alle;
  if(
$datei->getMtime()>strtotime('-14 DAY')) ++$neue;
}

echo 
"[$neue|$alle]";
?>
  </div></td>
....
  <td bgcolor="#FFFF99" class="Stil8"><div align="center">
  <?php

$verbotene_endungen 
= array('php','html');
$such_in './Sonstige'

class 
EndungsFilter extends FilterIterator
{
  protected 
$verbotene_endungen = array();

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

  public function 
accept()
  {
    if(
is_dir($this->current())) return false;
    
$endung pathinfo($this->current(),PATHINFO_EXTENSION);
    return 
in_array($endung,$this->verbotene_endungen)?FALSE:TRUE;
  }
}

$dir =  new EndungsFilter(
            new 
RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in)),$verbotene_endungen);

$alle 0;
$neue 0;

foreach(
$dir as $datei)
{
  ++
$alle;
  if(
$datei->getMtime()>strtotime('-14 DAY')) ++$neue;
}

echo 
"[$neue|$alle]";
?>
  </div></td>
...
USW.
Danke für den coolen Support!
MICHA

(Und ich hoffe die "Einrückung" passt jetzt )
Micha2409 ist offline  
Alt 19.01.2009, 20:33  
Neuer Benutzer
 
Registriert seit: 18.01.2009
Beiträge: 21
Micha2409 befindet sich auf einem aufstrebenden Ast
Standard

Hi nochmal!

Hat sich erledigt... Hab's hinbekommen - und zwar so (falls jemand was ähnliches sucht):

Eine Datei namens: "endungsfilter.php" anlegen

In die muss dan folgendes rein:
PHP-Code:
<?php
error_reporting
(E_ALL E_STRICT); 
ini_set('display_errors'TRUE);

class 
EndungsFilter extends FilterIterator
{
  protected 
$verbotene_endungen = array();

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

  public function 
accept()
  {
    if(
is_dir($this->current())) return false;
    
$endung pathinfo($this->current(),PATHINFO_EXTENSION);
    return 
in_array($endung,$this->verbotene_endungen)?FALSE:TRUE;
  }
}
?>
Und dann einfach nur noch an die Stelle wo die Anzahl der gezählten Bilder angezeigt werden soll:

PHP-Code:
  <?php
error_reporting
(E_ALL E_STRICT); 
ini_set('display_errors'TRUE);

$verbotene_endungen = array('php','html');
$such_in './ORDNERNAME'

require_once(
'endungsfilter.php');

$dir =  new EndungsFilter(
            new 
RecursiveIteratorIterator(
              new 
RecursiveDirectoryIterator($such_in)),$verbotene_endungen);

$alle 0;
$neue 0;

foreach(
$dir as $datei)
{
  ++
$alle;
  if(
$datei->getMtime()>strtotime('-14 DAY')) ++$neue;
}

echo 
"[$neue|$alle]";
?>
Ihr müsst einfach noch "ORDNERNAMEN" und evtl. die Anzeigedauer unter "strtotime" anpassen - FERTIG!!!

VIELEN DANK für den schnellen und netten Support!

MICHA
Micha2409 ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem mit Basedir in PhP cmuch05 Datenbanken 9 08.01.2009 14:17
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem Upload mehrere Dateien und schreiben in DB Lapje PHP Tipps 2008 1 22.10.2008 13:12
utf8 Problem (Daten aus DB auslesen) go1denboy PHP Tipps 2008 1 23.09.2008 12:19
Problem mit swfobjects R4v3r JavaScript, Ajax und mehr 8 21.09.2008 14:17
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
datensätze defekt oder problem mit dem einlesen? Ministry Datenbanken 4 06.07.2006 18:42
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
Array Problem [Ansatz ?] PHP Tipps 2005 0 27.01.2005 18:24
[Erledigt] Problem bei Massenmails versenden mit der Funktion mail PHP-Fortgeschrittene 3 19.01.2005 13:36
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Smarty und PHP-Skript Problem PHP Tipps 2004-2 2 03.12.2004 22:27
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34
[Erledigt] Problem mit Timestamp! PHP Tipps 2004 24 08.06.2004 19:51
Login Problem PHP Tipps 2004 4 04.06.2004 18:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
smarty datumsvergleich, datumsvergleich smarty, javascript datumsvergleich, script suche php für einen datumsvergleich, datumsvergleich php4, timestamp mit eregi, http://www.php.de/php-einsteiger/50833-problem-bei-datumsvergleich.html

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:09 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum