Avatar billede googolplex Novice
06. august 2004 - 22:15 Der er 16 kommentarer og
2 løsninger

Navn på senest uploadede fil

Jeg har en mappe hvor der løbende uploades en række filer. Jeg skal bruge en metode til at finde navnet på den senest uploadede fil. Det ligger (desværre) på en ISS server.

Løsningen skal (helst) være uden db.
Avatar billede googolplex Novice
06. august 2004 - 22:18 #1
Kan jeg bruge fileatime() ?
Avatar billede taskmgr Nybegynder
06. august 2004 - 22:26 #2
Du skal bruge filectime() :)
Avatar billede taskmgr Nybegynder
06. august 2004 - 22:28 #3
Jeg prøver at lave noget...
Avatar billede taskmgr Nybegynder
06. august 2004 - 22:43 #4
Jeg kom frem til det her:
<?
$dir = opendir(".");
while($file = readdir($dir)){
    if($file != "." && $file != ".." && !is_dir($file)){
        $time = filectime($file);
        $data[$time] = $file;
    }
}
krsort($data);
$data = array_values($data);
echo $data[0];
?>
Avatar billede coderdk Praktikant
07. august 2004 - 00:44 #5
<?

  clearstatcache();
  $dir = opendir( "." );
  $newest = 0;
  $name = 'N/A';
  while( $file = readdir( $dir ) )
  {
    if ( is_file( $file ) )
    {
      $time = filemtime($file);
      if ( $time > $newest )
      {
        $newest = $time;
        $name = $file;
      }
    }
  }

  echo "Latest uploaded is $name uploaded " . date( "d/m-Y H:i:s", $newest );

?>
Avatar billede taskmgr Nybegynder
07. august 2004 - 00:47 #6
filemtime() tager den sidst modificerede fil :)
Avatar billede googolplex Novice
07. august 2004 - 00:56 #7
Prøver det lige af og vender tilbage i morgen :)
Avatar billede googolplex Novice
07. august 2004 - 01:09 #8
Jeg får en bunke 'errno=2 - No such file or directory' fejl. Er det mig der gør noget galt eller kan det være pga. ISS serveren ?
Avatar billede googolplex Novice
07. august 2004 - 01:17 #9
Har brugt @ for at undertrykke fejlene, men den vælger altid den sidste fil 'underbar.jpg'. Kan det være fordi at serveren ikke funker som Apache ?
Avatar billede coderdk Praktikant
07. august 2004 - 02:20 #10
taskmgr, hvad mener du tager den sidst modificerede fil? Den tager en fil og returnerer modification time. filectime() returnerer inode changed time...
filemtime = last modified
filectime = last inode change

Anyway, eftersom det er tvivlsomt om nogle af de uploadede filer bliver ændret, vil de jo nok returnere det samme...
Avatar billede coderdk Praktikant
07. august 2004 - 02:26 #11
googolplex, Må vi se din kode? Bruger du min eller taskmgr's? Bruger du opendir( "." );? Mit gæt er at du ikke gør... Prøv:

<?

  $DIRECTORY = "uploadfiler/";
  clearstatcache();
  $dir = opendir( $DIRECTORY . "." );
  $newest = 0;
  $name = 'N/A';
  while( $file = readdir( $dir ) )
  {
    if ( is_file( $DIRECTORY . $file ) )
    {
      $time = filemtime( $DIRECTORY . $file );
      if ( $time > $newest )
      {
        $newest = $time;
        $name = $file;
      }
    }
  }

  echo "Latest uploaded is $name uploaded " . date( "d/m-Y H:i:s", $newest );

?>
Avatar billede taskmgr Nybegynder
07. august 2004 - 09:16 #12
På win32 er filectime() tidspunktet hvor filen blev oprettet.
Avatar billede googolplex Novice
07. august 2004 - 10:11 #13
Har prøvet begge, din kode ser således ud:

<?

    $dir = '/www/holmegaardskolen.dk/images/';
    clearstatcache();
    $dir = opendir($dir . '.');
    $newest = 0;
    $name = 'N/A';

    while($file = readdir($dir))
    {
        if (is_file($dir . $file))
        {
            $time = filemtime($dir . $file);
            if ($time > $newest)
            {
                $newest = $time;
                $name = $file;
            }
        }
    }

    echo "Latest uploaded is $name uploaded " . date("d/m-Y H:i:s", $newest);

?>

http://www.holmegaardskolen.dk/admin/show_ugeplan.php

Det er som om at filemtime() og lignende ikke virker på serveren...
Avatar billede googolplex Novice
08. august 2004 - 09:56 #14
Svar også lige taskmgr, I skal begge have point synes jeg.
Avatar billede coderdk Praktikant
08. august 2004 - 16:10 #15
googolplex, du har omdøbt min variabel $DIRECTORY til $dir hvilket ikke er så godt, da resourcen som opendir() returnerer også bliver sat til $dir... Omdøb enten resourcen eller variablen til noget andet ;)

<?

    $directory = '/www/holmegaardskolen.dk/images/';
    clearstatcache();
    $dir = opendir($directory . '.');
    $newest = 0;
    $name = 'N/A';

    while($file = readdir($dir))
    {
        if (is_file($directory . $file))
        {
            $time = filemtime($directory . $file);
            if ($time > $newest)
            {
                $newest = $time;
                $name = $file;
            }
        }
    }

    echo "Latest uploaded is $name uploaded " . date("d/m-Y H:i:s", $newest);

?>

taskmgr, Det kan godt være, men det er ikke den korrekte opførsel ;) filectime returnerer inode changed time på *nix, og det ser ud til at være hvad googolplex bruger :)
Avatar billede taskmgr Nybegynder
08. august 2004 - 17:00 #16
Jeg regner med at googolplex mente IIS, som han sikkert ikke kører på *nix ;)
Avatar billede taskmgr Nybegynder
08. august 2004 - 17:01 #17
og et svar
Avatar billede coderdk Praktikant
08. august 2004 - 20:49 #18
Hmm, måske bare hans sti /www/holmegaardskolen.dk/images/ der forvirrede mig.
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