Avatar billede kgp43 Nybegynder
07. februar 2004 - 09:51 Der er 23 kommentarer og
1 løsning

Upload og resize

Dette spørgsmål er i forlængelse på dette:
http://www.eksperten.dk/spm/461215

Der kommer ikke nogle svar, så jeg regner med det er blvet for gammelt. Jeg smider ekstra 60 point, så det vigtige svar giver 120p.

Jeg har prøvet 3-4 forskellige upload scripts (også uden reseize). De enkelte scripts kommer ikke med nogle fejl, men de uploader heller ikke.

Har brug for at uploade et billede, men det skal reseize's først (så det for den rigtige  størrelse).

Nogle der kan se hvad der er galt?
(har givet upload mapped, 777)
Avatar billede sukos Juniormester
07. februar 2004 - 11:40 #1
hmm, skal prøve noget resize her idag.
Foreløbig er der kun upload:

selve formen:

<form enctype="multipart/form-data" action="upload.php" method="post">
<table><tr>

    <td>V&aelig;lg en fil til upload.<br>
<input name="upfile" type="file" class="input" size="40"> <input type="submit" value="Upload" class="submit">
<br>
Kun jpg-filer accepteres, og de m&aring; ikke v&aelig;re st&oslash;rre end 150Kb</td>

</tr></table></form>

Filen upload.php:

<?php

// Navn på dir der skal uploades til
$dirnavn = "/brugergalleri/";

//stien, hvortil filer skal uploades, her et subdir til roden af domænet   
$dist = $_SERVER["DOCUMENT_ROOT"] . $dirnavn;
$back = " <a href=\"". $dirnavn ."\">Tilbage</a>";

//Er der postet?
if(isset($_FILES["upfile"]) && is_uploaded_file($_FILES["upfile"]["tmp_name"])) {


$picinfo = getimagesize($_FILES["upfile"]["tmp_name"]);

        if($picinfo[0] > 640 || $picinfo[1] > 480) {
        echo"Dit billede er for stort i pixels! Dette er ". $picinfo[0] ." * ". $picinfo[1];
        echo $back;
        exit;
        }

$ext = pathinfo($_FILES["upfile"]["name"]);
$typer = array("jpg", "jpeg");

        if(!in_array(strtolower(@$ext["extension"]), $typer)) {
        echo"Kun jpg eller jpeg filer kan uploades!";
        echo $back;
        exit;
        }


    //Flyt filen fra upload-tmp til et dir. Husk at ændre "$dist" ovenover så det passer med din server :O)
    move_uploaded_file($_FILES["upfile"]["tmp_name"], $dist . $_FILES["upfile"]["name"]);
    chmod($dist . $_FILES["upfile"]["name"], 0755);
}

header("Location:". $dirnavn ."");


?>

Kun jpg filer kan uploades. Max 640*480

Der kommer max. str på 150Kb
Der skal laves en resize, så der er en thmub
Avatar billede kgp43 Nybegynder
07. februar 2004 - 12:24 #2
Sukos: Jeg arbejder på dette script, men får denne fejl:
Fatal error: Call to undefined function: exif_imagetype() in /home/fedtmco/public_html/mytackle/admin/models/reels/add_ok.php on line 93


Script:


//UPLOAD START
$uploaddir = "/home/fedtmco/public_html/mytackle/pics/";
$maxsize = 1000;
if (isset($_POST['submit']) && $_POST['submit'] == "submit") {
    $source = $_FILES['upfile']['tmp_name'];
    if (is_uploaded_file($source)) {
        if (tjektype($_FILES['upfile']['type'])) {
            $dest = $uploaddir . $_FILES['upfile']['name'];
            $dest = tjekfil($dest);
            if (move_uploaded_file($source, $dest)) {
                thumb($dest, $maxsize);
                echo "Upload ok!";
            } else {
                echo "No Upload!";
            }
        } else {
            echo "Denne filtype er ikke tilladt at uploade!";
        }
    } else {
        echo "Ulovlig handling!";
    }
}
echo "<p><img src='".$dest."' alt='thumbnail' /></p>";

