Gå til innhold

Hvordan renamer jeg egentlig en (bilde)fil? LØST!


Anbefalte innlegg

Hei, jeg skal rename en bildefil, men er "litt" usikker på hvordan det gjøres...

 

Jeg har disse variablene:

/*	Forenkler navnet på bildevariablene	*/	
$bildenavn = ($_files['batbilde']['name']);
$bildetype = ($_files['batbilde']['type']);
$bildesize = ($_files['batbilde']['size']);
$bildetemp = ($_files['batbilde']['tmp_name']);

 

Og jeg vet at jeg skal bruke rename().

Men, hvordan finner jeg pathen til tempkatalogen på serveren?

 

-Eller er det så enkelt at jeg kan skrive

rename($bildetemp, nyttnavn(uten path).jpeg);

Hvis ja, må jeg da også ha med filendelsen i det nye navnet? -Eller beholder den automatisk den opprinnelige filendelsen?

 

På forhånd takk for hjelpen! :)

Endret av primaxx
Lenke til kommentar
Videoannonse
Annonse

Mener ganske bestemt å huske at is_uploaded_file() er gammel og ikke fungerer etter move_uploaded_file ble introdusert (4.2.3?)

 

move_uploaded_file henter selv automatisk inn tmp katalogen når du bruker den:

move_uploaded_file($_FILES['inputbok']['tmp_name'], filnavn.filtype);

 

Du må spesifisere filnavn og type.

tmp filen vil hete noe som phpXX.tmp (XX representer et tall).

Det er min lille erfaring med området i hvertfall, navn på tmp fil er uansett uvesentlig.

Lenke til kommentar

Kjære dere, jeg blir GAL... :dribble: Holdt på med dette nå i mange dager, uten å få det til...

 

Ser dere hva jeg gjør galt?

 

Koden ser for øyeblikket slik ut:

<?php
/*	Mappen bildene skal lagres i	*/
$uploads = "/home/xxx/public_html/xxx/images/";

/*	Forenkler navnet på bildevariablene	*/
$bildenavn = ($_files['batbilde']['name']);
$bildetype = ($_files['batbilde']['type']);
$bildesize = ($_files['batbilde']['size']);
$bildetemp = ($_files['batbilde']['tmp_name']);

    include("databasekopling.php");
    $sql = "SELECT photo_id
           	FROM baten
            ORDER BY photo_id desc
            LIMIT 1";
    $sql_resultat = mysql_query($sql);
    $ant_rekker = mysql_num_rows($sql_resultat);

       /*	Smør på flesk, ikke sant?	*/
       if($ant_rekker > 0){
     $photo_id = $photo_id;
           $photo_id++;
       }
       else {
        $photo_id == 1;
       }

       move_uploaded_file(($_files['batbilde']['tmp_name']) , $uploads.($_files['batbilde']['name']).($_files['batbilde']['type']));
       rename($uploads.($_files['batbilde']['tmp_name']) , $uploads.$photo_id.($_files['batbilde']['type']));
?>

 

Feilmeldingen jeg for øyeblikket genererer ser slik ut:

Warning: rename(/home/xxx/public_html/xx/images/,/home/xxx/public_html/xx/images/1): Invalid argument in /home/xxx/public_html/xx/inc/minebatersql.php on line 29

Linje 29 er rename-linjen.

 

Det jeg forsøker på er:

  • Å laste opp et bilde
  • Sjekke om det tidligere er lastet opp bilder, og navngi bildet ut fra det.

Takker som alltid for all hjelp...

Lenke til kommentar
is_uploaded_file($temp_file_name);     

 

move_uploaded_file($temp_file_name,"full web path/tempfile.tmp");

 

Burde hjelpe deg langt på vei

Når det gjelder is_uplooade_file mangler jeg kompetanse til å forstå hva du mener. Hva har den funksjonen med renamingen å gjøre?

 

Mvh Primaxx

Lenke til kommentar

Warning: rename(/home/xxx/public_html/xx/images/,/home/xxx/public_html/xx/images/1): Invalid argument in /home/xxx/public_html/xx/inc/minebatersql.php on line 29

 

Ta en nærmere titt på feilmeldingen du får, (slike er ment å være til hjelp!) Den sier at du prøver å rename en katalog, det er kanskje ikke det du ønsker?

 

Og hvis man så ser på ditt rename-uttrykk, bør dette være en klar indikasjon på at det du tror skal inneholde et filnavn faktisk er tomt.

Lenke til kommentar

Takk for respons Thorbjørn!

 

Men jeg forstår ikke hvorfor den er tom... Filen som sender skjemaet ser slik ut

<form enctype="multipart/form-data" METHOD="POST" ACTION="http://xx/xxx/inc/minebatersql.php" NAME="minebaterskjema">
   <input type="hidden" name="MAX_FILE_SIZE" value="30000">                
   Bilde av båten:
   <input type="file" name="batbilde"  size="40">
<INPUT TYPE="submit" NAME="send" VALUE="send">
</form>

