Gå til innhold

Hjelp med opp lasting av filer (løst)


Anbefalte innlegg

Jeg har et par problemer med scriptet mitt.

 

 

tabellen i mysql består av 3 felt,

fil_id = primær nøkkel not null

navn = varchar(100) not nul

fil = varchar(100) not null

 

 

<?php

require("config/db.php");

$navn= $_POST['navn'];
$fil = $_FILES['fil'];

$temp_fil = $fil['tmp_name'];
$filnavn = "fil/".$fil['name'];

move_uploaded_file($temp_fil, $filnavn) or die ("Klarte ikke å flytte filen.");

$fil_type = $fil['type'];
$fil_storrelse = $fil['size'];


 echo "<img src='$filnavn' align='center' height='100'><br>";
 echo "<center>Filnavn: ".$filnavn."<br>";
 echo "Filtype: ".$filtype."<br>";
 echo "Filstørrelse: ".$fil_storrelse."<br></center>";

 $sql = "INSERT INTO tbl_file (navn, fil) VALUES ('$navn', '$fil')";
 mysql_query($sql, $db);
 mysql_close($db);
?>

 

Med dette scriptet får jeg til å plasere filene jpeg og wma i mappen fil, men ikke mp3. Når jeg prøver å laste opp mp3 filen Yo.mp3 får jeg beskjed at filen kan ikke flyttes.

 

I tillegg blir navnet rett på filene jeg får laste opp, men i kolonen fil i databasen står det bare Array.

 

I tillegg lurte jeg på hvordan jeg kan kontrollere at det bare er jpeg, jpg, gif, mp3 og wma som lastes opp?

 

Håper noen kan hjelpe meg med dette.

 

Takk på forhånd (god helg)

Endret av Tullen007
Lenke til kommentar
Videoannonse
Annonse

Grunnen til at du ikke kan laste opp mp3 fil, kan være at størrelsen på filen er over det som er satt i php.ini. Mener at den som default er satt til 2 MB, og de fleste mp3 filer er jo over 2 MB

 

Kolonnen fil blir array, fordi $fil er et array ($fil = $_FILES['fil'];). Kolonnen fil trenger du vel ikke i det hele tatt ? Eller vil ertt og slett lagre selve filen i databasen ?

 

Det er flere måter å kontrollere hvilke filer som lastes opp. En måte er å sjekke filendelsen:

$filendelse = substr($filanvn, strrpos($filnavn, "."));

Dette er en måte å finne endelsen på. Men det er sikkert mange som sverger til andre måter.

Evt så kan nok sikkert også ta nytte av $file[type] som vil gi deg filtype på filen, uavhengig av filendelsen. (F.eks en exe fil som har navnet sang.mp3, vil ikke bli identifisert som en mp3 fil)

 

For å lese litt mer om dette:

strrpos

substr

Handling file uploads

 

/k

Lenke til kommentar
Grunnen til at du ikke kan laste opp mp3 fil, kan være at størrelsen på filen er over det som er satt i php.ini. Mener at den som default er satt til 2 MB, og de fleste mp3 filer er jo over 2 MB

 

Kolonnen fil blir array, fordi $fil er et array ($fil = $_FILES['fil'];). Kolonnen fil trenger du vel ikke i det hele tatt ? Eller vil ertt og slett lagre selve filen i databasen ?

 

Det er flere måter å kontrollere hvilke filer som lastes opp. En måte er å sjekke filendelsen:

$filendelse = substr($filanvn, strrpos($filnavn, "."));

Dette er en måte å finne endelsen på. Men det er sikkert mange som sverger til andre måter.

Evt så kan nok sikkert også ta nytte av $file[type] som vil gi deg filtype på filen, uavhengig av filendelsen. (F.eks en exe fil som har navnet sang.mp3, vil ikke bli identifisert som en mp3 fil)

 

For å lese litt mer om dette:

strrpos

substr

Handling file uploads

 

/k

6004148[/snapback]

 

en annen måte å sjekke filendelse på er å bruke pathinfo slik:

 

$fileinfo = pathinfo($file);
$extension = $fileinfo['extension'];
$allowed_files = array("mp3", "wma", "jgeg");
if(in_array($allowed_files, $extension)){
// do stuff
}

if(

Lenke til kommentar
en annen måte å sjekke filendelse på er å bruke pathinfo slik:

 

$fileinfo = pathinfo($file);
$extension = $fileinfo['extension'];
$allowed_files = array("mp3", "wma", "jgeg");
if(in_array($allowed_files, $extension)){
// do stuff
}

Tror det ville vært bedre å sjekke Content-type da filendelser kan lyve.

Lenke til kommentar
en annen måte å sjekke filendelse på er å bruke pathinfo slik:

 

$fileinfo = pathinfo($file);
$extension = $fileinfo['extension'];
$allowed_files = array("mp3", "wma", "jgeg");
if(in_array($allowed_files, $extension)){
// do stuff
}

Tror det ville vært bedre å sjekke Content-type da filendelser kan lyve.

6019104[/snapback]

 

Nå vet jeg svært lite om content-type, men kan den ekstraheres automatisk?

Lenke til kommentar

Hva med å bruke denne funksjonen?

http://no.php.net/manual/en/function.mime-content-type.php

 

Da har du kommet et stykke iallefall.

 

I tillegg bør man vel ha noen check på klient-siden slik at ubrukelig filer ikke lastes opp.

 

Med javascript så kan du iallefall sjekke om det er riktig filetternavn. OM brukeren har skrudd av javascript så blir jo denne ubrukelig. Men du får jo luket ut en god del trafikk.

 

Noe jeg fant på nettet:

 

html:

<input type="file" id="myfile" name="myfile">

 

javascript:

var filename = document.getElementById('myfile').value;
var fileext = filename.substring(filename.lastIndexOf('.')+1);
if (fileext != 'wmv') alert('invalid file type');

 

 

php:

$filetype = $_FILES['myfile']['type'];
if ($filetype != 'audio/x-mpegurl') echo "invalid file type";

Lenke til kommentar
Hva med å bruke denne funksjonen?

http://no.php.net/manual/en/function.mime-content-type.php

 

Da har du kommet et stykke iallefall.

 

I tillegg bør man vel ha noen check på klient-siden slik at ubrukelig filer ikke lastes opp.

 

Med javascript så kan du iallefall sjekke om det er riktig filetternavn. OM brukeren har skrudd av javascript så blir jo denne ubrukelig. Men du får jo luket ut en god del trafikk.

 

Noe jeg fant på nettet:

 

html:

<input type="file" id="myfile" name="myfile">

 

javascript:

var filename = document.getElementById('myfile').value;
var fileext = filename.substring(filename.lastIndexOf('.')+1);
if (fileext != 'wmv') alert('invalid file type');

 

 

php:

$filetype = $_FILES['myfile']['type'];
if ($filetype != 'audio/x-mpegurl') echo "invalid file type";

6025165[/snapback]

 

Men jeg forstår ikke at det skal gjøre noen forskjell. Siden tydligvis mime-type ekstraheres fra file extension lyver den også hvis file extension er feil. Men kan en skjule evilvirus.vb som en mp3-fil og likevel bli kjørt som en vb-fil? Vil ikke da en file handler for mp3 overta og returnere en error siden dette er ukjent filinnhold?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...