Säkerhet i uploadscript
29 svar · 1 550 visningar · startad av learn · sida 2 av 2
learn skrev:
Får detta:
har du skrivit av mitt ex exakt ? den ska nämligen inte anropa mime_content_type om funktionen inte finns
Det är ju det som är problemet. Funktionen finns inte i min PHP-version.
Detta fungerar galant:
<img src="bild.php?namn=test" />
// Root
$root = $_SERVER['DOCUMENT_ROOT'] . '/';
// Där bilderna ligger
$folder= 'bilder/';
// Bilden
$pic= $_GET["namn"];
// Bildtyp
$extension = "jpg";
// Sökvägen
$file_real = $root.$folder.$pic.".".$extension;
// Visa bilden
if ((basename($_SERVER['PHP_SELF']) == 'bild.php')&&($_SERVER['QUERY_STRING'] != null)) {
// Om filen finns
if (file_exists($file_real)) {
// MIME-typ
switch($extension) {
case "bmp": $type = "image/bmp"; break;
case "gif": $type = "image/gif"; break;
case "jpg": $type = "image/jpg"; break;
case "jpe": $type = "image/jpg"; break;
case "jpeg": $type = "image/jpg"; break;
case "qti": $type = "image/x-quicktime"; break;
case "tif": $type = "image/tiff"; break;
case "tiff": $type = "image/tiff"; break;
}
// Skicka bilden till webbläsaren
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public", false);
header("Content-Description: File Transfer");
header("Content-Type: " . $type);
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=" . $pic. ";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($file_real));
@readfile($file_real);
// Bilden finns inte
} else {
}
}
Men nu vill jag kontrollera så att bilden inte är för bred. Säg att maxbredden är 500px. Är den större än så ska den förminskas innan den visas. Jag har förstått att jag ska använda mig av "imagecopyresampled", eller?
I vilket fall som helst får jag det inte att funka. Har ett script (se nedan) men vet inte vart och hur jag ska redigera och pula in det i koden ovan... Snälla kan ngn hjälpa mig med detta. Tack!! :bire
// The file
$filename = 'test.jpg';
// Set a maximum height and width
$width = 200;
$height = 500;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width_orig, $height_orig) = getimagesize($filename);
if ($width && ($width_orig < $height_orig)) {
$width = ($height / $height_orig) * $width_orig;
} else {
$height = ($width / $width_orig) * $height_orig;
}
// Resample
$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
// Output
imagejpeg($image_p, null, 100);
learn skrev:
Det är ju det som är problemet. Funktionen finns inte i min PHP-version.
funktionen finns inte för mig heller .. men det exemplet jag postade fungerar utan det.. finns inte funktionen så använder den system(trim(file -bi osv.. vilket fungerar
det skript du använder .. där sätter du ju $extension till "jpg" o sen testar du $extension med switch .. varför ??
du har ju satt den explicit till "jpg" så då vet du ju vilken filtyp den är.
OK, men hur får jag mitt script att fungera?
R: missade ditt senaste inlägg. I själva verket vet jag inte vilken filtyp det är frågan om. Bilden skickas med i anropet. Jag gör bara exemplet lite enklare.
Någon som har lust att hjälpa mig med mitt problem?
Nobody...?
Jag får det verkligen inte att funka. Hur ska jag få in "storlekshanteringen" i mitt script.
Snälla hjälp mig. :)