Just nu i M3-nätverket
Gå till innehåll

Får inte till det med bilduppladdning


kungmats

Rekommendera Poster

Hej!

 

Hittade ett exempel script på nätet om bilduppladdning men jag får det inte att fungera.

 

Scriptethämtar och skriver ner bilderna i rätt mapp men bilderna blir bara 0 bytes i mappen och därför visas bara en tom fyrkant istället för bilden. .... Någon som har ett tips, ELLER ett bättre script som även klara giffar?

 

==============================================

<html>

<head>

<?

 

if ($REQUEST_METHOD == "POST")

{

 

/* SUBMITTED INFORMATION - use what you need

* temporary filename (pointer): $imgfile

* original filename : $imgfile_name

* size of uploaded file : $imgfile_size

* mime-type of uploaded file : $imgfile_type

*/

 

/*== upload directory where the file will be stored

relative to where script is run ==*/

 

$uploaddir = "./bilder";

 

 

/*== get file extension (fn at bottom of script) ==*/

/*== checks to see if image file, if not do not allow upload ==*/

$pext = getFileExtension($imgfile_name);

$pext = strtolower($pext);

if (($pext != "jpg") && ($pext != "jpeg"))

{

print "<h1>ERROR</h1>Image Extension Unknown.<br>";

print "<p>Please upload only a JPEG image with the extension .jpg or .jpeg ONLY<br><br>";

print "The file you uploaded had the following extension: $pext</p>\n";

 

/*== delete uploaded file ==*/

unlink($imgfile);

exit();

}

 

 

//-- RE-SIZING UPLOADED IMAGE

 

/*== only resize if the image is larger than 250 x 200 ==*/

$imgsize = GetImageSize($imgfile);

 

/*== check size 0=width, 1=height ==*/

if (($imgsize[0] > 250) || ($imgsize[1] > 200))

{

/*== temp image file -- use "tempnam()" to generate the temp

file name. This is done so if multiple people access the

script at once they won't ruin each other's temp file ==*/

$tmpimg = tempnam("/tmp", "MKUP");

 

/*== RESIZE PROCESS

1. decompress jpeg image to pnm file (a raw image type)

2. scale pnm image

3. compress pnm file to jpeg image

==*/

 

/*== Step 1: djpeg decompresses jpeg to pnm ==*/

system("djpeg $imgfile >$tmpimg");

 

 

/*== Steps 2&3: scale image using pnmscale and then

pipe into cjpeg to output jpeg file ==*/

system("pnmscale -xy 250 200 $tmpimg | cjpeg -smoo 10 -qual 50 >$imgfile");

 

/*== remove temp image ==*/

unlink($tmpimg);

 

}

 

/*== setup final file location and name ==*/

/*== change spaces to underscores in filename ==*/

$final_filename = str_replace(" ", "_", $imgfile_name);

$newfile = $uploaddir . "/$final_filename";

 

/*== do extra security check to prevent malicious abuse==*/

if (is_uploaded_file($imgfile))

{

 

/*== move file to proper directory ==*/

if (!copy($imgfile,"$newfile"))

{

/*== if an error occurs the file could not

be written, read or possibly does not exist ==*/

print "Error Uploading File.";

exit();

}

}

 

/*== delete the temporary uploaded file ==*/

unlink($imgfile);

 

 

print("<img src=\"bilder/$final_filename\">");

 

/*== DO WHATEVER ELSE YOU WANT

SUCH AS INSERT DATA INTO A DATABASE ==*/

 

}

?>

 

 

</head>

<body bgcolor="#FFFFFF">

 

<h2>Upload and Resize an Image</H2>

 

<form action="<?=$SCRIPT_NAME; ?>" method="POST" enctype="multipart/form-data">

<input type="hidden" name="MAX_FILE_SIZE" value="50000">

 

<p>Upload Image: <input type="file" name="imgfile"><br>

<font size="1">Click browse to upload a local file</font><br>

<br>

<input type="submit" value="Upload Image">

</form>

 

</body>

</html>

 

<?

/*== FUNCTIONS ==*/

 

function getFileExtension($str) {

 

$i = strrpos($str,".");

if (!$i) { return ""; }

 

$l = strlen($str) - $i;

$ext = substr($str,$i+1,$l);

 

return $ext;

 

}

