| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

09-02-2009, 07:07
|
|
Laire
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 741
|
|
[PHP5] Fragen zum erstellen eines Bildupload Scripts
Hallo,
ich schreibe gerade an einem Bild Uploadscript für meine Seite.
Jetzt bin ich beim Schreiben auf folgende Idee gekommen, falls ein User mal so "ungeschickt" war und seinem Bild ausversehen eine falsche oder zweite Endung gegeben hat (z.B. bild.jpg.txt), dann erkennt zwar getimagesize immer noch, das es ein Bild ist, ABER ich habe immer mit pathinfo mir die Dateiendung ausgelesen, mit der das Bild weiter gespeichert wird... diese lautet aber nun auch .txt
Als Alternative hatte ich mir überlegt jedes Bild mit JD neu zu berrechnen und als JPG abzuspeichern ABER bei Bildern wie PNG und GIF gehen dann die Transparenzen über den Jordan und ich muss ja auch wissen mit welchem imagecreatefrom ich die Datei importieren muss.
Hat jemand Lösungsvorschläge? Oder einfach eine Fehlermeldung ausgeben wenn die Dateieindung nicht jpg, jpeg, gif, png oder bmp ist (Habe ich eine Endung vergessen?)
Gruß
Markus
|

09-02-2009, 07:48
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Benutz imagemagick.
|

09-02-2009, 09:20
|
|
Laire
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 741
|
|
Zitat:
Original geschrieben von ghostgambler
Benutz imagemagick.
|
Im Gegensatz zu GD leider nicht auf dem Webserver vorhanden wo das Script zum Einsatz kommen soll. Daher habe ich micht für die Filterung der Dateiendungen entschieden und bmp Dateien ausgeschlossen.
Das Script an sich ist fertig, aber wahrscheinlich habe ich es viel zu kompleziert geschrieben. Ihr könnt ja mal einen Blick drauf werfen, habe die einzelnen Schritte direkt im Quellcode kommentiert, vor dem Script ist noch eine Überprüfung geschaltet ob überhaupt eine Datei gesendet wurde. Kann ich irgendwie noch die Qualität der Thumbs erhöhen? Vor allem bei gif Bildern ist die Quali der Thumbs sehr schlecht.
PHP-Code:
$temp_pic = $_FILES['userfile']['tmp_name'];
$file_path = pathinfo($_FILES['userfile']['name']);
$file_info = getimagesize($temp_pic);
if(!isset($file_info['mime'])){
$pic_info .= '<h1>Die Datei, die Du ausgewählt hast, war kein Bild.</h1>';
}elseif($_FILES['userfile']['size'] >= '2100000'){
$pic_info .= '<h1>Die Datei, die Du ausgewählt hast, ist zu groß.</h1>';
}elseif(
$file_path['extension'] == 'gif'
OR $file_path['extension'] == 'jpg'
OR $file_path['extension'] == 'jpeg'
OR $file_path['extension'] == 'png'
){
//Speichern des Bildtypens, IP und Uploadzeit
mysql_query("
INSERT INTO `lcms_picup`
(`typ`,`ip`,`time`)
VALUES
('".$file_path['extension']."','".$_SERVER['REMOTE_ADDR']."','".time()."')");
//Weil ich einen wirklich einmaligen Dateinamen haben wollte, aber auch das Durchblättern
//der Bilder durch einfaches runterzählen verhindern wollte: Zufallszahl + id aus
//der Datenbank
$file_name = rand(100000, 999999).mysql_insert_id();
mysql_query("
UPDATE `lcms_picup`
SET `name`='".$file_name."'
WHERE (`id`='".mysql_insert_id()."')
");
$target_name = 'picupload/images/org/'.$file_name.'.'.$file_path['extension'];
rename($temp_pic, $target_name);
//Hier wird geprüft welche Thumbs erstellt werden
if($file_info[0] > 100){
$h = round($file_info[1] / ($file_info[0] / 100));
$thumb[100] = $h;
if($file_info[0] > 640){
$h = round($file_info[1] / ($file_info[0] / 640));
$thumb[640] = $h;
if($file_info[0] > 800){
$h = round($file_info[1] / ($file_info[0] / 800));
$thumb[800] = $h;
}
}
}
//erstellen der Thumbs
if(isset($thumb)){
foreach ($thumb as $width => $height){
if($file_path['extension'] == 'jpg' OR $file_path['extension'] == 'jpeg'){
$im = imagecreatetruecolor($width, $height);
$source = imagecreatefromjpeg($target_name);
imagecopyresized($im, $source, 0, 0, 0, 0, $width, $height, $file_info[0], $file_info[1]);
$thumb_name = 'picupload/images/'.$width.'/'.$file_name.'.jpg';
imagejpeg($im, $thumb_name);
imagedestroy($im);
}
//Das gleiche dann noch mit gif und png
}
}
}else{
$pic_info .= '<h1>Die Datei hat eine falsche Dateiendung ('.$file_path['extension'].')!</h1>';
}
Geändert von Laire (09-02-2009 um 09:22 Uhr)
|

09-02-2009, 11:55
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
getimagesize sagt dir doch, von welchem Typ das ist. Dann kannst du auch wieder deine eigene Dateiendung verwenden.
|

09-02-2009, 12:49
|
|
Laire
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 741
|
|
Jupp, aber momentan schwanke ich zwischen: Auch jedem DAU wie mir es recht zu machen, oder einfach drauf bestehen, das die Dateien die richtige Endung haben ;-)
Welches Risiko gehe ich eigentlich ein, indem ich die Ordner in denen die Bilder abgespeichert werden auf die Rechte 777 setzte?
|

09-02-2009, 13:50
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Zitat:
|
Welches Risiko gehe ich eigentlich ein, indem ich die Ordner in denen die Bilder abgespeichert werden auf die Rechte 777 setzte?
|
Wenn du auf einem Server mit mehreren Webhostern bist, darf jeder andere User auf das Verzeichnis zugreifen.
|

09-02-2009, 14:40
|
|
Laire
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 741
|
|
Hm muessen denn die Ordner fuer diese Funktion so weitreichende Berechtigungen haben?
|

09-02-2009, 15:59
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Wenn du bei einem vernünftigen Hoster bist: Nein.
Dann reicht 770 oder sogar 700.
|

09-02-2009, 16:22
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
 0750 wird auch immer wieder gern genommen 
Oft sind ja httpd und PHP-Script Owner unterschiedlich, aber in der selben Gruppe.
|

09-02-2009, 16:33
|
|
Laire
Registrierter Benutzer
|
|
Registriert seit: May 2004
Beiträge: 741
|
|
Ok werde es testen vielen Dank fuer die Tipps, wenn ich jetzt noch Hilfe in meinem anderen Thread bekomme, bin ich gluecklich
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
|
|
|
|
PHP News
|