Avatar billede proviben Novice
07. august 2004 - 10:55 Der er 6 kommentarer og
1 løsning

upload-script acceptere ikke jpg filer

Hvorfor vil følgende upload-script ikke acceptere, at uploade jpg filer og hvordan ændre man scriptet således, at alle jpg filer bevarer deres jpg filendelse efter upload?
/Henrik

<?

$pass = sprintf( "%04d", rand( 0, 999999 ) );

if (isset($_POST['Submit'])) {
//stien, hvortil filerne skal placeres
$dist = "./temp/";
//Filer som kan uploades
$filetyper = array("image/gif", "image/jpeg", "image/jpeg", "image/png");
$size = getimagesize($_FILES['upfile']['tmp_name'][0]);
$bytesize = $_FILES['upfile']['size'][0];

if($size[0] > 450) {
echo"Billedet er for stort, prøv igen...<br>";
$ok = "nej";
}elseif($bytesize > 100*1024){
echo "Billedet fylder mere end 100 kb, det går ikke.<br>";
$ok = "nej";
}
if($ok != "nej") {
for($i = 0; $i <= 2; $i++) {
if (isset($_FILES['upfile']['name'][$i]) && $_FILES['upfile']['name'][$i] !="") {
//se http://dk.php.net/manual/en/function.is-uploaded-file.php for "is_uploaded_file"
if(is_uploaded_file($_FILES['upfile']['tmp_name'][$i])) {
//Flyt filer fra upload-tmp til et dir. Husk at ændre "$dist" ovenover så det passer med din server :O)
$navn = $pass + 1;
move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $navn . ".gif");
echo"Din billed ";

echo $pass;

echo" er nu uploadet...<br>";


echo"<img src='$dist$navn.gif' border=0></a><br>";

}
}
}
}
}
?>

<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>

<span class="style1">Upload billeder <br>
</span>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post" name="form1" class="style1" enctype='multipart/form-data'>
<br>
Vælg billedfil:
<input type="file" name="upfile[]">
<br><br>
<input type="submit" name="Submit" value="Indl&aelig;s">
</form>
Avatar billede proviben Novice
07. august 2004 - 11:01 #1
Tilføjelse: scriptet må kun acceptere billed-upload.
Avatar billede detox Nybegynder
07. august 2004 - 12:59 #2
Rettet lidt til:

<?
$pass = sprintf( "%04d", rand( 0, 999999 ) );

if (isset($_POST['Submit'])) {
//stien, hvortil filerne skal placeres
$dist = "./temp/";
$ok = '';
//Filer som kan uploades
$filetyper = array("image/gif", "image/pjpeg", "image/jpeg", "image/png", "image/x-png");
if(!in_array($_FILES['upfile']['type'][0],$filetyper)) {
echo"Filen har ikke den rigtige type, prøv igen...<br>";
$ok = "nej";
}
$size = getimagesize($_FILES['upfile']['tmp_name'][0]);
$bytesize = $_FILES['upfile']['size'][0];

if($size[0] > 450) {
echo"Billedet er for stort, prøv igen...<br>";
$ok = "nej";
}elseif($bytesize > 100*1024){
echo "Billedet fylder mere end 100 kb, det går ikke.<br>";
$ok = "nej";
}
if($ok != "nej") {
for($i = 0; $i <= 2; $i++) {
if (isset($_FILES['upfile']['name'][$i]) && $_FILES['upfile']['name'][$i] !="") {
//se http://dk.php.net/manual/en/function.is-uploaded-file.php for "is_uploaded_file"
if(is_uploaded_file($_FILES['upfile']['tmp_name'][$i])) {
//Flyt filer fra upload-tmp til et dir. Husk at ændre "$dist" ovenover så det passer med din server :O)
$navn = $pass + 1;
$ext = strrchr($_FILES['upfile']['name'][$i], '.');
move_uploaded_file($_FILES['upfile']['tmp_name'][$i], $dist . $navn . $ext);
echo"Din billed ";

echo $pass;

echo" er nu uploadet...<br>";


echo"<img src='$dist$navn$ext' border=0></a><br>";

}
}
}
}
}
?>

<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>

<span class="style1">Upload billeder <br>
</span>
<form action="<? echo $_SERVER['PHP_SELF']; ?>" method="post" name="form1" class="style1" enctype='multipart/form-data'>
<br>
Vælg billedfil:
<input type="file" name="upfile[]">
<br><br>
<input type="submit" name="Submit" value="Indl&aelig;s">
</form>
Avatar billede detox Nybegynder
07. august 2004 - 13:02 #3
Men jeg vil sige, det er ikke optimalt. Da du kun uploader et billede behøver du ikke ligge navnet i et array. Og hvis du vil uploade flere skal der ændres på delen der modtager billedet.
Så spørgsmålet er om du skal kunne hente flere billeder på en gang, eller om du kan nøjes med et?
Avatar billede proviben Novice
07. august 2004 - 16:47 #4
Nej, funktionen skal kun hente et billede per omgang, så scriptet er helt fint nu.
Mange tak detox - de 200 point er på vej.
Avatar billede detox Nybegynder
07. august 2004 - 16:50 #5
Har rettet den lidt mere til. Bedre struktureret og lidt smartere filtypetjek:

<?php
//stien, hvortil filerne skal placeres
$dist = "./temp/";
if (isset($_POST['Submit'])) {
    if (isset($_FILES['upfile']['name']) && $_FILES['upfile']['name'] !="") {
        //se http://dk.php.net/manual/en/function.is-uploaded-file.php for "is_uploaded_file"
        if(is_uploaded_file($_FILES['upfile']['tmp_name'])) {
            $size = getimagesize($_FILES['upfile']['tmp_name']);
            if(empty($size[2]) || $size[2] > 3) {
                echo "<p>Filen har ikke den rigtige type, prøv igen...</p>";
            } elseif($size[0] > 450) {
                echo "<p>Billedet er for stort, prøv igen...</p>";
            }elseif($_FILES['upfile']['size'] > 100*1024){
                echo "<p>Billedet fylder mere end 100 kb, det går ikke.</p>";
            } else {
                $pass = uniqid('');
                $ext = strrchr($_FILES['upfile']['name'], '.');
                $filnavn = $dist.$pass.$ext;
                //Flyt filer 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'], $filnavn);
                echo"<p>Dit billede ";
                echo $pass;
                echo" er nu uploadet...</p>";
                echo"<div><img src='$filnavn' border=0></a></div>";
            }
        }
    }
}
?>

<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
-->
</style>

<p class="style1">Upload billeder</p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="form1" class="style1" enctype='multipart/form-data'>
Vælg billedfil:
<input type="file" name="upfile" />
<br /><br />
<input type="submit" name="Submit" value="Indl&aelig;s" />
</form>
Avatar billede detox Nybegynder
07. august 2004 - 16:51 #6
Ændrede i øvrigt osse til:
$pass = uniqid('');
da jeg går ud fra at det du ønsker er unikke filnavne.
Avatar billede proviben Novice
07. august 2004 - 17:01 #7
Helt perfekt.
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