fil upload med php "1000 up!!!"

Tags:    php

Hej jeg vil gerne give 1000 points for et rigtig godt svar på hvordan man laver sådan at man kan uploade gennem php, fx ligesom hotmail gør når man trygger "attach" bare ikke lige så detalieret, skriv en reply.

plz......help.......me...... :)

And remember kids Dementia is gonna kill you all!! :)[Redigeret d. 02/11-02 14:45:00 af Simon Laugesen]



3 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Moderne browsere har iflg. RFC-1867 mulighed for at uploade både binære og tekst filer ved hjælp af HTTP-protokollen (NS3+ og IE4+). Dette understøtter PHP selvfølgelig også.

Jeg vil her gennemgå eksemplet (19-1) fra manualen. Det første vi skal bruge er en formular hvor brugeren vælger hvilken fil hun ønsker at uploade:

<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>

_URL_ erstattes af URL'en til det phpscript der skal tage sig af selve uploadprocessen. Det skjulte felt, MAX_FILE_SIZE er den maksimale filstørrelse der kan uploades. Dette felt skal ligge før file-feltet i formularen

I det phpscript du angav i _URL_ vil du få nogle variabler med information om den uploadede fil:

$userfile - Det midlertidige navn filen blev gemt under på serveren.
$userfile_name - Det originale navn filen havde på brugerens computer.
$userfile_size - Den uploadede fils størrelse.
$userfile_type - MIME-typen af den fil der blev uploadet.
Note: Havde du nu kaldt feltet i din formular for foo ville du have fået 4 variabler der hed $foo, $foo_name, $foo_size, $foo_type istedet.

Man skal dog lige huske på at hvis serveren ikke kører med register_globals on skal du tilgå de fire variabler gennem et array:


$userfile => $_FILES['userfile']['tmp_name']
$userfile_name => $_FILES['userfile']['name']
$userfile_size => $_FILES['userfile']['size']
$userfile_type => $_FILES['userfile']['type']


De uploadede filer vil blive gemt i et, af administratoren, dertil konfigureret bibliotek. (upload_tmp_dir). I langt de fleste tilfælde er dette /tmp eller c:\\temp. Du skal sørge for at flytte filerne fra denne midlertidige destination under selve afviklingen af scriptet, da de så snart scriptet er færdigudført vil blive slettet. Dette kan let gøres ved hjælp af en funktion, move_uploaded_file:

<?php
move_uploaded_file($_FILES['userfile']['tmp_name'], "/sti/hvor/filen/skal/gemmes");
?>

Note: Hvis ikke der blev uploadet noget vil $_FILES['userfile']['tmp_name'] have værdien "none".


håber at du kan bruge det jeg har det fra razor.dk



--------------------------------------------------------------------------------


Databasen
Du skal starte med at oprette denne tabel i databasen


CREATE TABLE filer (
id int(4) NOT NULL auto_increment,
data longblob NOT NULL,
name varchar(50) NOT NULL default '',
type varchar(50) NOT NULL default '',
size varchar(50) NOT NULL default '',
PRIMARY KEY (id)
) TYPE=MyISAM;





cls_fileupload.php

<?
class cls_fileupload {
function upload ($filefield) {

// Første finder vi lige navnene på de felter vi skal bruge
$filefield_name=$filefield."_name";
$filefield_size=$filefield."_size";
$filefield_type=$filefield."_type";

// Så henter vi vores felter ind i funktionen
global $$filefield;
global $$filefield_name;
global $$filefield_size;
global $$filefield_type;

// Så gør vi vores indholdet af vores fil klar til at komme ned i databasen
$data = addslashes(fread(fopen($$filefield, "r"), filesize($$filefield)));

// Så gemmer vi filen i vores database
mysql_query("INSERT INTO filer (name, data, size, type) \\n VALUES
('".$$filefield_name."', '".$data."', '".$$filefield_size."', '".$$filefield_type."')");
}

function vis ($id) {
// Her henter vi vores data
$resultat = mysql_query("SELECT data, type from filer where id = ".$id);
while($raekke = mysql_fetch_array($resultat)) { $svar[] = $raekke; }

// Hvis $id ikke findes i databasen
if (sizeof($svar) == 0) {
echo "Kunne ikke finde filen med id ".$id." i databasen!!!";

} else {
// Hvis $id findes i databasen
// Træk værdierne ud
extract($svar[0]);

// sæt typen af indholdet (Husk at der ikke må være sendt noget før!)
header("content-type: ".$type);

// Udskriv filen
echo $data;
}
}

function slet ($id) {
// Slet $id
mysql_query("DELETE FROM filer WHERE id = ".$id.";");
}
}
// Nu mangler vi bare at lave en henvisning til vores klasse
$fileupload = new cls_fileupload;
?>





Eksempel


upload.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Fileupload</TITLE>
</HEAD>

<BODY>
<form method="post" action="upload.php" enctype="multipart/form-data">
<input type="file" name="filen" size="40">
<input type="submit" name="submit">
</form>
</BODY>
</HTML>





upload.php

<?
// Henter klassen
require("cls_fileupload.php");

// Brug dine egne oplysninger
$server = "din server";
$bruger = "din bruger";
$kodeord = "din kode";
$database = "din database";

// Forbinder til MySQL og vælger database
mysql_connect("$server","$bruger","$kodeord");
mysql_select_db("$database");

// gemmer filen i databasen
$fileupload->upload("filen");

// Lukker vores forbindelse til MySQL
mysql_close();

echo "Filen er blevet gemt";
?>





God fornøjelse
ligger på www.asp.dk[Redigeret d. 02/11-02 15:37:30 af martin lund]



Dette spørgsmål er desværre stillet af en snyder, og lukkes derfor. Pointene går til Simon selv, der dog er deaktiveret og derfor ikke får glæde af dem...

--
Mvh.

Kasper (TSW)
Webmaster



t