Avatar billede modandk Nybegynder
25. marts 2011 - 08:40 Der er 4 kommentarer og
1 løsning

Problemer med samlign timestamp på mappe

Alt virker på nær "if (date('d-m-Y',$file) == $stampdato)"
Den skal samlign den dato der er på mappen "$file" med den dato der står i "$stampdato", hvis de to er ens skal den tælle en op "$counter" og udskrive navn på mappen.
Er der en der gider og komme med en løsning ?

$counter = 0;
if ($directory = @opendir("R:/release/"))
  {
  while (($file = readdir($directory)) !== false)
        {
          if ($file != "." && $file != ".." )
              {
              if (date('d-m-Y',$file) == $stampdato)
                {
                echo "Mappenavn: " . $file . "<br />";
                $counter++;
                }
                else{
                    echo "Der er ingen mapper med den dato : " .$stampdato . "<br />";
                    }
              }
        }
        closedir($directory);
  }
 
echo "Antal af nyeste mapper med dato " . $stampdato . " : " . $counter ."<br />";
Avatar billede acore Ekspert
25. marts 2011 - 11:58 #1
Jeg tror det skal være

if (date('d-m-Y',filemtime($file)) == $stampdato)

$file er jo bare filnavnet og date() kræver et timestamp som 2. argument.
Avatar billede Slettet bruger
25. marts 2011 - 12:25 #2
#1:
$file er kun det "lokale" filnavn, filemtime skal bruge hele stien.

Hvis overhovedet filsystemet VIL levere en dato - test det med denne:
<?php

$dirCounters = array();
$rod = "R:/Release/";

if (!is_dir($rod))
    exit("Roden ''$rod'' er ikke en mappe!");
   
if (!$dir = opendir( $rod ))
  exit ("Kan ikke åbne roden: ".$rod);


while (($file = readdir($dir)) !== false)
    if (is_dir($rod.$file))
        if ($file != "." && $file != ".." )
            {
            $dato = date("Ymd",filemtime($rod.$file));

            // if ($dato == "ÅÅÅÅMMDD")
            if (!isset($dirCounters[$dato]))
                $dirCounters[$dato] = 1;
            else
                $dirCounters[$dato]++;
            }


krsort($dirCounters); // sortér arrayet(nøglerne) nyeste øvest
echo "Senest modificerede mapper i $rod:<p>";
foreach ($dirCounters as $dirDato => $antal)
    echo "$dirDato : $antal stk.<br>";

?>
Avatar billede modandk Nybegynder
25. marts 2011 - 13:01 #3
#1
Din løsning virker desværre ikke.

#2
Du er inde på det rigtige spor. Den udskriver hvor mange mapper der er af hver dato. jeg skal kun ha hvor mange mapper der har samme dato som den der står i $dato og udskrive mappernes navn.
Vi har et system hvor der kommer mellem 10 og 50 nye mapper hver dag og derfor vil vi gerne vide 1) hvor mange 2) navnene på de mapper.
Avatar billede Slettet bruger
25. marts 2011 - 13:51 #4
Deluxe udgaven
<?php

$dirCounters = array();
$navne = array();
$rod = "./";//R:/Release/";

// Default tæller den kun mapper ændret "i dag"
// - men kald evt. med "?fra=20010911&til=20101224" (fra 9/11 til sidste jul)
// - eller kun med "?fra=20110101" mapper ændret i år
// - eller med ?fra=20101224&til=21010124 - kun på denne dag

$fra = date("Ymd",time()); if (isset($_GET['fra'])) $fra = $_GET['fra'];
$til = date("Ymd",time()); if (isset($_GET['til'])) $til = $_GET['til'];
//$fra=(int)$fra;$til=(int)$til;


if (!is_dir($rod))
    exit("Roden ''$rod'' er ikke en mappe!");
   
if (!$dir = opendir( $rod ))
  exit ("Kan ikke åbne roden: ".$rod);


while (($file = readdir($dir)) !== false)
    if (is_dir($rod.$file))
        if ($file != "." && $file != ".." )
            {
            $dato = date("Ymd",filemtime($rod.$file));

            if ((int)$dato >= $fra && $dato <= $til)
                if (!isset($dirCounters[$dato]))
                    {
                    $dirCounters[$dato] = 1;
                    $navne[$dato] = "*$file";
                    }
                else
                    {
                    $dirCounters[$dato]++;
                    $navne[$dato] .= "*$file";
                    }
                }


krsort($dirCounters); // sortér arrayet(nøglerne) nyeste øvest
$ialt = 0;
$s = "";
foreach ($dirCounters as $dirDato => $antal)
    {
    $ialt += $antal;
    if ($fra != $til)
        $s .= "<br><br>$dirDato: $antal stk.:";
    $s .= str_replace("*","<br>    ",$navne[$dirDato]);
    }

echo "$ialt modificerede mapper i $rod ";
if ($fra == $til)
    echo "d. $fra";
else
    echo "mellem $fra og $til";

echo "$s";

?>
Avatar billede Slettet bruger
25. marts 2011 - 13:52 #5
Hov, glemte lige at fjerne min testmappe:
$rod = "R:/Release/";
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester