[PHP]Image upload -> hoe simpel te resizen?

Pagina: 1
Acties:
  • 149 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Henkie-Jan
  • Registratie: Mei 2005
  • Laatst online: 12-09 19:38
Hallo allemaal,

Tja, ik weet dat er heel veel verschillende resize mogelijkheden. Alleen ik ben echt een beginner in PHP en vind ze vrij pittig.

Wat is de situatie: Gebruikers loggen in, en kunnen door middel van een file upload formulier een afbeelding uploaden.(smoelenboek) Dit wordt verwerkt door verwerkupload.php en dat gaat allemaal goed. De naam van de afbeelding en een korte omschrijving worden genoteerd in de SQL database, om het later er weer voor te toveren, en indien gewenst te wijzigen.

Wat is de code van het upload script:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
//maak lokale variabele van omschrijving
$omschrijving = $_POST["omschrijving"];
$size = $_FILES['afbeelding']['size'];

//maak een unieke bestandsnaam a.d.h.v. de tijd
$filename = time();

//Controleer de grote van het bestand in bytes.
if($size > 110000) {
echo "Je foto mag niet groter zijn dan 100KB";
} else {

//split de bestandsnaam en extensie
list($fname, $extensie) = split('[.]',$_FILES['afbeelding']['name']);

//maak nieuwe bestandsnaam
$newfile = $filename . "." . $extensie;

//Wat is de uploaddir?
$uploaddir = "images/";

//verplaats de handel maar!
move_uploaded_file($_FILES['afbeelding']['tmp_name'], $uploaddir . $newfile);

//Voeg gegevens toe aan SQL tabel
$query = "INSERT INTO smoelen(smoelid,omschrijving,afbnaam) VALUES(NULL,'$omschrijving','$newfile');";

$result = mysql_query($query);

header("location: overzicht.php");
}

?>


Ik zou het heel graag willen leren, maar nogmaals, ben een beginner hier mee, dus snap die andere vele scripts op internet niet... 8)7

Zonnepanelen: 800Wp op oost 80 graden aan balkon met schaduw


Acties:
  • 0 Henk 'm!

  • wcduck
  • Registratie: September 2000
  • Niet online
Is de GD library geinstalleerd?

I don't suffer from insanity, I enjoy every minute of it.


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Je schrijft
Tja, ik weet dat er heel veel verschillende resize mogelijkheden.
Nou ja, begin dan deze mogelijkheden eens op te schrijven. Je komt waarschijnlijk gewoon bij GD uit. Dus pak dan de handleiding van GDlib er eens bij en ga een beetje prutsen.

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Als je niet zo goed PHP kan heb je ook allerlei kant-en-klare oplossingen. Daar leer je niets van, maar zelf schrijven is wellicht te hoog gegrepen.

Pas trouwens op voor SQL Injection. Als Magic Quotes uit staan, kunnen mensen SQL queries uitvoeren op je database.

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
Als je op php.net in het zoekveldje intypt "resize" kom je toch de resize functies tegen? (hier dus, maar misschien ben je op zoek naar imagecopyresampled() - bekijk die ook eens)

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

http://www.verot.net/php_class_upload.htm

mooie complete class.. werkt vrij eenvoudig en heeft nog wat andere leuke feautures.