, og bildet jeg tester med er et 16 kb's jpeg.

Det er vel ikke noen grunn til at ikke det skulle bli lastet opp? -Og hvis det blir lastet opp så er vel denne riktig? :

($_files['batbilde']['tmp_name'])

 

Jeg beklager at jeg spør om ting som sikkert er helt banalt for mange av dere... :blush:

 

Mvh Primaxx

Lenke til kommentar
filene ligger i $_FILES, med store bokstaver, står litt om forskjellige globale arrays her:

 

http://bg2.php.net/manual/en/language.vari....predefined.php

Takk igjen Thorbjørn! Jeg har vært der mange ganger i helgen, men titter igjen... :)

 

Men, kan du se noe som er feil i scriptet mitt?

 

Mvh Primaxx

 

-Jeg slang forresten på dette, som umiddelbart ga feilmeldingen at jeg ikke hadde lastet opp noen fil:

if (isset($bildetemp)) {
   	$error = "Du må velge en fil å laste opp!\n";
       if ($error) {
           echo $error;
       }
}

Prøvde for ordens skyld også å bytte ut $bildetemp med $bildenavn i snutten over, uten at det endret noe...

Endret av primaxx
Lenke til kommentar
$_files med små bokstaver er en feil... prøvde du med store?

Ja. Med en gang! :) Her er feilmeldingene jeg får nå:

Du må velge en fil å laste opp!

Warning: move_uploaded_file(/home/xx/public_html/xxx/images/adir.gifimage/gif): failed to open stream: No such file or directory in /home/xx/public_html/xxx/inc/minebatersql.php on line 29

 

Warning: move_uploaded_file(): Unable to move '/tmp/phpWUJsrm' to '/home/xx/public_html/xxx/images/adir.gifimage/gif' in /home/xx/public_html/xxx/inc/minebatersql.php on line 29

 

Warning: rename(/home/xx/public_html/xxx/images//tmp/phpWUJsrm,/home/xx/public_html/xx/images/1image/gif): No such file or directory in /home/xx/public_html/xxx/inc/minebatersql.php on line 30

 

Filen jeg forsøkte å laste opp het adir.gif

 

Her er linje 29 og 30:

       move_uploaded_file(($_FILES['batbilde']['tmp_name']) , $uploads.($_FILES['batbilde']['name']).($_FILES['batbilde']['type']));
       rename($uploads.($_FILES['batbilde']['tmp_name']) , $uploads.$photo_id.($_FILES['batbilde']['type']));

 

Hva annet kan jeg gjøre feil?

 

Mvh Primaxx

Endret av primaxx
Lenke til kommentar

Hey, den var kjekk! :)

 

Her er output:

Array
(
   [batbilde] => Array
       (
           [name] => adir.gif
           [type] => image/gif
           [tmp_name] => /tmp/phpwxv413
           [error] => 0
           [size] => 14524
       )

)

 

Mvh Primaxx

Lenke til kommentar
Jeg drister meg til å påstå at du ikke har giddet å lese dokumentasjonen for move_uploaded_file, for da hadde du sett eksemplet der som gjør akkurat det du ønsker å gjøre...

Jeg er redd du tar feil der, har sittet til langt på natt hele helgen...

 

MEN! Nå får jeg lastet opp bildet! :)

 

Dette virker:

 

      move_uploaded_file(($_FILES['batbilde']['tmp_name']) , $uploads.($_FILES['batbilde']['name']));

 

Mens det jeg tidligere hadde, som ikke virket:

move_uploaded_file(($_FILES['batbilde']['tmp_name']) , $uploads.($_FILES['batbilde']['name']).($_FILES['batbilde']['type']));

 

Jeg hadde med andre ord forvansket det hele...

 

-Og takket være det du fortalte Fjartan fikk jeg til renamingen også! :)

 

Endelig kode ble:

        $file_ext  = array_pop(explode('/', ($_FILES['batbilde']['type'])));
       move_uploaded_file(($_FILES['batbilde']['tmp_name']) , $uploads.($_FILES['batbilde']['name']));
       rename($uploads.($_FILES['batbilde']['name']) , $uploads.$photo_id.'.'.$file_ext);

 

 

Tusen takk for hjelpen!

Lenke til kommentar

ok, flott. her står eksemplet jeg sikter til:

http://no2.php.net/manual/en/features.file-upload.php

 

<?php
// In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
// of $_FILES.

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . $_FILES['userfile']['name'];

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  print "File is valid, and was successfully uploaded. ";
  print "Here's some more debugging info:\n";
  print_r($_FILES);
} else {
  print "Possible file upload attack!  Here's some debugging info:\n";
  print_r($_FILES);
}
print "</pre>";

?>

Lenke til kommentar

Nå som logikken har falt på plass hos meg har jeg ingen problemer med å se hva den koden gjør. Det er verre når $-tegnene svømmer rundt på netthinnen som en sildestim og man overhodet ikke skjønner hva man driver med...

 

Men, igjen, takk! :)

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...