Avatar billede kim-hinge Nybegynder
03. februar 2004 - 15:16 Der er 15 kommentarer

Hjælp til billedupload i PHP?

Jeg har fået lavet et billedupload funktion via denne kode:

<?php

/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
*    http://www.webcafe.dk/artikler/php/upload/
*/


/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = "./upload";

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "100";


/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}


/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}


if($_FILES["upfil"]["size"] > 0) {

  /**
  * Hvis der er en fil, saa uploader vi den.
  *
  * Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
  */

  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

  /**
  *  Checker lige om filen er for stor til at vi vil acceptere den.
  *  Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
  *  situation, at fejlmeldingen siger, at filen er for stor, men angiver
  *  samme stoerrelse for filen og den oevre graense.
  */
  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
          $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
          ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }

  header("Location: " . $_SERVER["PHP_SELF"]);
  exit;

} else {

  /**
  * Intet tegn paa upload, saa vi viser bare listen over filer
  * og HTML-formularen til nye uploads.
  */
  $indhold = listFiler($konfiguration["upload_bibliotek"]);
  $indhold .= bygFormular($_SERVER["PHP_SELF"]);
  $output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
**              Hjaelpefunktioner              **
\**************************************************/

function bygSide($titel, $indhold) {

  /**
  * Pakker indholdet ind i lidt formalia
  */
  return '<html>
            <head><title>' . $titel . '</title></head>
            <body bgcolor="#ffffff">
              <div align="right"><a href="./">Tilbage til artiklen</a></div>
              ' . $indhold . '</body>
          </html>
        ';

}

function bygFormular($action) {

  $formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
                <table border="1" cellpadding="5" cellspacing="0">
                  <tr>
                    <td align="right" bgcolor="#999999"><b>Fil til upload:</b></td>
                    <td bgcolor="#cccccc"><input type="file" name="upfil" /></td>
                  </tr>
                  <tr>
                    <td colspan="2" align="middle" bgcolor="#dddddd"><input type="submit" value="upload" /></td>
                  </tr>
                </table>
              </form>
              ';

  return "<h2>Upload fil:</h2>" . $formular;

}

function listFiler($bibliotek) {

  if($bib = @opendir($bibliotek)) {
    /**
    * Denne syntaks er forklaret i PHP-manualen:
    * http://www.php.net/manual/en/function.readdir.php
    */
    while (false !== ($fil = readdir($bib))) {
      if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
          $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
      }
    }
    closedir($bib);

    if(is_array($fil_liste)) {
      $liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
    } else {
      $liste = "<li>Ingen filer p&aring; lager</li>";
    }
    return "<h2>Filer p&aring; lager:</h2><ul>" . $liste . "</ul>";
  } else {
    die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
  }

}

?>

Men jeg vil gerne have lavet så når jeg skal uploade mit billede at jeg så kan dif. hvilken mappe billedet skal gemmes i. Og når den så kalder billederne frem skal den så vi de forskellige mapper!

Nogen der kan hjælpe?
Avatar billede googolplex Novice
03. februar 2004 - 15:26 #1
Lav en <select name="mappe"> i din formular og lav lidt om på dette:

$konfiguration["upload_bibliotek"] = "./upload";

Til:

$konfiguration["upload_bibliotek"] = $_POST['mappe'];
Avatar billede kim-hinge Nybegynder
03. februar 2004 - 16:16 #2
Jeg er newbie.... Hvad mener du med lav lidt om dette?
Avatar billede tefcke Nybegynder
03. februar 2004 - 18:20 #3
Han mener at du skal lave en drop-doen menu med valide upload mapper på serveren. Brugeren kan efterfølgende vælge i hvilken mappe det uploadede billed skal gemmes, via denne drop-down menu!
Avatar billede googolplex Novice
03. februar 2004 - 18:29 #4
Ja - det er det jeg mener :-)
Avatar billede tefcke Nybegynder
03. februar 2004 - 21:29 #5
Det her er en lynhurtig, og i særdeleshed utestet, ændring, du skal såden set bare sætte de mapper som skal listes som mulige upload mapper øverst i scriptet:

<?php

/**
* Simpelt script der tager imod et filupload og lister
* filer i upload-biblioteket.
*
* Scriptet er et eksempel til en artikel paa WebCafe.dk:
*
*    http://www.webcafe.dk/artikler/php/upload/
*/
$mulige_mapper =
    array("./upload",
          "MAPPE_2",
          "MAPPE_3",
          "MAPPE_4",
          "MAPPE_5");


