php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 11-06-2008, 03:43
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard Bildskalierung im UploadScript & move_uploaded_file...

Hi,

Kenn mich nicht so gut mit PHP aus, kann gerade mal die Scripts vernünftig einbinden, jetzt mein Problem:
habe im Netz ein einfaches Bild-Upload script gefunden, welches die Bilder auf die richtige Größe skaliert. Das Script funktionier super, allerdings wird nur eine Maximale Breite festgelegt. Sieht n bisschen blöd aus, bei Bildern im Hochformat, da die Höhe dann wieder den Rahmen sprengt. Also wie kann ich hier noch zusätzlich die maximal Höhe des Bildes definieren?

Die zweite Frage ist, wie ich das Zielverzeichnis für die hochgeladenen Dateien bestimmen kann, habs so versucht:

$uploaddir = '/gfx/';
$uploadfile = $uploaddir. $_FILES['bild']['name'];

und im script an der entsprechenden stelle
... if( !@move_uploaded_file( $_FILES['bild']['tmp_name'], $uploadfile) ) ...

geht aber nicht oO

PHP-Code:
<?php
// Funktion zum Thumbnail erstellen

function BildScale$Grafikdatei$ThumbnailBreite ) {

    
$Bilddaten getimagesize$Grafikdatei );

    
$OriginalBreite $Bilddaten[0];
    
$OriginalHoehe $Bilddaten[1];

    if( 
$OriginalBreite $ThumbnailBreite ) {
        
$ThumbnailBreite $OriginalBreite;
    }
    
$Skalierungsfaktor $OriginalBreite/$ThumbnailBreite;
    
$ThumbnailHoehe intval$OriginalHoehe/$Skalierungsfaktor );


    
$Originalgrafik imagecreatefromjpeg$Grafikdatei );
    
$Thumbnailgrafik imagecreatetruecolor$ThumbnailBreite$ThumbnailHoehe );
    
imagecopyresampled$Thumbnailgrafik$Originalgrafik0000$ThumbnailBreite$ThumbnailHoehe$OriginalBreite$OriginalHoehe );
    
imagejpeg$Thumbnailgrafik$Grafikdatei90 );

    
imagedestroy$Originalgrafik );
    
imagedestroy$Thumbnailgrafik );
}

// Wenn das Formular abgeschickt wurde
if( isset( $_POST['submit'] ) ) {
    
$umaskold umask);
    
// Falls die Datei groesser 0 Byte ist
    
if( $_FILES['bild']['size'] > ) {
        
// Datei verschieben und bei Misserfolg Fehler ausgeben
        
if( !@move_uploaded_file$_FILES['bild']['tmp_name'], $_FILES['bild']['name'] ) ) {
            echo 
'Konnte die Datei nicht kopieren!';
        } else {
            
// Bildgroesse aendern (500px maximal Breite)
            
BildScale$_FILES['bild']['name'], 100);

        }
        
// CHMOD setzen damit man das Bild per FTP loeschen kann
        
@chmod$_FILES['bild']['name'], 0755 );
        @
chmod"t_" .$_FILES['bild']['name'], 0755 );
    }
    
umask$umaskold );
}

?>
MFG, Alex
Mit Zitat antworten
  #2 (permalink)  
Alt 11-06-2008, 04:13
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

"geht aber nicht" ist keine ausreichende Fehlerbeschreibung!

Bitte lies unsere sticky threads, brich dann den Code in deinem Beitrag entsprechend um, stell dein error_reporting() richtig ein und entferne die fehlerunterdrückenden @-Zeichen.

Übrigens ist /gfx kein guter Ort. Kennst du den Unterschied zwischen absoluten und relativen Pfaden?
Mit Zitat antworten
  #3 (permalink)  
Alt 11-06-2008, 04:32
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ouh, sorry wenn ich's nicht ausreichend beschrieben habe;
den unterschied zwischen absolut und relativ kenne ich, habs auch mit absoluten Pfad probiert, aber auch kein Ergebnis.

Hab die Thread jetzt mal gelesen und per Error-Reporting was rausgeholt:

Notice: Undefined index: bild in /home/www/web122/html/blacrew/testup.php on line 11

Das Problem ist aber eher beiläufig, hab das jetzt erstmal so gelöst, das das Upload-Skript halt direkt in dem Bilder Ordner liegt...wesentlich wichtiger iss mit das korrekte Skalieren der Bilder

