Avatar billede tjensen Nybegynder
02. januar 2005 - 14:26 Der er 29 kommentarer og
1 løsning

Fra php gammel til php ny.

Hey!

Jeg er lige igang med at skrive noget om fra ældre php til de nye standarter. Men hvad skal:
".ceil($fil_stoerrelse)."
omskrives til?
Et logisk gæt er jo {ceil($fil_stoerrelse)} men så ser det helt forkert ud i webcoder.

die("Desværre - filen er for stor. Jeg accepterer kun {$konfiguration["max_stoerrelse"]}kb, og din fil fylder ".ceil($fil_stoerrelse)."kb");
Avatar billede Slettet bruger
02. januar 2005 - 14:32 #1
die("Desværre - filen er for stor. Jeg accepterer kun " . $konfiguration["max_stoerrelse"] . " kb, og din fil fylder ".ceil($fil_stoerrelse)." kb");
Avatar billede tjensen Nybegynder
02. januar 2005 - 14:33 #2
Jeg har lært at det ikke hedder ".  ." længere men {  }
Avatar billede jakoba Nybegynder
02. januar 2005 - 14:35 #3
"streng".ceil($fil_stoerrelse)."mer streng"
kan ikke omskrives til noget andet.
Hverken gammel eller ny php tillader at indsætter et funktionskald i en streng for at få funktionens resultat indsat i strengen. det korrekte måde er stadig at lave strengen af stumper sammensat med . operatoren.

nummer 2 kan skrives på andre måder, men jeg ser ingen grund til at skrive den om, den er fin som den er.
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 14:36 #4
Du kan ikke lave funktionskald i {...}-ere i strenge. Virker det som det skal ellers?
Hvor kommer $fil_stoerrelse fra?
Avatar billede tjensen Nybegynder
02. januar 2005 - 14:45 #5
Okay, hmm så ". ." er stadig standart også? Fint nok med mig. Det er et upload script jeg arbejder med, det virker fint nok. Men hvis jeg uploader noget for stor virker det faktsik ikk.

if($_FILES["upfil"]["size"] > 0) {
  $fra = $_FILES["upfil"]["tmp_name"];
  $nytnavn = rename_file($_FILES["upfil"]["name"]);
  $til = $konfiguration["upload_bibliotek"] . "/" . $nytnavn;
  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
    die("Desværre - filen er for stor. Jeg accepterer kun {$konfiguration["max_stoerrelse"]}kb, og din fil fylder ".ceil($fil_stoerrelse)."kb");
  }

Den kommer ikke med nogen fejl melding.
Og kan man ikke teste før filen bliver uploaded? For sætter man en 600 mb fil igang ligger man jo nærmest serveren ned. Eller i hvert fald til php's egen begrænsing er nået.
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 14:52 #6
Er $konfiguration["max_stoerrelse"] sat til et tal, 888, eller en tekst, "888" ?

Nej, man kan ikke nødvendigvis teste før, men mange browserer accepterer at du
sætter en MAXFILESIZE i din HTML i din <form>. Enhver hacker vil ignorere den, men
almindelige mennesker vil blive stoppet. Check nogle eksempler.
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 14:52 #7
Du skal vel egentlig bare bruge $_FILES["upfil"]["size"]  ...
Avatar billede tjensen Nybegynder
02. januar 2005 - 14:54 #8
$konfiguration["max_stoerrelse"] = "1000";
Avatar billede tjensen Nybegynder
02. januar 2005 - 14:56 #9
Det var maxfilesize jeg var ude efter. Det er heller ikke så meget for at stoppe hacker, enhver hacker ville nok keder sig ret meget på den anden side af mit logind. Har sku ikke det store at skujle :)
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 14:58 #10
Så tag lige og
$konfiguration["max_stoerrelse"] = 1000;
Avatar billede tjensen Nybegynder
02. januar 2005 - 14:59 #11
Kan du ikke lige forklare lidt mere om $_FILES["upfil"]["size"] ?
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:05 #12
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:06 #13
Der kommer stadig ingen fejl meddelse, trods $konfiguration["max_stoerrelse"] = 1;

Har sat den til 1 lige i mens jeg tester.. :)
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:06 #14
Brug af filesize kan måske konflikte med safemode, og når du nu kan få størrelsen
forærende i $_FILES, så skal du selvfølgelig bruge den.
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:06 #15
okay, takker! Vil du have pointz?
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:07 #16
Hele din kode igen?
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:07 #17
Nej tak, ingen point tli mig.
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:12 #18
Hele min kode:

<?php
$konfiguration["upload_bibliotek"] = "upload";
$konfiguration["max_stoerrelse"] = 1;

function rename_file($str) {
    $str = str_replace("æ", "ae", $str);
    $str = str_replace("ø", "oe", $str);
    $str = str_replace("å", "aa", $str);
    $str = str_replace(" ", "_", $str);
    return $str;
}

if($_FILES["upfil"]["size"] > 0) {
    $fra = $_FILES["upfil"]["tmp_name"];
    $nytnavn = rename_file($_FILES["upfil"]["name"]);
    $til = $konfiguration["upload_bibliotek"] . "/" . $nytnavn;
    $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);
    }
    echo "<script>location.href='?vis=upload';</script>";
    exit;
} else {
    $indhold = listFiler($konfiguration["upload_bibliotek"]);
    $indhold .= bygFormular("?vis=upload");
}
echo $indhold;
function bygFormular($action) {
    $formular = "<form action='{$action}' method='post' enctype='multipart/form-data'>
                            <input type='hidden' name='MAX_FILE_SIZE' value='1' />
                            <input type='file' name='upfil' />
                            <br><input type='submit' value='Upload' /></form>";

  return "<br><br>Upload fil:".$formular;

}
function listFiler($bibliotek) {
    if($bib = @opendir($bibliotek)) {
        while (false !== ($fil = readdir($bib))) {
            if($fil != "." && $fil != ".." && $fil != "index.php" && !ereg("^\..+", $fil)) {
                if (substr($fil,-3) == "jpg") {
                    $icon = "images/fil/jpg.gif";
                }elseif (substr($fil,-3) == "doc") {
                    $icon = "images/fil/doc.gif";
                } else {
                    $icon = "images/fil/any.gif";
                }
                $fil_liste[] =  "<p><img src='{$icon}'> <a href='{$bibliotek}/{$fil}' target='_blank' style='position:relative;top:-2px;'>{$fil}</a></p>";
            }
        }
        closedir($bib);
        if(is_array($fil_liste)) {
            $liste = join("", $fil_liste);
        } else {
            $liste = "Ingen filer i arkivet.";
        }
        return "Filer i arkivet<br>".$liste;
    } else {
        die("Kunne ikke &aring;bne biblioteket: {$bibliotek}");
    }
}
?>
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:14 #19
ok - og hvad virker / virker ikke ?
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:17 #20
Der kommer ingen fejl meddelese når jeg uploader noget for stor..
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:22 #21
Ret
$fil_stoerrelse = filesize($fra)/1024;
til
$fil_stoerrelse =  $_FILES["upfil"]["size"];/1024;
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:22 #22
$fil_stoerrelse =  $_FILES["upfil"]["size"]/1024;

;)
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:28 #23
Næh, meget underlig syntes jeg.. Den vise ingen fejl, den uploader simpelthen bare ikke.
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:33 #24
Sæt testudskrifter ind, masser af steder, fx:

print "FØR: {$_FILES["upfil"]["size"]}<br>";
if($_FILES["upfil"]["size"] > 0) {
print "EFTER<br>";

...osv....
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:39 #25
Okay, undskyld jeg har selv leget lidt og sat
<input type='hidden' name='MAX_FILE_SIZE' value='100000' />

ind, den har jeg sat til de samme værdier som $konfiguration["max_stoerrelse"]

Men ikke taget højde for at den ikke arbejde i sammen størrelses orden.
Men hvordan får man så <input type='hidden' name='MAX_FILE_SIZE' value='100000' />
til at aktivere fejl meddelesen?
Sender den en værdi eller noget man kan teste?
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:42 #26
Det kan jeg ikke huske ;) Prøv ...
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:44 #27
Har selv fundet $_FILES['upfil']['2'] som jeg mener kan bruges.

Mange tak for hjælpe! Fandt den på dit tidligere link! Rigtig mange tak!
Avatar billede tjensen Nybegynder
02. januar 2005 - 15:45 #28
Eller $_FILES['upfil']['error'] jo...
Avatar billede erikjacobsen Ekspert
02. januar 2005 - 15:46 #29
Det skal nok passe ;)
Avatar billede tjensen Nybegynder
14. januar 2005 - 21:33 #30
lukke tid
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