/**
* Hvor skal filerne uploades til?
* Husk, at webserveren skal kunne skrive til dette bibliotek
*/
$konfiguration["upload_bibliotek"] = $_POST["mappe"];

/* Hvor mange kilobytes maa filerne fylde per styk? */
$konfiguration["max_stoerrelse"] = "100";


/**
* Checker PHP-version
*/
list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Jeg kan kun arbejde med PHP 4.0.0 eller derover");
}


/**
* Udligner forskellene mellem 4.1.x og 4.0.x
* Bemaerk, at disse ikke er "superglobals"
*/
if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}


if($_FILES["upfil"]["size"] > 0) {

  /**
  * Hvis der er en fil, saa uploader vi den.
  *
  * Foerst slaar vi lige fast, hvor filen skal flyttes fra og til.
  */

  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

  /**
  *  Checker lige om filen er for stor til at vi vil acceptere den.
  *  Vi bruger ceil() i stedet for round(), saa vi ikke faar den skoere
  *  situation, at fejlmeldingen siger, at filen er for stor, men angiver
  *  samme stoerrelse for filen og den oevre graense.
  */
  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("Desv&aelig;rre - filen er for stor. Jeg accepterer kun " .
          $konfiguration["max_stoerrelse"] . "kb, og din fil fylder " .
          ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }

  header("Location: " . $_SERVER["PHP_SELF"]);
  exit;

} else {

  /**
  * Intet tegn paa upload, saa vi viser bare listen over filer
  * og HTML-formularen til nye uploads.
  */
  $indhold = listFiler($konfiguration["upload_bibliotek"]);
  $indhold .= bygFormular($_SERVER["PHP_SELF"], $konfiguration["upload_bibliotek"]);
  $output = bygSide("hej", $indhold);

}


/**
* Skriver ud til browseren
*/
echo $output;
exit;



/**************************************************\
**              Hjaelpefunktioner              **
\**************************************************/

function bygSide($titel, $indhold) {

  /**
  * Pakker indholdet ind i lidt formalia
  */
  return '<html>
            <head><title>' . $titel . '</title></head>
            <body bgcolor="#ffffff">
              <div align="right"><a href="./">Tilbage til artiklen</a></div>
              ' . $indhold . '</body>
          </html>
        ';

}

function bygFormular($action, $dirs) {

  $formular = '<form action="' . $action . '" method="post" enctype="multipart/form-data">
                <table border="1" cellpadding="5" cellspacing="0">
                  <tr>
                    <td align="right" bgcolor="#999999"><b>Fil til upload:</b></td>
                    <td bgcolor="#cccccc"><input type="file" name="upfil" /></td>
                  </tr>
                  <tr>
                    <td align="right" bgcolor="#999999"><b>Upload til mappe:</b></td>
                    <td bgcolor="#cccccc">
                        <select name="mappe">
              ';
    foreach ($dirs as $dir) {
        $formular .= '
                            <option value="'.$dir.'">'.$dir.'</option>';
    }

    $formular .= '
                        </select>
                    </td>
                  </tr>
                  <tr>
                    <td colspan="2" align="middle" bgcolor="#dddddd"><input type="submit" value="upload" /></td>
                  </tr>
                </table>
              </form>
              ';

  return "<h2>Upload fil:</h2>" . $formular;

}

function listFiler($bibliotek) {

  if($bib = @opendir($bibliotek)) {
    /**
    * Denne syntaks er forklaret i PHP-manualen:
    * http://www.php.net/manual/en/function.readdir.php
    */
    while (false !== ($fil = readdir($bib))) {
      if($fil != "." && $fil != ".." && !ereg("^\..+", $fil)) {
          $fil_liste[] = "<a href=\"$bibliotek/$fil\">$fil</a>";
      }
    }
    closedir($bib);

    if(is_array($fil_liste)) {
      $liste = "<li>" . join("</li><li>", $fil_liste) . "</li>";
    } else {
      $liste = "<li>Ingen filer p&aring; lager</li>";
    }
    return "<h2>Filer p&aring; lager:</h2><ul>" . $liste . "</ul>";
  } else {
    die("Kunne ikke &aring;bne biblioteket: " . $bibliotek);
  }

}

?>
Avatar billede tefcke Nybegynder
03. februar 2004 - 21:31 #6
Hovsa, som sagt yderst utestet:
$indhold .= bygFormular($_SERVER["PHP_SELF"], $konfiguration["upload_bibliotek"]);
skal være:
$indhold .= bygFormular($_SERVER["PHP_SELF"], $mulige_mapper );
Avatar billede kim-hinge Nybegynder
03. februar 2004 - 22:55 #7
Den kommer med fejlen: "Kunne ikke åbne biblioteket: "

