Hoi iedereen ik heb een probleem met mijn upload script.

de code staat onderaan deze post.

het probleem is deze regel :
<?php
if(imagepng(imagecreatefromstring($_FILES['profielFoto']['tmp_name']), $path.$id.".png"))
?>

de error die deze regel geeft is als volgt:
<br />
<b>Warning</b>: imagecreatefromstring(): Data is not in a recognized format in <b>D:\Program Files\devel\xampp\htdocs\git\Business-leaders\controller\adminajax_controller.php</b> on line <b>1430</b><br />
<br />
<b>Warning</b>: imagepng() expects parameter 1 to be resource, boolean given in <b>D:\Program Files\devel\xampp\htdocs\git\Business-leaders\controller\adminajax_controller.php</b> on line <b>1430</b><br />

iemand suggesties?

Mvg
Ralph

de controller
<?php
elseif($this->arguments[0] == 'saveprofilefoto'){

// path waar naar de foto moet worden geupload.
$path=Settings::$include_path."/uploaded/avatar_realsize/test/avatar_realsize/";
// toegestaane extenties
$valid_formats = array("jpg", "png","jpeg");
// maximale grootte (5mb) in bytes, dit komt omdat de ajax het doorgeeft in bytes.
$max_size = 5 * 1024 * 1024;
//nieuwe naam
$id=$_POST[0]['id'];

// grootte
$size= $_FILES['profielFoto']['size'];

// naam
$name= $_FILES['profielFoto']['name'];
if($size < $max_size)
{
list($txt,$ext) = explode(".",$name);
if(in_array($ext,$valid_formats))
{
// tijdelijke servernaam
if(imagepng(imagecreatefromstring($_FILES['profielFoto']['tmp_name']), $path.$id.".png"))
{
// path voor de geresizede img.
$resized_path=Settings::$include_path."/uploaded/avatar_realsize/test/avatar/";
//public static function resizeImage($originalImage,$type,$toWidth,$toHeight)
// imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )
// small 50px x 50px

$small=image::resizeImage($path.$user_id.".png","png",50,50);
imagepng($small, $resized_path.$id."_small.png");

// medium 100x100
$medium=image::resizeImage($path.$user_id.".png","png",100,100);
imagepng($medium,$resized_path.$id."_medium.png");

// large 250x250
$large=image::resizeImage($path.$user_id.".png","png",250,250);
imagepng($large, $resized_path.$id."_large.png");
echo json_encode(array("success"=> true));
}
}else{
// extentie niet toegestaan
echo json_encode(array('error'=>' extentie niet toegestaan'));
}
}
}
else
{
// bestand te groot
echo json_encode(array('error'=>' file te groot'));
}
?>

[size=xsmall]Toevoeging op 03/06/2013 10:40:05:[/size]

http://jquery.malsup.com/form/#api hier staat de api van de plugin die wordt gebruikt
De error reporting vertelt je dat imagecreatefromstring() niet gelukt is, waardoor het een FALSE teruggeeft.
( en dan, imagepng() krijgt die FALSE, waarmee het niets kan doen; dat geeft de error )

Waar heb je gevonden dat dit met imagecreatefromstring moet gebeuren?

----

Nog iets. Zoek een beter systeem om de extensie te kennen.
Een bestand kan 'mijnfoto.jpg.exe' heten. Jouw systeem herkent dit als jpg, terwijl het een exe is.
Kijk hier eens http://be2.php.net/manual/en/function.pathinfo.php
Daar staan goede voorbeelden van hoe je de juiste extensie kan berekenen.
de extentie beveiliging is niet heel belangrijk op het moment kan toch alleen maar door een admin worden geupload het probleem is dat de upload het niet doet

Mvg ralph
Hoe doe je die upload? Je zegt namelijk via Ajax, maar via ajax kan je geen bestanden uploaden, in elk geval niet via een standaard ajax submit.
Wel ja ... tegenwoordig kan het met Ajax. Maar het is nog niet evident.

Je zal echt moeten tonen hoe je aan die code bent geraakt; zowel formulier, javascript als php.
Kris Peeters op 03/06/2013 12:34:40

Wel ja ... tegenwoordig kan het met Ajax. Maar het is nog niet evident.

Hoe als ik vragen mag? Ik ken alleen de workaround met een hidden iframe.

het ajax gedeelte werkt dit is puur php wat het probleem is maar de manier waarop het gebeurd staat hier :
Wel ja, dat is wat het punt. Van de 50 Google resultaten werken er maar 3 of 4. Ik heb geen werkend exemplaar bij de hand.

Ik denk dat ik iets als dit ooit aan de praat heb gekregen
http://www.sitepoint.com/html5-ajax-file-upload/

Met file_get_contents('php://input') krijg je RAW post data (of zo)

Ralph van der Tang op 03/06/2013 13:02:27

het ajax gedeelte werkt dit is puur php wat het probleem is maar de manier waarop het gebeurd staat hier :


Toon toch eens de code; of ten minste waar je de inspiratie voor die code vond
Dan wordt het debuggen. Dus geef eens een print_r van de $_FILES array aan het begin van het script en check de output in je browser. Is het bestand wel geupload?
de vardump van de $_FILES ziet er in de controller als volgt uit
array(1) {
["profielFoto"]=>
array(5) {
["name"]=>
string(8) "logo.png"
["type"]=>
string(9) "image/png"
["tmp_name"]=>
string(44) "D:\Program Files\devel\xampp\tmp\php9A6B.tmp"
["error"]=>
int(0)
["size"]=>
int(4508)
}
}

Reageren