Avatar billede rall Nybegynder
24. april 2004 - 12:54 Der er 24 kommentarer og
1 løsning

PLEASE, en forklaring på fil-behandling

Jeg er i en stor nød.. Jeg har brug for at vide hvordan man (Med PHP) behander filer..
Hvordan man ser navnet på en fil?
Hvordan man ser hvilken filtypen?
Hvordan man ser størrelsen på en fil?

(Evt. et lille script der siger 'tillad kun filer der fylder under 200 kb)

Hvordan man uploader filer til LONGBLOB
- (Jeg kan ikke få filen der op, kun stien)

Den der kan svare på dette bliver tildelt 80 point, og en meget STOR TAK fra min side..
HVH Rasmus den søgende..
Avatar billede dennismp Nybegynder
24. april 2004 - 13:13 #1
> Hvordan man ser navnet på en fil?

Det gør man normalt ikke. Man ser hvilke filer der er i et givent directory.
http://dk.php.net/opendir (der er et eksempel)

> Hvordan man ser hvilken filtypen?

Åbner filen og ser på hvad den indeholder. Langt de fleste filsystemer bekymre sig slet ikke om filens indhold.

>Hvordan man ser størrelsen på en fil?

filesize($filnavn);

dk.php.net/filesize

>(Evt. et lille script der siger 'tillad kun filer der fylder under 200 kb)

if( filesize($filnavn) >= (200*1024) ) // 200 kb = 200 * 1024 bytes
  print "Tillad kun filer der fylder under 200kb';

> Hvordan man uploader filer til LONGBLOB (Jeg kan ikke få filen der op, kun stien)

Hvorfor vil du det? Gem stien i databasen, og resten på filsystemet.
Avatar billede jakobclausen Nybegynder
24. april 2004 - 13:18 #2
undskyld spam.
dennismp >> Er der en resize funktion i php - altså til at rette størrelse på billeder?
Avatar billede dennismp Nybegynder
24. april 2004 - 13:23 #3
jackob: imagecopyresampled (kræver gd2+) og imagecopyresized
Avatar billede rall Nybegynder
24. april 2004 - 13:24 #4
Jaaee.. det var en tynd forklaring.. Men måske var mit spørgsmål også dårligt formuleret! Det jeg gerne vil vide er hvordan man uploader en fil op i en MySQL database, og det jeg skal bruge de andre oplysninger er:
Filtype: Godkend kun JPG/JPEG/GIF/BMP
Filstørrelse: Tillad max 200 kb
Filnavn: Til at se forskel på fillerne

Så hvis du kan kode et script der uploader en fil op i en mysqldatabase, tjekker om det er JPG/JPEG/GIF/BMP og tjekker om den fylder over 200kb, så er pointene dine! :D
Avatar billede dennismp Nybegynder
24. april 2004 - 13:33 #5
.. Hvis du gider tage min opvask, så skal jeg nok :-)

Kig på http://www.php.net/manual/en/features.file-upload.php
Der kan du se at $_FILES indeholder alle de oplysninger du skal bruge (navn,størrelse,imagetype).. Så er det bare om at bruge get_file_contents() på filen og ligge det op i databasen.

Men stadig, hvorfor vil du lægge binære data i databasen? Mange vil gerne smide det i databasen, men jeg har stadig ikke fundet ud af hvorfor..

Jeg har et script der kan hvad du vil, borset fra det med databasen - og jeg vil da genre udvide scriptet med database-support, hvis der er en god grund. (jeg tvivler :) )
Avatar billede rall Nybegynder
24. april 2004 - 13:39 #6
Det er databasen er en nem, hurtigt og smart måde at gøre det på. Det er langt nemmere at overskue det hele, at det bare ligge i en celle.. Så hvis der for eksemple er to der begge oplaoder et billede "mig.jpg" så vil det ene overskrive det andet, med mindre det ligger i en database...

Og det er totalt uoverskueligt med det der link du skrev.. Undskyld jeg siger det! :)
Men hvis nu du kan lave et script som jeg beskrivede tideligere, så ville jeg blive glad ;)
Avatar billede dennismp Nybegynder
24. april 2004 - 13:55 #7
Jo, men nu smed du jo ikke dette spørgsmål i "opgaver", så jeg går ud fra at du gerne vil have hjælp.

nem: Tja, det er måske halvrigtigt. Når man sletter en række i databasen er filen også væk. Men det er så en instruktions man sparer
hurtigt: Nej. Alt fylde databasen op med en masse "junk" den ikke kan bruge (søge, opdatere eller lign) er slet ikke hurtigt. Tabellen vil bliver temmelig stor, og det vil have indflydelse på alle søgninger i den tabel. (om det bliver et reelt problem afhænger jo af mange faktorer)
smart: Tja, det syntes jeg nu ikke. :)