?>

 

 

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

 

Är bilderna större än de begränsningar scriptet har (250x200)?

 

I så fall - har du programmen djpeg, pnmscale och cjpeg installerade?

 

Gör scriptet egentligen det du vill (skalar om)? Annars kan du ju ta bort den delen av koden.

 

Vill du inte skala om o greja, så börja med det allra nödvändigaste. Det finns ett exempel på http://www.php.net/manual/en/features.file-upload.php

 

Annars är det ju bara att börja debugga... standardfel med register_globals etc? lite "printf-debugging" brukar reda ut var det skiter sig (eller "print/echo-debug" kanske man ska kalla det i PHP :)

 

 

Länk till kommentar
Dela på andra webbplatser

Hmm!

 

Ja, jag vill skala om bilderna.

 

Om programmen du frågar efter är installerade vet jag inte. Jag kör inte på egen server, men det antar jag att dom måste vara om dom behövs.

 

 

Har testat exemplen du hänvisade till

men jag lyckas inte ens med det.

 

Mappen bilder har fullständiga rättigheter

 

.... jag får:

 

Warning: Unable to create '/bilder': Permission denied in /home/sites/site94/web/skicka.php on line 6

 

Warning: Unable to create '/bilder': Permission denied in /home/sites/site94/web/skicka.php on line 11

 

Warning: Unable to move '/tmp/phpIAtUqL' to '/bilder' in /home/sites/site94/web/skicka.php on line 11

 

 

===============================================

 

<?php

 

 

 

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {

copy($_FILES['userfile']['tmp_name'], "/bilder");

} else {

echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];

}

/* ...or... */

move_uploaded_file($_FILES['userfile']['tmp_name'], "/bilder");

?>

 

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

/bilder pekar på rooten på filsystemet, inte din documentroot. När man använder filfunktioner så har man tillgång till hela filsystemet på hosten (nåja.. de delar man har rätt till) och inte bara sin webkatalog.

 

sätt pathen till $_SERVER["DOCUMENT_ROOT"]."/bilder"

 

 

Länk till kommentar
Dela på andra webbplatser

Jag antar att du menar så här, men jag får exakt samma felmedd.

 

<?php

 

if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {

copy($_FILES['userfile']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/bilder");

} else {

echo "Possible file upload attack. Filename: " . $_FILES['userfile']['name'];

}

/* ...or... */

move_uploaded_file($_FILES['userfile']['tmp_name'], $_SERVER["DOCUMENT_ROOT"]."/bilder");

?>

 

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

yep, men destinationerna i copy() och move_uploaded_file() ska vara filnamn och inte kataloger.

 

nåt i stil med

$dir = "/bilder/";

$filename = $_FILES['userfile']['name'];

$dst = $_SERVER["DOC..."].$dir.$filename;

 

E osäker på $_FILES['userfile']['name'] - kolla manualen...

 

Länk till kommentar
Dela på andra webbplatser

 

inget är svårare än vad man gör det till.

 

Skapa variabler med filnamnen o skriv ut dem o kolla så att allt blir korrekt. Sen tar man ett steg i taget i stället för att försöka reda ut allt på en gång... man ger inte upp :)

 

Har du shell-access på maskinen? i så fall kan du kanske logga in o kolla att sökvägarna stämmer.

 

Länk till kommentar
Dela på andra webbplatser

Nej visst har du rätt i att man inte får ge upp så lätt men detta känns helt klart som ÖVERKURS för mej.

 

Shell-access vet jag heller inte om det finns inst. Jag hyr plats på en unixburk hos ett webhotell och vet inte vad som finns inst.

 

// Mats W \

Länk till kommentar
Dela på andra webbplatser

Nej visst har du rätt i att man inte får ge upp så lätt men detta känns helt klart som ÖVERKURS för mej.

 

kom igen, alla har vi lite motgångar då och då, men om man ger upp med engång så kommer man inte vidare i livet...

 

ta en paus, lyssna på lite trevlig musik och återgå till kodandet sedan.

 

Om du kan logga in med SSH så har du tillgång till systemet

(jag är inget vidare på att förklara det här märker jag .. *ler* )

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...