function Thumb($sourcefile, $size) {
    $type = exif_imagetype($sourcefile);
    if ($type == IMAGETYPE_PNG) {
        $im = imageCreateFromPNG($sourcefile);
    } elseif ($type == IMAGETYPE_JPEG) {
        $im = imageCreateFromJPEG($sourcefile);
    }
    $source_x = imagesx($im);
    $source_y = imagesy($im);
    $delta = $size/max($source_x, $source_y);
    $dest_x = round($source_x*$delta);
    $dest_y = round($source_y*$delta);
    $target_id = imagecreatetruecolor($dest_x, $dest_y);
    imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
    if ($type == IMAGETYPE_PNG) {
        imagePNG($target_id, $sourcefile);
    } elseif ($type == IMAGETYPE_JPEG) {
        imageJPEG($target_id, $sourcefile);
    }
}

function tjektype($type) {
    $tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
    if(!in_array($type, $tilladt)) {
        return false;
    }else{
        return true;
    }
}

function tjekfil($filnavn) {
    $i = 0;
    $arr = explode(".", $filnavn);
    $ext = array_pop($arr);
    $navn = implode(".", $arr);
    while (is_file($filnavn)) {
        $i++;
        $filnavn = $navn . "." . sprintf("%03u", $i) . "." . $ext;
    }
    return $filnavn;
}
//UPLOAD END
Avatar billede kgp43 Nybegynder
07. februar 2004 - 12:25 #3
Scriptet ovenfor skulle også reseize.
Avatar billede kgp43 Nybegynder
07. februar 2004 - 12:31 #4
btw. scriptet ovenfor uploader ok.
Dog giver den ikke filen et unikt navn (time), hvilket er en ulempe.
Avatar billede sukos Juniormester
07. februar 2004 - 12:43 #5
Det her:
thumb($dest, $maxsize);

hvad med
thumb($uploaddir . $_FILES['upfile']['name'], $maxsize);
Avatar billede kgp43 Nybegynder
07. februar 2004 - 12:47 #6
kan man ikke omdøde filnavnet til den aktuelle tid + rand(0,100) ?

Hvordan vil dette se ud?
Jeg har prøvet at smide et par variabler ind, men det ser ikke ud til at virke.
Avatar billede sukos Juniormester
07. februar 2004 - 12:56 #7
Æhh, så'n ????

<?php
$newname = time() ."_". rand(0,100);
echo $newname;
?>
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:07 #8
Okay.

Jeg har lige fundet ud af at den smider .001 på filnavnet hvis der er flere der hedder det samme.

Nu mangler jeg bare det reseize noget. Ved du hvad der er galt med den fejl den kommer med?

Fatal error: Call to undefined function: exif_imagetype() in /home/fedtmco/public_html/mytackle/admin/models/reels/add_ok.php on line 94
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:13 #9
det der med at den smider .001 efter filnavnet, kan jeg ikke se nogle steder i scriptet. Er det noget php automatisk gør? hvis ja, så er jeg vist nød til at give filen et nyt navn, da jeg ikke har en variable med det nye navn den får (ex. pic.001.jpg eller pic.002.jpg)
Avatar billede sukos Juniormester
07. februar 2004 - 13:16 #10
hmm, næhh, ikke andet end at du skal bruge ver. 4+ af PHP?

Min første kommentar, var fordi jeg tog fejl af tjekfil og tjektype
Avatar billede sukos Juniormester
07. februar 2004 - 13:18 #11
Det er jo i tjekfil() at den bliver renamet, hvis der findes en fil af samme navn i forvejen
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:20 #12
jeg har php ver +4.

Hvordan vil du få stien af det uploaded billede ud i en variabel?
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:22 #13
Så er der ikke noget reseize på scriptet ovenfor?
damn.
Avatar billede sukos Juniormester
07. februar 2004 - 13:24 #14
sti for uploadet billede ender jo med
$dest
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:28 #15
$pic_sti = .$dest.

ohhh man, jeg er lost her.
Avatar billede sukos Juniormester
07. februar 2004 - 13:40 #16
Hmm, nu har jeg ændret lidt, så der bruges pathinfo() for at finde filtype.

Men skulle det ikke lave en thumbnail?