Har prøvet at ændre mulige fejl, men der sker intet...
Avatar billede tefcke Nybegynder
03. februar 2004 - 23:31 #8
Det er fordi et af de biblioteker du har angivet ikke er angivet korrekt!

Prøv at indsætte denne debug kode lige efter > $konfiguration["upload_bibliotek"] = $_POST["mappe"];

så der kommer til at stå:
$konfiguration["upload_bibliotek"] = $_POST["mappe"];
if ( !is_dir($konfiguration["upload_bibliotek"]) ) exit("Invalid dir <b>{$konfiguration['upload_bibliotek']}</b>");
Avatar billede kim-hinge Nybegynder
03. februar 2004 - 23:49 #9
Har fået løst problemet!!!
Kan man rimeligt nemt få lavet et album, til at finde rundt i billederne med???
Avatar billede tefcke Nybegynder
04. februar 2004 - 12:11 #10
Tja, det kan man vel, med lidt arbejde. Spørgsmålet er vel bare, hvordan du vil have det skal se ud!
Avatar billede kim-hinge Nybegynder
04. februar 2004 - 14:18 #11
Problemet er bare at jeg ikke har en skid forstand på hvordan man skal lave det i PHP! Men det skal bare være et simpelt album, hvor man hurtigt kan få et overblik over mapper og billeder!
Avatar billede googolplex Novice
04. februar 2004 - 15:24 #12
Hvis du ikke har forstand på det:

http://coppermine.sourceforge.net/

Fungerer perfekt.
Avatar billede tefcke Nybegynder
04. februar 2004 - 15:30 #13
Har lige bikset et ganske simpelt dir visnings script sammen:
<?php
// Liste over mapper som det er muligt at se indholdet af
// NB: HUSK ALTID ET TRAILING SLASH
$mulige_mapper =
    array("./",
          "images/");
// Liste over mappper og filer som skal ekskluderes fra visning
$exclude =
    array(".",
          "..");
// Liste over file-endelser som skal udskrives
$accept_extension =
    array("php",
          "jpg",
          "gif",
          "png");
// Skal mapper ekskluderes fra visning?
$exclude_dirs = true;
?>
<html>
<head>
    <title>Dir listing</title>
</head>
<body>
<div align="center">
<form action="<?php print(basename($_SERVER['PHP_SELF']))?>" method="post">
Vælg mappe :
<select name="mappe" onchange="submit()">
    <option></option>
<?php
foreach ($mulige_mapper as $dir) {
?>
    <option value="<?php print($dir); ?>"><?php print($dir); ?></option>
<?php
}
?>
</select>
</form>
</div>
<?php
/*** BEGIN ***/
if ( isset($_POST['mappe']) ) {
    // Åben directory
    $dir = dir( $_POST['mappe'] );
    print("<ul>\n");
    // Gennemløb directory
    while (false !== ($entry = $dir->read())) {

        // Lad være med at udskrive noget, hvis elementet findes i ekskluderings listen
        if ( !in_array($entry, $exclude) ) {
            // Er det et directory?
            if ( is_dir($_POST['mappe'].$entry) ) {
                // Skal directorys udskrives?
                if ( !$exclude_dirs )
                    print("\t<li><b>$entry</b></li>\n");
            } else if ( is_file($_POST['mappe'].$entry) ) {// Er det en fil?
                // Dekomponering af filen
                $file = pathinfo($_POST['mappe'].$entry);
                // Skal denne filtype udskrives?
                if ( in_array($file['extension'], $accept_extension) )
                    print("\t<li><a href=\"{$file['dirname']}/$entry\">$entry</a></li>\n");
                /*
                print("<pre>");
                var_dump($file);
                print("</pre>");
                */
            } else { // Så er det ingen af delene
                print("\t<li>Neither file or directory!</li>\n");
            }
        }

    }
    print("</ul>\n");
    $dir->close();
}
/*** END ***/
?>
</body>
</html>

I toppen af scriptet er der nogen konfigurations variabler som du kan sætte efter behov.
Avatar billede kim-hinge Nybegynder
12. februar 2004 - 12:54 #14
tefcke kan du ikke komme med et svar, så får du pointene...
Avatar billede tefcke Nybegynder
12. februar 2004 - 14:44 #15
Fik du det til at virke?
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