Gå til innhold

upload med PHP


Anbefalte innlegg

Videoannonse
Annonse
det kan du bestemme i php-scriptet:

<?php

copy($HTTP_POST_FILES['file']['tmp_name'],nyttfilnavnogpath);

?>

og path her kan være relativ til der php-skriptet kjøres fra? f.eks:

 

<?php

copy($HTTP_POST_FILES['file']['bilde.gif'],phpuploaddir/temp/);

?>

 

Har du resten av php-skriptet jeg må bruke, eller er det bare å lage et form som sender filen til dette php-skriptet?

Lenke til kommentar

Jeg bruker følgende script:

 

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

$uploaddir = 'temp/';
$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>";
?>

<form enctype="multipart/form-data" action="<?php echo $php_self; ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

 

og får følgende feilmelding:

 

Warning: move_uploaded_file(temp/eternal_life.jpg): failed to open stream: Ikke tilgang in /home/httpd/vhosts/gamlevenner.com/httpdocs/test/upload.php on line 17

 

Warning: move_uploaded_file(): Unable to move '/tmp/php0YtrDZ' to 'temp/eternal_life.jpg' in /home/httpd/vhosts/gamlevenner.com/httpdocs/test/upload.php on line 17

Possible file upload attack! Here's some debugging info:

Array

(

[userfile] => Array

(

[name] => eternal_life.jpg

[type] => image/pjpeg

[tmp_name] => /tmp/php0YtrDZ

[error] => 0

=> 4479

)

 

)

 

Hva er det jeg mangler tilgang til? Eller er det noe feil med scriptet mitt...?

Lenke til kommentar

Sitat fra php.ini fila:

;;;;;;;;;;;;;;;;

; File Uploads ;

;;;;;;;;;;;;;;;;

 

; Whether to allow HTTP file uploads.

file_uploads = On

 

; Temporary directory for HTTP uploaded files (will use system default if not

; specified).

upload_tmp_dir = C:\PHP\uploadtemp  ; temporary directory for HTTP uploaded files (will use system default if not specified)

 

; Maximum allowed size for uploaded files.

upload_max_filesize = 2M

 

Siden du ikke har tilgang til denne fila dersom du bruker et webhotel ville jeg tatt kontakt med admin på hotelet og spurt han hvor filene havner. Virker ikke som om du har rettigheter til denne upload_tmp_dir. (Gjorde dette for ca 1 år siden, men husker ikke helt hvordan, mulig jeg tar litt feil her)

Lenke til kommentar
Sitat fra php.ini fila:

;;;;;;;;;;;;;;;;

; File Uploads ;

;;;;;;;;;;;;;;;;

 

; Whether to allow HTTP file uploads.

file_uploads = On

 

; Temporary directory for HTTP uploaded files (will use system default if not

; specified).

upload_tmp_dir = C:\PHP\uploadtemp  ; temporary directory for HTTP uploaded files (will use system default if not specified)

 

; Maximum allowed size for uploaded files.

upload_max_filesize = 2M

 

Siden du ikke har tilgang til denne fila dersom du bruker et webhotel ville jeg tatt kontakt med admin på hotelet og spurt han hvor filene havner. Virker ikke som om du har rettigheter til denne upload_tmp_dir. (Gjorde dette for ca 1 år siden, men husker ikke helt hvordan, mulig jeg tar litt feil her)

Her er et utdrag fra phpinfo():

 

file_uploads On On

upload_max_filesize 2M 2M

upload_tmp_dir no value no value

user_dir no value no value

 

Min leverandør av webhotell er også av den litt "uhjelpsomme" typen, så det er ikke veldig lett å be om hjelp til noe her...

 

Anything else I can do?

Lenke til kommentar
Sjekk om filen er der,

echo $_FILES['userfile']['name']."<br>\n";

echo $_FILES['userfile']['type']."<br>\n";

echo $_FILES['userfile']['size']."<br>\n";

echo $_FILES['userfile']['tmp_name']."<br>\n";

Koden min er som følger:

 

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

$uploaddir = 'temp/';
$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>";

echo $_FILES['userfile']['name']."<br>\n";
echo $_FILES['userfile']['type']."<br>\n";
echo $_FILES['userfile']['size']."<br>\n";
echo $_FILES['userfile']['tmp_name']."<br>\n"; 
?>

<form enctype="multipart/form-data" action="<?php echo $php_self; ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="300000" />
Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

 

Og feilmeldingen er som følger:

 

Warning: move_uploaded_file(temp/front.jpg): failed to open stream: Ikke tilgang in /home/httpd/vhosts/gamlevenner.com/httpdocs/test/upload.php on line 17

 

Warning: move_uploaded_file(): Unable to move '/tmp/php2qzwMK' to 'temp/front.jpg' in /home/httpd/vhosts/gamlevenner.com/httpdocs/test/upload.php on line 17

Possible file upload attack! Here's some debugging info:

Array

(

[userfile] => Array

(

[name] => front.jpg

[type] => image/pjpeg

[tmp_name] => /tmp/php2qzwMK

[error] => 0

=> 37288

)

 

)

 

front.jpg

image/pjpeg

37288

/tmp/php2qzwMK

 

Og her er svaret mitt fra webhotell-leverandøren:

Hei

 

Du får sjekke ut dette på forum ute på nettet.

Så kan jeg hjelpe deg når du får svar på hva dette er.

 

Mvh

Frank Bårli

 

-----Opprinnelig melding-----

Fra: Andreas Indahl [mailto:[email protected]]

Sendt: 15. april 2004 21:58

Til: [email protected]

Emne: SV: upload med php

 

Filene skal jeg legge i httpdocs ja, men når de lastes opp vha PHP så legges

de først i en temperær mappe (som spesifisers i php.ini). I php-filen som

form'en går til skal jeg bruke copy() eller move_uploaded_file() for å

flytte filen fra denne temperære mappen til httpdocs. Men, jeg har ikke

tilgang til å flytte filer fra denne temerære mappen. Jeg må med andre ord

ha rettighet til dette.

 

Se her:

 

"Warning:  move_uploaded_file(temp/eternal_life.jpg): failed to open stream:

Ikke tilgang in /home/httpd/vhosts/gamlevenner.com/httpdocs/test/upload.php

on line 17"

 

Dette viser at jeg ikke har tillatelse til å flytte filen fra den temperære

mappen. Kan du fikse dette?

 

Mvh

Andreas

 

Kan noen si meg med sikkerhet at jeg ikke har tilgang til upload_tmp_dir som er spesifisert i php.ini?

 

Takk for all hjelp!

 

Andreas

Lenke til kommentar
Høres ut som du er på en *nix server, da må du gi mappen skriverettigheter.

Jeg kan ikke gi rettigheter da jeg leier plassen på et webhotell. Så dette er event. noe min leverandør må gjøre. Men det er det som er feil, ikke sant? Det virker nemlig ikke som min leverandør vet hva som er feil, og lurte på om jeg kunne sjekke på et forum på internett om det var tilfellet...

 

Så for å oppsummere: jeg trenger bare å vite om det er rettigheter til upload_tmp_dir jeg trenger får å få det til å fungere...

 

Takk for alle svar!

 

//A

Lenke til kommentar
Det er rettighetene til mappen du forsøker å flytte filen til som er problemet, virker det som. Og den kan du sikkert endre CHMOD på hvis du har ftp tilgang. Det finnes også en php funksjon for det.

Men jeg tror det er slik at han ikke har rett til å "gå oppover" i mappestrukturen til /tmp som ligger på rota? Dette er ihvertfall ikke vanlig på webhotel.

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...