Hallo,
ich lasse meine User für eine Bildergalerie Bilder hochladen. Am Server werden die Bilder ggf. verkleinert, und sollen dann direkt in eine Datenbank abgespeichert werden.
Wie bitte bekomme das Bild aus einer Bildressource direkt in die Datenbank, [list=1][*]ohne dass ich das Bild temporär in eine Datei schreiben muss (aus Sicherheitsgründen keine Schreibrechte am Webserver)[*]ohne ob_start() und ob_get_clean(). Ich verwende dies bereits vorher und nachher zum cachen der Ausgabe der Seite, und irgendwie will's mit einem dazwischengeschalteten nicht funktionieren. Außerdem finde ich das nicht schön.[/list=1]
Lässt sich die Ausgabe von ImagePNG (u.ä.) nicht irgendwie umleiten, bzw. gibt's eine Umkehrung von imagecreatefromstring()?
Das Script so far:
Danke, Stefan
//edit: an Breite angepasst
ich lasse meine User für eine Bildergalerie Bilder hochladen. Am Server werden die Bilder ggf. verkleinert, und sollen dann direkt in eine Datenbank abgespeichert werden.
Wie bitte bekomme das Bild aus einer Bildressource direkt in die Datenbank, [list=1][*]ohne dass ich das Bild temporär in eine Datei schreiben muss (aus Sicherheitsgründen keine Schreibrechte am Webserver)[*]ohne ob_start() und ob_get_clean(). Ich verwende dies bereits vorher und nachher zum cachen der Ausgabe der Seite, und irgendwie will's mit einem dazwischengeschalteten nicht funktionieren. Außerdem finde ich das nicht schön.[/list=1]
Lässt sich die Ausgabe von ImagePNG (u.ä.) nicht irgendwie umleiten, bzw. gibt's eine Umkehrung von imagecreatefromstring()?
Das Script so far:
PHP-Code:
echo "<div style='font-size:14px;'><strong>Meldungen:</strong><ul type='disc'>";
foreach ($_FILES as $upfile) {
if ($upfile['error'] == 0) {
if ($upfile['size'] <= $maxuploadsize) {
if (in_array($upfile['type'], $types) !== false) {
if (is_readable($upfile['tmp_name']) !== false) {
$f = fopen($upfile['tmp_name'], "r");
if ($f !== false) {
flock($f, LOCK_SH);
$imgstr = fread($f, $upfile['size']);
flock($f, LOCK_UN);
fclose($f);
$img = imagecreatefromstring($imgstr);
if ($img !== false) {
$w = imagesx($img);
$h = imagesy($img);
//Breite prüfen:
$resampled = false;
if ($maxwidth > -1) {
if ($w > $maxwidth) {
$neww = $maxwidth;
$newh = $maxwidth * $h / $w;
$newimg = imagecreatetruecolor($neww, $newh);
imagealphablending($newimg, false);
if (imagecopyresampled($newimg, $img, 0, 0, 0, 0,
$neww, $newh, $w, $h) !== true) {
$msg = "Das Bild konnte nicht erfolgreich resampled...";
}
imagesavealpha($newimg, true);
$resampled = true;
}//Breite skalieren
}//Beschränkung maxwidth gesetzt
//Folgendes will ich geändert
ob_flush();//Puffer leeren
ob_start();//Pufferung starten
if ($resampled === true) { //Bild in Puffer schreiben
imagepng($newimg);
} else {
imagepng($img);
}
$imgcontent = addslashes(ob_get_clean());
//Bis hierher
$picid = md5(microtime(true));
$sql = "insert into ".__dbtable_gallpic__."
(id, gallid, datum, author, email, pic,
pictype, picsize, active)
values
('".$picid."',
'".$gallID."',
'".date("Y-m-d H:i:s")."',
'".$lehrer."',
'".$lehrerid."',
'".$imagecontent."',
'".$upfile['type']."',
'".$upfile['size']."',
'1')
";
if (($MySQLGate->ConnectDB() !== false) &&
($MySQLGate->SendSQL($sql) !== false)) {
$newid = $MySQLGate->GetAutoId(); //ohne Präfix 'bild'!!!
$state = 2; // State 2 einleiten --> dort newsid ausgeben
} else {
$msg = "Der Datenbankbefehl konnte nicht ...";
}
} else {
$msg = "Die Graphik konnte nicht erstellt...";
}
} else {
$msg = "Die Datei kann nicht geöffnet...";
}
} else {
$msg = "Die hochgeladene Datei ist nicht lesbar!...";
}
} else {
$msg = "Der Dateityp <strong>".$upfile['type']."</strong> ...";
}
} else {
$toobig = round(($upfile['size'] - $maxuploadsize) / 1024, 2);
$msg = "Die Dateigröße des hochgeladenen ...";
}
} else {
if ($upfile['error'] <> UPLOAD_ERR_NO_FILE) {
$msg = "Fehler beim Hochladen der Datei!";
} else {//wenn keine Datei angegeben wurde
$msg = "";
} }
if (!empty($msg)) {
echo "<li>".$msg."</li>";
}
}// foreach
//edit: an Breite angepasst
Kommentar