succes

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Blaise schreef op maandag 25 juni 2007 @ 23:42:
Pas trouwens op voor SQL Injection. Als Magic Quotes uit staan, kunnen mensen SQL queries uitvoeren op je database.
Gewoon addslashes() of mysql_real_escape_string() gebruiken?
(Ben niet zo'n fan van magic_quotes, aangezien je voor mijn gevoel een beetje de controle verliest...)

Acties:
  • 0 Henk 'm!

  • kokx
  • Registratie: Augustus 2006
  • Laatst online: 13-09 20:30

kokx

WIN

gwirken schreef op dinsdag 26 juni 2007 @ 10:57:
[...]

Gewoon addslashes() of mysql_real_escape_string() gebruiken?
(Ben niet zo'n fan van magic_quotes, aangezien je voor mijn gevoel een beetje de controle verliest...)
Ik strip magic_quotes altijd aan het begin van de pagina:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
/**
 * Strip all the slashes in an array or string
 *
 * @param array|string  $var
 *
 * @return array|string
 */
function stripSlashesDeep($var)
{
    return is_array($var)
        ? array_map('stripSlashesDeep', $var)
        : stripslashes($var);
}

if (get_magic_quotes_gpc()) {
    // strip the slashes in GET, POST and COOKIE
    $_GET    = array_map('stripSlashesDeep', $_GET);
    $_POST   = array_map('stripSlashesDeep', $_POST);
    $_COOKIE = array_map('stripSlashesDeep', $_COOKIE);
}

Acties:
  • 0 Henk 'm!

  • djiwie
  • Registratie: Februari 2002
  • Laatst online: 17-09 16:35

djiwie

Wie?

Kun je het niet gewoon uitzetten dan?

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Een beetje ranzige code die ik vroeger gebruikte (code gedeeltelijk gestript want deze voegde ook nog dingen aan DB toe, watermerk, miniatuur op 2 maten, etc)

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
function makeThumb($upload, $basedir, $picnr, $titel, $fotoboek) {
  $new_w = "120";
  $image_stats = GetImageSize($upload);
  $imagewidth = $image_stats[0];
  $imageheight = $image_stats[1];
  $ratio = ($imagewidth / $new_w);
  $new_h = round($imageheight / $ratio);
  $src_img = imagecreatefromjpeg($upload);
  $dst_img = imagecreatetruecolor($new_w,$new_h);
  imagecopyresized($dst_img,$src_img,0,0,0,0,$new_w,$new_h,imagesx($src_img),imagesy($src_img));
  imagejpeg($dst_img, $basedir."/fotos/klein/".$picnr.".jpg");
}

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Henkie-Jan
  • Registratie: Mei 2005
  • Laatst online: 12-09 19:38
Ik ga al jullie suggesties even door lezen. :)

[ Voor 71% gewijzigd door Henkie-Jan op 26-06-2007 15:16 ]

Zonnepanelen: 800Wp op oost 80 graden aan balkon met schaduw


Acties:
  • 0 Henk 'm!

  • X-trace
  • Registratie: Juni 2004
  • Laatst online: 02-11-2024
ik gebruik zelf vaak een van PHP Classes

You cannot not communicate


Acties:
  • 0 Henk 'm!

  • Henkie-Jan
  • Registratie: Mei 2005
  • Laatst online: 12-09 19:38
Ik heb de erg uitgebreide class van verot.net gebruikt. Mijn dank voor die suggestie. Ik gebruik trouwens maar een heel klein deel van de mogelijkheden, kan er nog misbruik worden gemaakt van de andere mogelijkheden?

en nu worden de afbeeldingen onder de bestandsnaam opgeslagen in een mapje /images. Aangezien de rest afgeschermd is door middel van een sessie, wil ik eigenlijk ook beveiligen dat men niet de afbeeldingen kan zien zonder in te loggen. Dus naar /images te gaan en ze door de index service bekijken of de bestandsnaam in te typen. Ik kan er wel een .htaccess in gooien, maar dan kan ik ze waarschijnlijk niet meer openen met PHP. Wat voor oplossingen zijn daar voor?

Zonnepanelen: 800Wp op oost 80 graden aan balkon met schaduw


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Met een .htaccess kun je ze wel degelijk nog steeds openen in php, maak je daarover geen zorgen :)

.htaccess regelt (mits goed ingesteld) toegang voor gebruikers van je webserver, PHP draait echter als lokaal proces en trekt zich daar weinig van aan ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Henkie-Jan
  • Registratie: Mei 2005
  • Laatst online: 12-09 19:38
Ok vet. :)
En externe PHP applicaties kunnen er dus ook niet bij, omdat het geen lokaal proces is?

Zonnepanelen: 800Wp op oost 80 graden aan balkon met schaduw


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Externe PHP applicaties moeten wel via de webserver. Stands to reason.

Niet vergeten dat PHP van oorsprong een set CGI binaries was geschreven in C - dit merk je ook aan functies als sprintf die nagenoeg hetzelfde werken in C / C++ en PHP. Wat je webserver doet is PHP.exe aanroepen met als argument de naam van het bestand wat je opvraagt en vervolgens 'compileert' PHP dat. Echo's en print_r's worden opgevangen door je webserver die ze vervolgens weer aan de gebruiker voorschotelt. Grappige bijkomstigheid: jij kan dat ook doen! Ga maar eens in een command window naar de locatie van je script, zorg dat php.exe in je system PATH staat en run php.exe filename.php ;)