Upload filen til et bibliotek, rename dem til id'et på den række du smider informationerne ind i. (id=1 så er filnavnet 1 eller 1.jpg). Det "rigtige" filnavn (fx. mig.jpg) gemmer du også bare i tabellen, hvis du har behov for det.

Jeg kigger på det senere idag. Har ikke tid itl at lave det nu.. Men kig på http://codewalkers.com/tutorials/35/1.html
Avatar billede Syska Mester
24. april 2004 - 14:49 #8
Rall du kunne jo ligeså godt få en til at lave din hjemmeside, det ville da være nemmere end at få mange til at lave den her.....(hader dovne kodere)

http://www.php.net/manual/en/features.file-upload.php det er da et meget overskuelig link, kan ikke se hvad det uoverskuelige er i det :-S
Avatar billede rall Nybegynder
25. april 2004 - 14:31 #9
Tak for hjælpen dennismp :D Det skal du have mange tak for, men du skal lige huske at angive et spørgsmål som er et "Svar" ellers kan du ikke få point! :P
Så sad jeg lige og legede med at få billede ud af databasen igen, det var ikke så svært:

<?
    require("db_ind.php");
    $sql = "SELECT * FROM image WHERE image_id=$_GET[id]";
    $result = mysql_query($sql);
    $myrow = mysql_fetch_array($result);


$billede = "".$myrow["image"]."";
$FileName = "".$myrow["image_name"]."";
Header("Content-disposition: filename=".$FileName);
Header("Content-type: image/gif");

echo $billede;

exit();

?>
Avatar billede rall Nybegynder
25. april 2004 - 14:34 #10
OV forresten! Har lige fundet ud af at man også kan upload alm. filer :( :( !!
Hvordan tjekker man så om det er et billede brugeren uploader??

- dennismp, du skal nok få point selvom du ikke svare her... ville bare godt lige vide det!! :P
Avatar billede dennismp Nybegynder
25. april 2004 - 14:45 #11
Du kigger på

$_FILES['userfile']['type'] .. den skal være 'image/etelelrandet' for at det er et billede (man kan godt snyde, men har ikke hørt om det).. typerne du er interesseret i er nok

image/bmp','image/png','image/jpeg','image/pjpeg', 'image/gif'
Avatar billede dennismp Nybegynder
25. april 2004 - 14:53 #12
fx

$goodmimes = array('image/bmp','image/png','image/jpeg','image/pjpeg', 'image/gif');
if(! in_array($_FILES['userfile']['type'], $goodmimes) )
  die("Forkert filtype");
Avatar billede rall Nybegynder
25. april 2004 - 17:04 #13
Har givet dig point, men håber du gider svare alligevel.. Funktionen "$_FILES['userfile']['type']" virker ikke hvis man oploader til en MySQL databse :S ??
Avatar billede rall Nybegynder
25. april 2004 - 17:06 #14
Og noget andet der ikke har noget med PHP at gøre (hehe) :
Hvordan er det nu med hvis man bruger en tekst som "Submit" og "Slet" knap.. Er det ikke noget med at linket skal hedde "java script:submit;'formnavn'();" eller sådan noget.. Og hvordan med slet?? :S
Avatar billede dennismp Nybegynder
25. april 2004 - 17:14 #15
$_FILES[hvadditfeltnuhedderiformen]['type'] bliver altid sat når du uploader - dette sker får dit script overtager kontrollen. Så om det bliver slettet, lagt i mysql eller hvad man kan finde på er ligemeget..

Et sted i din kode bruger du vel $_FILES ?

vedr javascript. Aner det ikke. Jeg bruger kun javascript hvis der ikke er andre muligheder :)
Avatar billede rall Nybegynder
25. april 2004 - 18:14 #16
Hov undskyld, jeg tog fejl... $_FILES bliver faktisk brugt en hel del :P
Der er godt nok en fuktion der tager de filer fra der ikke er billede-filer, og hvis man prøver at uploade en anden fil bliver skærmen bare hvid! Hvordan får man det til at melde fejl? Koden er således:

<?

// database connection
$conn = mysql_connect("localhost", "***", "***")
  OR DIE (mysql_error());
@mysql_select_db ("***", $conn) OR DIE (mysql_error());

// Do this process if user has browse the
// file and click the submit button
if ($_FILES) {
  $image_types = Array ("image/bmp",
                        "image/jpeg",
                        "image/pjpeg",
                        "image/gif",
                        "image/x-png");
  if (is_uploaded_file ($_FILES["userfile"]["tmp_name"])) {
    $userfile  = addslashes (fread
                (fopen ($_FILES["userfile"]["tmp_name"], "r"),
                filesize ($_FILES["userfile"]["tmp_name"])));
    $file_name = $_FILES["userfile"]["name"];
    $file_size = $_FILES["userfile"]["size"];
    $file_type = $_FILES["userfile"]["type"];

    if (in_array (strtolower ($file_type), $image_types)) {
      $sql = "INSERT INTO image "
            . "(image_type, image, image_size, image_name, image_date) ";
      $sql.= "VALUES (";
      $sql.= "'{$file_type}', '{$userfile}', '{$file_size}', "
            . "'{$file_name}', NOW())";
      @mysql_query ($sql, $conn);
      Header("Location:".$_SERVER["PHP_SELF"]);
      exit();
    }
  }
}

?>
Avatar billede michael_stim Ekspert
25. april 2004 - 18:22 #17
Som dennismp sagde tidligere, er det en MEGET dårlig ide at uploade billeder og filer til din database. Tro mig jeg har erfaring med det, det bliver utroligt langsomt. Uplad navnet til databasen og filen/billedet til en mappe, det er ikke mere besvärligt.
Avatar billede michael_stim Ekspert
25. april 2004 - 18:23 #18
Uplad=Upload ;o)
Avatar billede dennismp Nybegynder
25. april 2004 - 19:46 #19
<?

