CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
11.12.2004, 14:46:56
|
Anfänger
|
|
Registriert seit: Nov 2004
Ort: Landshut
Beiträge: 98
|
|
Größe eines Bildes bei Bildupload ändern
Hi,
ich mal wieder.
Habe auf meiner Homepage einen Bildupload über ein Formular.
Nun meine Frage:
Wie kann ich die größe des zu speichernden Bildes ändern, zum Beispiel total klein als vorschau bild oder einfach große Bilder auf immer die selbe größe speichern.
Also nicht die Bildgröße bei der Ausgabe, sonder das Bild gleich in einer anderen größe Speichern.
Geht das überhaupt?
Momentan speichere ich die Bilder noch so:
if ($image) {
if ($image_type == "image/pjpeg"
or $image_type == "image/gif") {
if ("image/pjpeg" == $image_type )
$extension = ".jpeg";
else $extension = ".gif";
$dat=$_SERVER['DOCUMENT_ROOT']."/anzeigen/image/";
$filename = $dat . $anz_id . $aid . $extension;
if (is_uploaded_file($image) &&
copy ($image,$filename)) {
$bildname="image/". $anz_id . $aid . $extension;
$sqlbild="update anzeigen set image='$bildname' where anz_id=$anz_id";
if (!mysql_query($sqlbild)) {
header ("Location: error.php");
}
} else {
header ("Location: error.php");
}
}
}
Kann mir da jemand helfen?
Mfg
Christian
|
12.12.2004, 14:57:51
|
|
Junior Member
|
|
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
|
|
Mit dem habe ich mich auch schon rumgeschlagen. So simpel ist das nicht. Darum ein wenig Code zum Submit:
PHP-Code:
// prüfen vor hochladen --------------------
if (isset ($submit)) {
$dateiname = $HTTP_POST_FILES['datei']['name'] ;
$dateitype = $HTTP_POST_FILES['datei']['type'] ;
$dateisize = $HTTP_POST_FILES['datei']['size'] ;
// echo $dateiname.' '.$dateitype.' '.$dateisize ;
if ( $dateiname == "" ) {
$fehlermeldung = '<span class="rot"><br /><br />
Du musst eine Datei angeben!<br /><br /></span>';
}
elseif ( $dateisize > '209600') {
$fehlermeldung = '<span class="rot"><br /><br />
Deine Datei überschreitet die erlaubte
Datei-Grösse von 200 kByte!<br /><br /></span>';
}
elseif ( strlen( $dateiname ) > '25') {
$dateinamengroesse = strlen("$dateiname")-25;
$fehlermeldung = '<span class="rot"><br /><br />
Der Dateiname überschreitet die maximal erlaubte Zeichenlänge
um <strong>'.$dateinamengroesse.'</strong>Zeichen!<br /><br /></span>';
}
elseif ( $dateitype == 'image/jpeg' || $dateitype == 'image/x-png' ) {
//Wandelt einige Sonderzeichen um
$dateiname1 = strtr("$dateiname", " äöüß", "_aous");
//Wandelt den Dateinamen in Kleinbuchstaben um
$dateiname2 = strtolower("$dateiname1");
$dateivorhanden = file_exists($bildlink.'/'.$dateiname2);
if ( $dateivorhanden == '1' ) {
$fehlermeldung = '<span class="rot"><br /><br />
Eine Datei mit dem Dateinamen <strong>'.$dateiname2.'</strong> ist bereits
vorhanden, bitte wähle einen anderen Namen.<br /><br /></span>';
}
else {
// hochladen der Ursprungsdatei -----------------------
copy( $datei , $bildlink.'/'.$dateiname2 );
// nun grösse bestimmen und berechnen
$gross = getimagesize( $bildlink.'/'.$dateiname2 ) ;
$breite = $gross[0] ;
$hoehe = $gross[1] ;
$typ = $gross[2] ;
$hoehe_norm = $hoehe * 200 / $breite ;
$image_norm = imagecreatetruecolor( 200 , $hoehe_norm ) ;
$hoehe_small = $hoehe * 50 / $breite ;
$image_small = imagecreatetruecolor( 50 , $hoehe_small ) ;
// neue Bildnamen
$bild_s = split("[.]",$dateiname2);
$dateiname2_norm = $bild_s[0].'_norm.'.$bild_s[1] ;
$dateiname2_small = $bild_s[0].'_small.'.$bild_s[1] ;
// Normbild erstellen
switch ($typ) {
case 2:
$image = imagecreatefromjpeg( $bildlink.'/'.$dateiname2 ) ;
break;
case 3:
$image = imagecreatefrompng( $bildlink.'/'.$dateiname2 ) ;
break;
}
imagecopyresampled($image_norm, $image, 0,0, 0,0,200,$hoehe_norm,$breite,$hoehe);
switch ($typ) {
case 2:
imagejpeg($image_norm, $bildlink.'/'.$dateiname2_norm , 100 );
break;
case 3:
imagepng($image_norm, $bildlink.'/'.$dateiname2_norm );
break;
}
// Smallbild erstellen
switch ($typ) {
case 2:
$image = imagecreatefromjpeg( $bildlink.'/'.$dateiname2 ) ;
break;
case 3:
$image = imagecreatefrompng( $bildlink.'/'.$dateiname2 ) ;
break;
}
imagecopyresampled($image_small, $image, 0,0, 0,0,50,$hoehe_small,$breite,$hoehe);
switch ($typ) {
case 2:
imagejpeg($image_small, $bildlink.'/'.$dateiname2_small );
break;
case 3:
imagepng($image_small, $bildlink.'/'.$dateiname2_small );
break;
}
// Ursprüngliches Bild löschen
unlink( $bildlink.'/'.$dateiname2 ) ;
// DB eintragung
$query = "UPDATE tabelle SET ".$bildnummer." = '".$dateiname2."'
WHERE id_mit = '".$id_mit."' " ;
mysql_query($query, $conn);
$fehlermeldung = '<br /><br />Dein Foto <strong>'.$dateiname2.'</strong> wurde erfolgreich abgeschickt!<br /><br />';
}
}
else {
$fehlermeldung = '<span class="rot"><br /><br />
Es werden nur Dateien von folgendem Typ zum Upload akzeptiert:<br /><br />
<strong>jpeg, jpg, jpe, png</strong><br /><br />
Dein Datei-Typ: '.$dateitype.'<br /><br /></span>';
}
// auf 0 setzen ---------------------------
$submit = "" ; $dateityp = "" ; $dateiname = "" ; $dateiname2 = "" ;
$dateiname2_small = "" ;
$hoehe = "" ; $breite = "" ;
}
|
12.12.2004, 16:54:41
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Das Script sieht ganz in Ordnung aus. Ein paar Sachen sind mir trotzdem aufgefallen:
PHP-Code:
if ( $dateiname == "" ) { // if(empty($dateiname)) tut es auch
$dateinamengroesse = strlen("$dateiname")-25; // Variablen werden nicht in " gesetzt
elseif ( $dateitype == 'image/jpeg' || $dateitype == 'image/x-png' ) // im Mozilla hat $dateitype bei jpeg Dateien den Wert image/pjpeg
if ( $dateivorhanden == '1' ) { // besser: if($dateivorhanden)
copy( $datei , $bildlink.'/'.$dateiname2 ); // besser: move_uploaded_file() verwenden, dann ersparst du dir auch das unlink()
Außerdem wird das Script nur mit ausgeschaltetem register_globals laufen.
|
13.12.2004, 12:55:12
|
|
Junior Member
|
|
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
|
|
Vielen Dank xabbuh
Ich habe die Verbesserungen vorgenommen.
Das mit dem "", peinlich!
Das mit dem image/pjpeg wusste ich nicht.
Das mit dem move_uploaded_file ist besser, jedoch unlink muss bleiben, sonst bleibt die Ursprungsdatei auf dem Server.
Zitat:
Außerdem wird das Script nur mit ausgeschaltetem register_globals laufen.
|
Das müsste ja gut sein, siehe auch:
PHP Referenz
|
13.12.2004, 13:29:24
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Zitat:
Original geschrieben von Jürg
Das mit dem move_uploaded_file ist besser, jedoch unlink muss bleiben, sonst bleibt die Ursprungsdatei auf dem Server.
|
Stimmt, habe das übersehen.
Da habe ich mich in meinem Beitrag verschrieben. Dein Script läuft _nicht_ mit ausgeschaltetem register_globals.
|
13.12.2004, 13:47:54
|
|
Junior Member
|
|
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
|
|
Uns wieso läuft es nicht?
Im Formular verwende ich :
PHP-Code:
<form method="POST" action="'.$PHP_SELF.'" enctype="multipart/form-data" name="meldung">
...
<input type="file" name="datei" size="80" />
...
Im Script:
PHP-Code:
$dateiname = $HTTP_POST_FILES['datei']['name'] ;
$dateitype = $HTTP_POST_FILES['datei']['type'] ;
$dateisize = $HTTP_POST_FILES['datei']['size'] ;
Das müsste doch gehen?
PS: Mein Provider hat den Server auf register_globals ON.
|
13.12.2004, 14:55:15
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
Allein schon die Abfrage if($submit) oder so ähnlich wird fehlschlagen.
Außerdem sollte man $PHP_SELF durch $_SERVER['PHP_SELF'] ersetzen und statt dem Array $HTTP_POST_FILES das Array $_FILES verwenden.
|
13.12.2004, 15:20:18
|
|
Junior Member
|
|
Registriert seit: May 2003
Ort: CH Zürich
Alter: 66
Beiträge: 352
|
|
Aha, jetzt wird es spannend.
Dem gehe ich nach und ändere es.
Wo finde ich ein Tutorial das genau das beschreibt?
Das Problem ist, es gibt zuviel unsauberen Code der immer nur abgeschrieben wird und sogar läuft.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 01:22:52 Uhr.
|