Aangezien PHP dus feitelijk los staat van je webserver hoeft het zich ook niets aan te trekken van een eventuele htaccess, mits het bestand lokaal aangeroepen wordt. Zou je met PHP bijvoorbeeld http://jouwsite.nl/bestand.php includen gaat'ie zich wel precies aan de .htaccess houden. Moet je overigens niet doen want het zorgt voor een berg overhead, maar het kan wel :)

Qua rechten van PHP lokaal ben je grootdeels afhankelijk van de account waarin'ie draait, als ik me niet vergis is dat afhankelijk van je OS en configuratie de lokale systems account of de account van de webserver waar'ie door aangeroepen wordt.

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • Henkie-Jan
  • Registratie: Mei 2005
  • Laatst online: 12-09 19:38
Hmm, ik roem de afbeelding nu zo aan op de externe host, en hij vraagt wel om een gebruikersnaam en wachtwoord...

PHP:
1
<img src="images/<?php echo $rij["afbnaam"]?>" alt="<?php echo $rij["afbnaam"]?>" />


Of moet ik gewoon C:\blabla\mapje\nogeen\images\plaatje.gif doen?

[ Voor 25% gewijzigd door Henkie-Jan op 29-06-2007 17:17 ]

Zonnepanelen: 800Wp op oost 80 graden aan balkon met schaduw


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 15:46
Henkie-Jan schreef op vrijdag 29 juni 2007 @ 17:05:
Hmm, ik roem de afbeelding nu zo aan op de externe host, en hij vraagt wel om een gebruikersnaam en wachtwoord...

PHP:
1
<img src="images/<?php echo $rij["afbnaam"]?>" alt="<?php echo $rij["afbnaam"]?>" />


Of moet ik gewoon C:\blabla\mapje\nogeen\images\plaatje.gif doen?
Als je mensen wel de mogelijkheid wilt geven om een bestand uit /images op te halen zul je niet de toegang tot de hele directory moeten blocken met een .htaccess, maar in plaats daarvan alleen directory indexing uitzetten. Dan kunnen er wel plaatjes worden opgevraagd uit die directory, maar browsen naar /images levert geen overzicht van de inhoud meer op (403 access denied). Een iets minder nette oplossing is een lege index.html.

.htaccess:
code:
1
Options -Indexes

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Nog een snelle tip tussendoor ;

Doe aan foutafhandeling..
Je kijkt dus niet eens of een query gelukt is, zelfde geld voor het uploaden. je controleert niet of het uploaden wel gelukt is..

[ Voor 71% gewijzigd door sky- op 29-06-2007 23:29 ]

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 09:34
Henkie-Jan schreef op vrijdag 29 juni 2007 @ 17:05:
Hmm, ik roem de afbeelding nu zo aan op de externe host, en hij vraagt wel om een gebruikersnaam en wachtwoord...

PHP:
1
<img src="images/<?php echo $rij["afbnaam"]?>" alt="<?php echo $rij["afbnaam"]?>" />
Ja nogal logisch, je bent nu bezig met de client - die heeft niks met PHP te maken. Je vraag was of je ze kan openen met PHP, en dat kan. Sterker nog, dit zal wel weer werken:
PHP:
1
readfile($rij['afbnaam']);


Wellicht was ik niet duidelijk net, maar PHP trekt zich niets van een .htaccess aan, iedereen die via je webserver bij bestanden moet wel. Als je de webpagina bekijkt doe je dat via de webserver en dus heb je dan wel weer te maken met .htaccess restricties. Bovenstaande oplossingen werken dan goed om te voorkomen dat mensen een open dir krijgen :)

Alternatieven zijn onder andere PHP image data te laten herschrijven (zoals bijvoorbeeld met readfile kan), met server authentication werken (wat al wat lastiger is) of PHP images laten afhandelen met een controle op cookie / sessie en een header redirect. Elke methode heeft zo z'n voor- en nadelen, welke het beste bij jou past zul je zelf moeten uitvogelen :)

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1