Avatar billede wizin Nybegynder
19. oktober 2005 - 20:19 Der er 11 kommentarer og
1 løsning

upload af billeder via php

Jeg har fundet nedenstående upload script på en hjemmeside, men den melder fejl hele tiden når jeg prøver at uploade hvad gør jeg galt

<?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"] = "30";


/**
* 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);
  }

}

?>




Den kommer så med følgende fejlmeddelse



Warning: move_uploaded_file(./upload/ets.JPG): failed to open stream: Permission denied in /web/www/frac/users/danishforce/upload.php on line 67

Warning: move_uploaded_file(): Unable to move '/tmp/phpkHskJI' to './upload/ets.JPG' in /web/www/frac/users/danishforce/upload.php on line 67

Warning: Cannot modify header information - headers already sent by (output started at /web/www/frac/users/danishforce/upload.php:67) in /web/www/frac/users/danishforce/upload.php on line 72
Avatar billede jakobdo Ekspert
19. oktober 2005 - 21:13 #1
Har du et dir som hedder: upload
Hvis ja, har du husket at chmod'e det? (prøv med 777)
Avatar billede showsource Seniormester
19. oktober 2005 - 21:22 #2
Du kan vel ændre
$konfiguration["upload_bibliotek"] = "./upload";
til
$konfiguration["upload_bibliotek"] = "upload";
Avatar billede showsource Seniormester
19. oktober 2005 - 21:26 #3
mnjahh, er nu nok mest til jakobdo kommentar! :O)
Avatar billede nizo Nybegynder
19. oktober 2005 - 22:13 #4
jakobdo: Man kan godt nøjes med chmod($str, 0644);
Avatar billede jakobdo Ekspert
19. oktober 2005 - 22:15 #5
Kommer det ikke an på bruger og gruppen?
Avatar billede nizo Nybegynder
19. oktober 2005 - 22:17 #6
I mit upload system chmod'er jeg kun til 0644 og det virker perfekt..
Der er jo ingen grund til at give flere rettigheder end der er brug for ;o)
Avatar billede nizo Nybegynder
19. oktober 2005 - 22:20 #7
wizin: Prøv at sæt en chmod() efter move_uploaded_file


if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }

til

  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
    chmod($til, 0644);
  } else {
    copy($fra, $til);
  }
Avatar billede nizo Nybegynder
19. oktober 2005 - 22:21 #8
Nej det skal sku nok være før move_uploaded_file ;o)

  if(function_exists("move_uploaded_file")) {
    chmod($fra, 0644);
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }
Avatar billede wizin Nybegynder
20. oktober 2005 - 20:45 #9
Jeg har chmodet det nu som du siger nizo.. det hjælper ikke kommer med samme fejl igen. og ja jeg har et bib der hedder upload på serveren...
Avatar billede jakobdo Ekspert
21. oktober 2005 - 07:44 #10
Prøv at chmod dit upload dir gennem ftp.
Avatar billede wizin Nybegynder
21. oktober 2005 - 16:13 #11
Det behøver jeg nok forklaring på hvordan man gør
Avatar billede jakobdo Ekspert
21. oktober 2005 - 23:06 #12
Login via en FTP klient.
Så højreklikker du på mappen upload
Der skulle du så gerne have en option ala: chmod.
Prøv at start med 777 og se om det virker!
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