Geändert von xserio (11-06-2008 um 04:43 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 11-06-2008, 05:31
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Es findet alles in der Funktion BildScale bis zum Aufruf von imagecopyresampled() statt. Die Variablen haben sehr sprechende Namen. Hast du mal selbst versucht, die Höhe auch noch zu beschränken? Wie sieht dein Ansatz aus, kannst du etwas Code zeigen?
Mit Zitat antworten
  #5 (permalink)  
Alt 11-06-2008, 17:52
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ok, wie gesagt, ich habe sehr wenig Ahnung von PHP, fang gerade erst an, mich mit der Materie zu beschäftigen...

ich habe schon versucht das Selber zu lösen;

PHP-Code:
function BildScale$Grafikdatei$ThumbnailBreite$ThumbnailHoehe ) {

    
$Bilddaten getimagesize$Grafikdatei );

    
$OriginalBreite $Bilddaten[0];
    
$OriginalHoehe $Bilddaten[1];

    if( 
$OriginalBreite $ThumbnailBreite ) {
        
$ThumbnailBreite $OriginalBreite;
    }
    
$Skalierungsfaktor $OriginalBreite/$ThumbnailBreite;
    
$ThumbnailHoehe intval$OriginalHoehe/$Skalierungsfaktor );


    
$Originalgrafik imagecreatefromjpeg$Grafikdatei );
    
$Thumbnailgrafik imagecreatetruecolor$ThumbnailBreite$ThumbnailHoehe ); 
...
PHP-Code:
        if( !@move_uploaded_file$_FILES['bild']['tmp_name'], $_FILES['bild']['name'] ) ) {
            echo 
'Konnte die Datei nicht kopieren!';
        } else {
            
// Bildgroesse aendern (500px maximal Breite)
            
BildScale$_FILES['bild']['name'], 100100); 
mehr ist mir icht eingefallen... habe einfach oben in die Funktionsparameter $Thumbnailhoehe zugefügt und versucht den unten beim Funktionsaufrauf mit zu definieren (100). Aber da passiert garnichts, das Script arbeitet genau wie vorher...

Ich denke hier:
if( $OriginalBreite < $ThumbnailBreite ) {
$ThumbnailBreite = $OriginalBreite;
}
$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval( $OriginalHoehe/$Skalierungsfaktor );

muss auch noch was passieren, oder nicht? Die Umrechnungen sind für mich aber so verwirrend, das ich icht weiss, was...

Tut mir leid, wenn ich mich etwas laienhaft ausdrücke, aber wie gesagt, ich fang erst an...

gruss, Alex
Mit Zitat antworten
  #6 (permalink)  
Alt 11-06-2008, 18:56
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mal ne Frage: Ist der eingangs gepostete Code der Funktion komplett? Wenn ja dann dreh man dein error_reporting() hoch und lass dir PHP Fehler anzeigen. Ich wette auf Notices
PHP-Code:
//als allerste Zeile des Script
<?php
ini_set
('display_errors','1');
error_reporting(E_ALL);
//Rest deines Codes
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #7 (permalink)  
Alt 11-06-2008, 19:35
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi!

ja, ich habe schon in einem Beitrag etwas weiter oben geschrieben, das es folgende Meldung gibt, wenn ich den Error-Report aktiviere:

Notice: Undefined index: bild in /home/www/web122/html/blacrew/testup.php on line 11

Das Upload-Problem habe ich inzwischen gelöst! Alles wird in den richtigen Ordner geladen. Ich war verwirrt, da mir das Script immer "konnte die Datei nicht kopieren" zurück gab, was aber an der if-schleife des Scripts und dem dazugehörigen Echo lag. Die Datei hat er trotzdem in das richtige Verzeichnis kopiert...

Was jetzt noch bleibt ist das Problem mit der Bildhöhen-Skalierung, wobei ich einfach icht richtig durchsteige;

$Skalierungsfaktor = $OriginalBreite/$ThumbnailBreite;
$ThumbnailHoehe = intval( $OriginalHoehe/$Skalierungsfaktor );

warum denn intval() bei Thumbnailhöhe?Habe mir die Funktion
in der Doku mal angeschaut, die gibt ja nur den integer zurück,
aber es wird doch eh nur mit Zahlen gearbeitet (?)
Und warum wir die Originalbreite durch die Thumbnailbreite geteilt?
damit erhalte ich doch nicht die maximal gewollte Größe
(in meinem Fall 100px)

einige Sachen, die ich hier noch nicht verstehe...

gruss, Alex
Mit Zitat antworten
  #8 (permalink)  