<?php
//UPLOAD START
$uploaddir = $_SERVER["DOCUMENT_ROOT"] ."/brugergalleri/test/";

$maxsize = 1000;
if (isset($_FILES["upfile"])) {
$source = $_FILES['upfile']['tmp_name'];
if (is_uploaded_file($source)) {
if (tjektype($_FILES['upfile']['type'])) {
$dest = $uploaddir . $_FILES['upfile']['name'];
$dest = tjekfil($dest);
if (move_uploaded_file($source, $dest)) {
thumb($dest, $maxsize);
echo "Upload ok!";
} else {
echo "No Upload!";
}
} else {
echo "Denne filtype er ikke tilladt at uploade!";
}
} else {
echo "Ulovlig handling!";
}
}
echo "<p><img src='".$dest."' alt='thumbnail' /></p>";

function Thumb($sourcefile, $size) {
$ext = pathinfo($_FILES["upfile"]["name"]);
if (strtolower($ext["extension"]) == "png") {
$im = imageCreateFromPNG($sourcefile);
} elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") {
$im = imageCreateFromJPEG($sourcefile);
}
$source_x = imagesx($im);
$source_y = imagesy($im);
$delta = $size/max($source_x, $source_y);
$dest_x = round($source_x*$delta);
$dest_y = round($source_y*$delta);
$target_id = imagecreatetruecolor($dest_x, $dest_y);
imagecopyresampled($target_id,$im,0,0,0,0, $dest_x,$dest_y, $source_x,$source_y);
if (strtolower($ext["extension"]) == "png") {
imagePNG($target_id, $sourcefile);
} elseif (strtolower($ext["extension"]) == "jpeg" || strtolower($ext["extension"]) == "jpg") {
imageJPEG($target_id, $sourcefile);
}
}

function tjektype($type) {
$tilladt = array('image/x-png', 'image/png', 'image/pjpeg', 'image/jpeg');
if(!in_array($type, $tilladt)) {
return false;
}else{
return true;
}
}

function tjekfil($filnavn) {
$i = 0;
$arr = explode(".", $filnavn);
$ext = array_pop($arr);
$navn = implode(".", $arr);
while (is_file($filnavn)) {
$i++;
$filnavn = $navn . "." . sprintf("%03u", $i) . "." . $ext;
}
return $filnavn;
}

?>

Lige nu, så bliveret billede på 124*136 forstørret op til 912*1000 :O)
Og der er kun det ene billede i uploaddir.
Avatar billede sukos Juniormester
07. februar 2004 - 13:43 #17
hov, det er jo maxsize.
Troede bare at det var filstr. i Kb
Avatar billede sukos Juniormester
07. februar 2004 - 13:47 #18
nåh, skal ud og handle lidt.
Er tilbage igen senere.
Og vil iøvrigt osse lave "min egen" upload og thumb halløj.
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:51 #19
woops... det skal ikke forstørres. Men laves i en bredde på 150px, men en variablen højde.
Avatar billede kgp43 Nybegynder
07. februar 2004 - 13:53 #20
hmmm.. har jeg forstået dette rigtigt:

Man uploader det aktuelle billede, herefter resize til det rigtige mål, og tilsidst sletter det gamle billede? Eller hvordan foregår det?
Avatar billede kgp43 Nybegynder
07. februar 2004 - 14:40 #21
hehe... har ændret de 1000 til 150.
maxsize er dog i højden.

Prøver lige at ændre det.
Avatar billede kgp43 Nybegynder
07. februar 2004 - 15:28 #22
thumb($dest, $maxsize);

Jeg kan ændre dette til:
thumb($dest,$maxsize,$maxsize)
så ændre den bredden til 150px, men ser lidt weird ud. Er dette den rigtige måde at gøre det på ?
Avatar billede kgp43 Nybegynder
07. februar 2004 - 15:31 #23
hehe... ved ikke lige hvad der gik galt.
Virker stadig ikke.

Det er surt ikke at kunne ændre i indlæg, tråde bliver jo mega lange på ingen tid.
nogle forslag?
Avatar billede kgp43 Nybegynder
19. februar 2004 - 10:20 #24
har fundet en løsning
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