// database connection
$conn = mysql_connect("localhost", "***", "***")
  OR DIE (mysql_error());
@mysql_select_db ("***", $conn) OR DIE (mysql_error());

// Do this process if user has browse the
// file and click the submit button
if ($_FILES) {
  $image_types = Array ("image/bmp",
                        "image/jpeg",
                        "image/pjpeg",
                        "image/gif",
                        "image/x-png");
  if (is_uploaded_file ($_FILES["userfile"]["tmp_name"])) {
    $userfile  = addslashes (fread
                (fopen ($_FILES["userfile"]["tmp_name"], "r"),
                filesize ($_FILES["userfile"]["tmp_name"])));
    $file_name = $_FILES["userfile"]["name"];
    $file_size = $_FILES["userfile"]["size"];
    $file_type = $_FILES["userfile"]["type"];

    if (in_array (strtolower ($file_type), $image_types)) {
      $sql = "INSERT INTO image "
            . "(image_type, image, image_size, image_name, image_date) ";
      $sql.= "VALUES (";
      $sql.= "'{$file_type}', '{$userfile}', '{$file_size}', "
            . "'{$file_name}', NOW())";
      @mysql_query ($sql, $conn);
      Header("Location:".$_SERVER["PHP_SELF"]);
      exit();
    }
    else {
      // FEJL BESKED HER
      echo "Vi tillader kun billede-upload";
    }
  }
}

?>
Avatar billede rall Nybegynder
26. april 2004 - 10:32 #20
Okay michael_strim.. Jeg tror på dig, men hvad nu hvis jeg gerne vil have det sådan at hver bruger kan oploade ti billede? Så går det jo ikke at man bare omdøber billedets navn til brugers id. Men hvis du har et script der oploader billedet til serveren og de andre informationer til en database, ville jeg da gerne vi interresseret :D
Avatar billede michael_stim Ekspert
26. april 2004 - 10:40 #21
http://www.udvikleren.dk/article.php?aid=138

OBS OBS. Har ikke set det igennem eller testet det, bare en tut der kom frem da jeg sögte på nettet.
Avatar billede rall Nybegynder
26. april 2004 - 11:09 #22
Tak for linket, men jeg kan ikke lige få det til at funkere. Det er noget med at man skal give en mappe tilladelse til at skrive (777) og det kan jeg ikke få den til... Og så noget med "Fatal error: Call to undefined function: imageresize()"
- Men bortset fra det, tak :D

Og jeg har gået og tænkt over det med billeder i en database. Det er måske en dårlig idé..
Avatar billede michael_stim Ekspert
26. april 2004 - 11:44 #23
Det kan jeg godt forstå at du ikke kan (finde funktionen resize), den er der ikke. Det er til at resize billeder så du får samme störrelse på alle billederne. Her kommer linket til den:
http://www.xyborx.dk/phpbb/viewtopic.php?t=4
Avatar billede dennismp Nybegynder
26. april 2004 - 15:22 #24
Du kan jo sagents smide filnavnet, tidspunkt og hvilken bruger der er uploadet det i en database. Og så bare bruge det id på den række der beskriver filen. Så er du sikker på at det er unikt.
Avatar billede rall Nybegynder
29. april 2004 - 18:07 #25
Hvad med hvis man laver det sådan; at en bruger uploader et billede, informationer kommer i en database og filen bliver døbt "1.jpg", "1.gif" hvis det er gif osv. Og så bliver alle billederne smidt i sammen mappe. Det næste billeder der bliver uploadet kommer til at hedde "2.jpg".. Billederne er let at finde, fordi navnet (Fx 495.jpg) ligger som data i databasen.

Nogle der ved hvordan man kan lave sådan en funktion? En der kigger på fil-typen, så hvis det er jpg så skal den renames til "1.jpg" og hvis der er et billede der hedder det i forvejen så "2.jpg" ?
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