Ankündigung

Einklappen
Keine Ankündigung bisher.

parse error

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • parse error

    habe da einen Fehler und ich kann ihn nicht finden (habe noch nicht genug erfahrung):
    Code:
    <?
    $projectname = $_POST[projectname];
    class Thumbnailer {
        var $autocreate = true;
        var $single_mode = false;
        var $image_list = array();
        var $ersetzen = false;
        var $image_ext = array("jpg");
        var $image_dir = "$projectname/original/"; //hier ist der Fehler
        var $thumb_dir = "";
        var $thumb_w = 300;
        var $thumb_h = 350;
    ...
    anscheinend kann ich da die Variable nicht einfügen (brauche sie aber unbedingt, sonst findet er die Bilder nicht)

    habe schon probiert, alles löschen und nur mit echo $projectname auszugeben. Das passt alles
    bitte um hilfe

  • #2
    Und warum postest Du nicht die genaue Fehlermeldung?

    var $image_dir = $_POST["projectname"] . "/original/";

    Gruß
    phpfan

    Kommentar


    • #3
      Leider ist der Fehler trotz deiner Änderung geblieben.

      Fehler:
      Parse error: parse error in /srv/www/htdocs/Projects/step_9.php on line 22

      Kommentar


      • #4
        ähem. jetzt ne blöde frage --- ist $_POST['var'] eigentlich einfach so in der klasse verfügbar?
        [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

        Kommentar


        • #5
          naja, vielleicht ist das die lösung
          nur: wie mach ichs dann.
          wie kann ich dem programm sonst sagen, wo die bilder vorhanden sind? das steht halt mal in der variable
          jemand eine idee?

          Kommentar


          • #6
            ähem. jetzt ne blöde frage --- ist $_POST['var'] eigentlich einfach so in der klasse verfügbar?
            ja? super-global eben ...
            http://de.php.net/manual/en/reserved...variables.post

            und selbst wenns nicht vorhanden wär, gäb es wohl keinen parse error ...

            wie kann ich dem programm sonst sagen, wo die bilder vorhanden sind?
            übergibs einer methode/dem konstruktor der klasse.

            sicher, daß du in deinem script zeile 22 markiert hast?
            [URL=http://www.mozilla.org/products/firefox/][img]http://www.nophia.de/misc/spreadtheword/feuerfuchs.gif[/img][/URL]

            Kommentar


            • #7
              Zitat von derHund
              und selbst wenns nicht vorhanden wär, gäb es wohl keinen parse error ...
              habe ich meines wissens nach auch nicht behauptet.
              [b][url=http://www.benjamin-klaile.de]privater Blog[/url][/b]

              Kommentar


              • #8
                Re: parse error

                Zitat von dws
                var $image_dir = "$projectname/original/"; //hier ist der Fehler
                anscheinend kann ich da die Variable nicht einfügen (brauche sie aber unbedingt, sonst findet er die Bilder nicht)
                Es geht nicht ums Können: Du darfst es an der Stelle nicht. An dieser Stelle sind nur Literale oder Konstanten gestattet.

                Hausaufgabe:
                Wozu brauche ich einen Konstruktor (angelsächsisch: constructor)?

                Kommentar


                • #9
                  sorry, aber jetzt gehts wieder ums können: habe keine ahnung, wie ich dann das lösen soll.
                  hat da jemand einen vorschlag?

                  Kommentar


                  • #10
                    Zitat von dws
                    sorry, aber jetzt gehts wieder ums können: habe keine ahnung, wie ich dann das lösen soll.
                    Mit einer Methode, die beim Start vom Constructor aufgerufen wird, welche die Variablen setzt.
                    Code:
                    class Thumbnailer { 
                        var $autocreate = true; 
                        var $single_mode = false; 
                        var $image_list = array(); 
                        var $ersetzen = false; 
                        var $image_ext = array("jpg"); 
                        var $image_dir = ""; 
                        var $thumb_dir = ""; 
                        var $thumb_w = 300; 
                        var $thumb_h = 350; 
                    
                    ## nur einen von beiden!
                    
                        function __construct() # Constructor PHP 5
                        {
                             $this->varset();
                        }
                    
                        function Thumbnailer() # Constructor PHP 4
                        {
                             $this->varset();
                        }
                    
                    ##########################
                    
                        function varset()
                        {
                             $this->image_dir = $_POST[projectname] . '/original/'; #ä oder was Du willst...
                        } 
                    }

                    Kommentar


                    • #11
                      okay, danke, der fehler ist jetzt weg.
                      aber: darunter ist der gleiche "blödsinn" wieder

                      Code:
                      class Thumbnailer { 
                      * * var $autocreate = true; 
                      * * var $single_mode = false; 
                      * * var $image_list = array(); 
                      * * var $ersetzen = false; 
                      * * var $image_ext = array("jpg"); 
                      * * var $image_dir = ""; 
                      * * var $thumb_dir = ""; //hier meine ich
                      * * var $thumb_w = 300; 
                      * * var $thumb_h = 350;
                      wie mach ich es da
                      einfach so, dass ich die funktion erweitere?

                      Code:
                       function varset() 
                      * * { 
                      * * * * *$this->image_dir = $_POST[projectname] . '/original/'
                      $this->thumb_dir = $_POST[projectname2] . '/original/'
                      
                      * * }
                      oder ist das mehr?

                      Kommentar


                      • #12
                        Zitat von dws
                        okay, danke, der fehler ist jetzt weg.
                        aber: darunter ist der gleiche "blödsinn" wieder
                        Bitte lies das Handbuch:
                        http://www.php.net/manual/de/language.oop.php
                        und
                        http://www.php.net/manual/de/language.oop5.php

                        Und achte dabei unter anderem auf den Begriff Constructor.

                        In PHP4 ist das die Methode, die den selben Namen wie die Klasse trägt. In PHP5 kommen noch die beiden Methoden __construct() und destruct() hinzu.

                        wie mach ich es da
                        einfach so, dass ich die funktion erweitere?
                        a. Das ist eine Methode, auch wenn sie wie eine Funktion aussieht.
                        b. ja.

                        Du könntest die Wertzuweisungen zwar theoretisch mit in den Constructor packen, praktisch gibt es da aber einige Ungereimtheiten, denen man so (wie im Beispiel) aus dem Wege geht.

                        Achte nur darauf, daß die Methode varset() (der Name ist nebensächlich) vom Constructor aufgerufen wird: $this->varset()

                        Solltest Du bei der Instantiierung noch spezielle Parameter übergeben wollen, dann machst Du das so:
                        Code:
                        class beispiel
                        {
                          var $test = false; # sowas ist immer gut, weil man es testen kann
                          
                          function beispiel ($var = '') # Constructor; var wird mit einer leeren Zeichenkette vorbelegt;
                          {
                             $this->varset($var);
                          }
                        
                          function varset ($var='')
                          {
                             $this->test = $var;
                          }
                        
                          function run ()
                          {
                             printf ('<h4>Test=%s</h4>', $this->test);
                          }
                        }
                        
                        $test_ist_leer = & new beispiel ();
                        $test = &new beispiel ('Hier steht was drin');
                        $test->run();
                        $test_ist_leer->run();
                        Ungetestet: eventuelle Syntax-Tippfehler sind also nicht ausgeschlossen.

                        Kommentar


                        • #13
                          Leider funktionierts noch immer nicht, original schon
                          Ich poste mal das ganze script.
                          bitte einmal noch helfen danke

                          Code:
                          <html>
                          <head>
                          </head>
                          <body>
                          <?php
                          class Thumbnailer {
                          
                              var $autocreate = true;
                              var $single_mode = false;
                              var $image_list = array();
                              var $ersetzen = false;
                              var $image_ext = array("jpg");
                              var $image_dir = "";
                              var $thumb_dir = "";
                              var $thumb_w = 300;
                              var $thumb_h = 350;
                          
                              function varset()
                               { 
                                    $this->image_dir = $_POST[projectname] . '/original/' 
                           $this->thumb_dir = $_POST[projectname2];  //andere Bilder sollen in den projektzugehörigen ordner kommen
                           
                               } 
                          
                          
                              ######### Methoden der Klasse/des Objekts
                              ##### gibt alle Bilder mit den korrekten Endungen in einem Array zurück
                              function list_all_images() {
                                  $files = array();
                                  $dir_handle = opendir($this->image_dir);
                                  while ($file = readdir($dir_handle)) {
                                      if ($file != "." && $file != ".." && !is_dir($this->image_dir.$file)) {
                                          $tmp_file = explode(".",$file);
                                          $i = 0;
                                          while ($i < count($this->image_ext)) {
                                              if ($this->image_ext[$i] == strtolower($tmp_file[count($tmp_file)-1])) {
                                                  $files[] = $file;
                                              }
                                          $i++;
                                          }
                                      }
                                  }
                                  closedir($dir_handle);
                                  return $files;
                              }
                          
                              ##### Erstellt ein Thumbnail
                              function create_thumb($filename) {
                                  $file = $this->image_dir.$filename;
                                  if ($this->ersetzen || !file_exists($this->thumb_dir.$filename)) {
                                      #### Bild- Datei und -Endung
                                      $tmp_file = explode(".",$file);
                                      $ext = strtolower($tmp_file[count($tmp_file)-1]);
                                      #### Bild aus Datei erstellen; Bildtypen müssen unterschieden werden
                                      if ($ext == "jpg" || $ext == "jpeg") {
                                          $img = imagecreatefromjpeg($file);
                                      } elseif ($ext == "gif") {
                                          $img = imagecreatefromgif($file);
                                      } elseif ($ext == "png") {
                                          $img = imagecreatefrompng($file);
                                      } elseif ($ext == "wbmp") {
                                          $img = imagecreatefromwbmp($file);
                                      } else {
                                          return false;
                                      }
                                      #### Größen ablesen
                                      $old_w = imagesx($img);
                                      $old_h = imagesy($img);
                                      #### neue Größen bestimmen
                                      if ($old_w > $old_h) {
                                          $thumb_w = $this->thumb_w;
                                          $thumb_h = $old_h*($this->thumb_w/$old_w);
                                      }
                                      if ($old_w < $old_h) {
                                          $thumb_w = $old_w*($this->thumb_h/$old_h);
                                          $thumb_h = $this->thumb_h;
                                      }
                                      if ($old_w == $old_h) {
                                          $thumb_w = $this->thumb_w;
                                          $thumb_h = $this->thumb_h;
                                      }
                                      #### Bild erzeugen in korrekter Größe
                                      $new_img = @imagecreatetruecolor($thumb_w,$thumb_h);
                                      if (!$new_img) {
                                          $new_img = imagecreate($thumb_w,$thumb_h);
                                          imagecopyresized($new_img,$img,0,0,0,0,$thumb_w,$thumb_h,$old_w,$old_h);
                                      } else {
                                          imagecopyresampled($new_img,$img,0,0,0,0,$thumb_w,$thumb_h,$old_w,$old_h);
                                      }
                                      #### Bild speichern; Bildtypen müssen unterschieden werden
                                      if ($ext == "jpg" || $ext == "jpeg") {
                                          imagejpeg($new_img,$this->thumb_dir.$filename);
                                      } elseif ($ext == "gif") {
                                          imagegif($new_img,$this->thumb_dir.$filename);
                                      } elseif ($ext == "png") {
                                          imagepng($new_img,$this->thumb_dir.$filename);
                                      } elseif ($ext == "wbmp") {
                                          imagewbmp($new_img,$this->thumb_dir.$filename);
                                      } else {
                                          return false;
                                      }
                                      #### Cache leeren
                                      imagedestroy($new_img);
                                      imagedestroy($img);
                                      return true;
                                  } else {
                                      return false;
                                  }
                              }
                              
                              ##### Lässt Thumbnails anhand der Bilder im Ordner erzeugen
                              function create_thumbs() {
                              	if ($this->single_mode) {
                              		$files = $this->image_list;
                              	} else {
                                  	$files = $this->list_all_images();
                                  }
                                  $i = 0;
                                  while ($i < count($files)) {
                                      $this->create_thumb($files[$i]);
                                      $i++;
                                  }
                                  return true;
                              }
                          
                              ##### Konstruktor für die Klasse (wird nur ausgeführt, wenn die Klasse sofort starten soll)
                              function Thumbnailer() {
                                  if ($this->autocreate) {
                                      $this->create_thumbs();
                                  }
                              }
                          
                          }
                          
                          
                          ?>
                          
                          $objekt = New Thumbnailer;
                          echo "Alles ok!";
                          ?>
                          </body>
                          </html>

                          Kommentar


                          • #14
                            Zitat von dws
                            Leider funktionierts noch immer nicht, original schon
                            1. Was funktioniert nicht?
                            2. varset() wird nicht aufgerufen. weder manuel noch im constructor
                            3. Warum nutzt Du für die Ermittlung des Bildtypes nicht getimagesize() (gilt auch für die Extensions)?
                            Code:
                            $objekt = New Thumbnailer;
                            echo "Alles ok!";
                            Diese Aussage ist eine kühne und ungeprüfte Behauptung.

                            Kommentar

                            Lädt...
                            X