Avatar billede mekaniker Nybegynder
28. april 2003 - 12:57 Der er 11 kommentarer og
2 løsninger

Upload billede..

Jeg bruger følgende script til upload af et billede.

<?php
$extAll=array(".jpg",".gif");
$ext=strtolower(substr($billede_name,strrpos($billede_name,".")));
if (!in_array($ext,$extAll)){
echo "Ugyldig fil";
} else {
copy ($billede,"files/$billede_name");unlink($billede);
}
?>

kan man udvide dette script til at tjekke om pixel størrelsen er rigtig.
dvs. At billedet kun bliver uploadet hvis det f.eks. er 100 x 150 pixels

Hvordan får man dette til ikke at overskrive et eksisterende billede, men at rename filen til f.eks. filnavn_1.jpg, hvis filnavnet er det samme.
Avatar billede Slettet bruger
28. april 2003 - 13:04 #1
Jeg går ud fra at dit billede kommer fra en upload form, og at du et sted henter værdien fra $_FILES['feltnavn']['tmp_name']

Hvis du gør det kan du bruge getimagesize

$size = getimagesize($billede_name);

Nu er $size et array med lidt info om billedet:

$size[0] er billedets bredde
$size[1] er billedets højde

Husk iøvrigt også at tjekke for filstørrelse.
Avatar billede Slettet bruger
28. april 2003 - 13:06 #2
Iøvrigt bør du bruge move_uploaded_file() i stedet for copy() da sidstnævnte er et potentielt sikkerhedshul.
Avatar billede mekaniker Nybegynder
28. april 2003 - 13:13 #3
Formen ser sådan ud:

<Form Action="upload.php" Method="post" enctype="multipart/form-data">
<Table Cellpadding=0 Cellspacing=0 Border=0>
<Td>Billede:</Td>
<Td><Input Type="File" Name="billede"></Td>
</Tr>
<Tr>
<Td Colspan=2 Align=Center><Input Type="Submit" value="OK"></Td>
</Tr>
</Table>
</Form>

Jeg er helt ny i PHP, og dette var et eksempel jeg fandt som virkede.
Så jeg er ikke helt klar over, hvad du mener med:

Jeg går ud fra at dit billede kommer fra en upload form, og at du et sted henter værdien fra $_FILES['feltnavn']['tmp_name']
Avatar billede jakoba Nybegynder
28. april 2003 - 13:16 #4
som el_barto siger:
På det tidspunkt hvor du checker extension er billedet allerede uploadet til serverens modtagelsesområde. ellers ville du ikke kunne teste på det med php.

<?php
$extAll=array(".jpg",".gif");
$ext=strtolower(substr($billede_name,strrpos($billede_name,".")));
if (!in_array($ext,$extAll)){
    echo "Ugyldig fil";
} else {
        // filtype OK. check nu størrelsen
    $idata = getinamgesize( $billede );
        // http://dk.php.net/manual/en/function.getimagesize.php
    if ( $idata[0] > 100 || $idata[1] > 150 ) {
        echo "Billedet er for stort."
    } else {
            // billedstørrelse ok. check nu for dubletter
        $nr = 0;
        while ( file_exists( "files/$billede_$nr.name" ) ) {
            nr++;
        }
            // og nu kan vi endelig smide billedet ind på plads :-)
        copy ($billede,"files/$billede_$nr.name");unlink($billede);
    }
}
?>

mvh JakobA
Avatar billede jakoba Nybegynder
28. april 2003 - 13:18 #5
Ups. stavefejl :(
    $idata = getinamgesize( $billede );
skal være
    $idata = getimagesize( $billede );
Avatar billede mekaniker Nybegynder
28. april 2003 - 13:27 #6
Jeg får denne fejl:
Parse error: parse error, unexpected T_INC in E:\Websites\php\upload\upload.php on line 23

og dette er denne linie:
            nr++;
Avatar billede schaefner Juniormester
28. april 2003 - 13:28 #7
if ( $idata[0] > 100 || $idata[1] > 150 ) {
        echo "Billedet er for stort.";
Avatar billede mekaniker Nybegynder
28. april 2003 - 14:09 #8
Nu får jeg denne fejl:
Notice: Undefined variable: billede_ in E:\Websites\php\upload\upload.php on line 22

Notice: Undefined variable: billede_ in E:\Websites\php\upload\upload.php on line 26

Warning: unlink(C:\PHP\uploadtemp\php8D1.tmp) [function.unlink]: No such file or directory in E:\Websites\php\upload\upload.php on line 26
----------------------------------------------------
Linie 22:
while ( file_exists( "files/$billede_$nr.name" ) ) {

Linie 26:
move_uploaded_file ($billede,"files/$billede_$nr.name");unlink($billede);
Avatar billede jakoba Nybegynder
28. april 2003 - 14:16 #9
tjae. det er nok mere korrekt at skrive:

Linie 22:
while ( file_exists( "files/" .$billede ."_" .$nr . ".name" ) ) {

Linie 26:
move_uploaded_file ($billede,"files/" .$billede ."_" .$nr .".name");unlink($billede);

men extension skal nu nok heller ikke være .name.
Avatar billede mekaniker Nybegynder
28. april 2003 - 16:41 #10
Nu har jeg fået scriptet til at virke med dette:

<?php
$extAll=array(".jpg",".gif");
$ext=strtolower(substr($a_name,strrpos($a_name,".")));
$name=strtolower(substr($a_name,0,strrpos($a_name,".")));
if (!in_array($ext,$extAll))
    { echo "Ugyldig fil"; }
    else
    {
    if ($a_size > 10000)
        { echo "Filen er for stor";}
        else
        {
        // filtype OK. check nu størrelsen
        $idata = getimagesize( $a );
        // http://dk.php.net/manual/en/function.getimagesize.php
        if ( $idata[0] > 100 || $idata[1] > 150 )
        { echo "Billedet er for stort."; }
        else
        {
        // billedstørrelse ok. check nu for dubletter
          $nr = 0;
        while ( file_exists( "files/$name$nr$ext" ) )
        { $nr++; }
        move_uploaded_file ($a,"files/$name$nr$ext");
        }
    }
}
?>

Er der nogle som måske kan hjælpe med at udvide det lidt mere.
dvs. Jeg vil gerne have det til at tage 4 forskellige filer.
Jeg skulle gerne kunne sætte en pixel størrelse og kb størrelse individuelt for billederne.

//Mekaniker
Avatar billede mekaniker Nybegynder
29. april 2003 - 13:41 #11
JakobA, kan du ikke lægge et svar så jeg kan fordele nogle point.
Avatar billede jakoba Nybegynder
29. april 2003 - 14:34 #12
ok takker.
Avatar billede mekaniker Nybegynder
29. april 2003 - 23:15 #13
Jeg synes i skulle dele point'ne da i begge hjalp mig med en funktion.

Tak for hjælpen.
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