Alt 11-06-2008, 19:43
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
warum denn intval() bei Thumbnailhöhe?Habe mir die Funktion
in der Doku mal angeschaut, die gibt ja nur den integer zurück,
aber es wird doch eh nur mit Zahlen gearbeitet (?)
Integer geteilt durch Integer ergibt nicht immer einen Integer. Darum intval(), denn das sind Pixelgrössen und die gibt's nur ganzzahlig
Zitat:
Und warum wir die Originalbreite durch die Thumbnailbreite geteilt?
damit erhalte ich doch nicht die maximal gewollte Größe
Damit der Skalierungsfaktor herauskommt. Mit dem kannst du dann das Bild verkleinern ohne es zu verzerren sprich die Seitenverhältnisse bleiben erhalten.
Du musst erstmal feststellen welche Seite die grössere ist (Höhe oder Breite). Diese setzt du dann 100, berechnest daraus und der jeweiligen Originallänge den Skalierungsfaktor. Mit dem Faktor kannst du dann die kürzere Seite des Thumbs berechnen
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #9 (permalink)  
Alt 11-06-2008, 19:47
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Es ist schon mal eine gute Idee gewesen, die gewünschte Höhe als zusätzlichen Funktionsparameter zu übergeben. Aber du musst in der Funktion den Code schon auch noch anpassen. Im Moment wird $ThumbnailHoehe ja noch wie zuvor mit einem Wert überschrieben.

Schreib dir doch erstmal die notwendige Mathematik/Logik auf ein Blatt Papier. Wenn du nicht drauf kommst, schau in den Usercomments zu imagecopyresampled().
Mit Zitat antworten
  #10 (permalink)  
Alt 11-06-2008, 20:56
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habs geschafft!
mit ner einfachen if-Abfrage, hab die Funktion einfach sozusagen nochmal genau so kopiert und Breite einfach mit Hoehe vertauscht...
Problem hab ichjetzt aber wieder mit dem Upload in den richtigen Ordner, dazu gleich mehr...

Geändert von xserio (11-06-2008 um 21:14 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 12-06-2008, 21:35
xserio
 Registrierter Benutzer
Links : Onlinestatus : xserio ist offline
Registriert seit: Jun 2008
Beiträge: 64
xserio ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So... nachdem dann alles doch nicht so funktionier hatte (entweder ging der Upload ind bestimmtes Verzeichnis oder das Skalieren nicht richtig) hab ich die Funktion Bildscale mal in ein anderes Script eingebaut und auch endlich rausgefunden, wie ich die Höhe mit Skaliert bekomme. Das verschieben in den richtigen Ornder geht jetzt mit copy() (move_uploaded_file wollte in dem Script einfach nicht...)

Danke nochmal für die Hilfe hier, gerade was einige logische Sachen angeht... aber das am Anfang alles ziemlich verwirrend ^^ Werd eich bestimmt bald mit dem nächsten Problem nerven ;D

Für alle die's interessiert:
PHP-Code:
<?php
$tempname 
$_FILES['file']['tmp_name'];
$name $_FILES['file']['name'];


$type $_FILES['file']['type'];
$size $_FILES['file']['size'];

if(
$type != "image/gif" && $type != "image/jpeg") {
    
$err[] = "nur gif und jpeg Dateien dürfen hochgeladen werden.";
}
if(
$size "1500000") {
    
$err[] = "Die Datei welche du hochladen willst, ist zu gross!<br>Maximale Dateigrosse beträgt 1500 KB!";
}

if(empty(
$err)) {

/////////////// Bild auf neue Größe Skalieren ///////////////////////////////


function BildScale$Grafikdatei$ThumbnailBreite ) {

    
$Bilddaten getimagesize$Grafikdatei );

    
$OriginalBreite $Bilddaten[0];
    
$OriginalHoehe $Bilddaten[1];
    
$max_breite '800';
    
$max_hoehe '600';
        
           if(
$OriginalBreite $OriginalHoehe)
              {
                
$ThumbnailBreite $max_breite;
                
$ThumbnailHoehe = ($OriginalHoehe/($OriginalBreite/$ThumbnailBreite));
              }
              else
                {
                  
$ThumbnailHoehe $max_hoehe;
                  
$ThumbnailBreite = ($OriginalBreite/($OriginalHoehe/$ThumbnailHoehe));
                }
      


    
$Originalgrafik imagecreatefromjpeg$Grafikdatei );
    
$Thumbnailgrafik imagecreatetruecolor$ThumbnailBreite$ThumbnailHoehe );
    
imagecopyresampled$Thumbnailgrafik$Originalgrafik0000$ThumbnailBreite$ThumbnailHoehe$OriginalBreite$OriginalHoehe );
    
imagejpeg$Thumbnailgrafik$Grafikdatei90 );

    
imagedestroy$Originalgrafik );
    
imagedestroy$Thumbnailgrafik );
}

/////////////////////////////////////////////////////////////////////////////////

    
BildScale("$tempname"800600 );
    
copy("$tempname""gfx/$name");   // Zielordner angeben!
 
    
echo "Die Datei $name wurde erfolgreich hochgeladen!";
}
else {
    foreach(
$err as $error)
    echo 
"$error<br>";
}
?>
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:26 Uhr.