Re: Perl-Frage (Lizenz) Dateihandling - baseportal Forum - Web-Anwendungen einfach, schnell, leistungsfähig!
baseportal
English - Deutsch "Es gibt keine dummen Fragen - jeder hat einmal angefangen"

 baseportal-ForumDie aktuellsten 10, 30, 50, 100 Einträge anzeigen.  

 
 Ausgewählter Eintrag: Zur Liste 
    Beitrag von Sander (8133 Beiträge) am Sonntag, 10.Juni.2007, 22:12.
    Re: Perl-Frage (Lizenz) Dateihandling

      speicher freigeben: leider nein, am ende wird bei perl aufgeräumt... ;(


    Antworten

 Alle Einträge zum Thema: Zur Liste 
    Beitrag von hempelr (1976 Beiträge) am Sonntag, 10.Juni.2007, 11:35.
    Perl-Frage (Lizenz) Dateihandling

      Habe ein Perl-Script zur Größenermittlung von Dateien im Netz gefunden und eingebaut. Funktioniert soweit auch - bis auf eine "Kleinigkeit", die ich nicht verstehe:

      Wenn keine verschachtelten gets und includes funktioniert es so:

      open (FILEHANDLE , "<$bildpfad/$picture") ;
           undef $/;
           $gifs=<FILEHANDLE> ; close(FILEHANDLE) ;
      

      sobald aber die Funktion als Sub aus einem includeten Template geladen wird, ist plötzlich der _get-Hash leer - nix mehr drin. Alle zu öffnenden Datenbanken werden nicht mehr gefunden, Felder als nicht vorhanden angemeckert.
      Als Fehlerursache ist das undef $/ lokalisiert worden (was auch immer das bedeutet, laut SelfHTML ist das die Perl-interne Variable für Zeilenende bzw. Eingabeende auf der Standardeingabe. Was bewirkt das im oberen Scriptschnipsel?

      Hab dann Mister Google befragt und folgende alternative Methode zum Dateiöffnen gefunden (die mir auch vollkommen einleuchtet im Gegensatz zur obigen), die uneingeschränkt funktioniert.
      Nur wird damit der Speicher ziemlich voll, sobald man eine größere Zahl an unterschiedlichen Dateien damit öffnet.

      open (FILEHANDLE, "<$pfad/$datei") ;
            while( ($zeichen = getc(FILEHANDLE)) ne "") {
            $datei.= $zeichen;
            }
      
      close(FILEHANDLE);

      Kann man nach Manipulation (Größenermittlung, Inhaltsextraktionen etc.) dann mittels eines einfachen undef $datei den Speicherplatz wieder freigeben?

      Und was bedeutet das undef $/ - gibt das auch den Speicherplatz wieder frei?
      Warum macht dies Probleme in bp-scripten in Bezug auf Datenbankabfragen?

      Danke für Tipps

     Antworten

    Beitrag von Claus (4645 Beiträge) am Sonntag, 10.Juni.2007, 18:35. WWW: automobilhai.de
    Re: Perl-Frage (Lizenz) Dateihandling

     Antworten

    Beitrag von Pouraga (1396 Beiträge) am Sonntag, 10.Juni.2007, 18:45.
    Re: Perl-Frage (Lizenz) Dateihandling

      Jetzt mal unabhängig von der Problematik (hab nicht alles verstanden)

      Einen Filehändler zu öffnen, nur um die Dateigrösse zu erfahren ist eine üble Ressourcenverschwendung.

      Frage doch besser das Dateisystem das kennt die Grösse:
      $Dateigrösse = -s "$bildpfad/$picture";
      

      Vergleiche:
      http://de.selfhtml.org/perl/funktionen/dateiverwaltung.htm#dateitest

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Montag, 11.Juni.2007, 09:14.
    Re: Perl-Frage (Lizenz) Dateihandling

      @ pouraga
      >Einen Filehändler zu öffnen, nur um die Dateigrösse zu erfahren ist eine üble Ressourcenverschwendung. 
      

      wenns nur um die Größenermittlung gänge, geb ich dir recht, aber es geht in dem Script um die Abmasse von Bildern (Breite/Höhe) und dann ggf. Manipulation dieser bei der Ausgabe (bspw. Popupfenster ner Bildgalerie gleich in der richtigen Größe öffnen, Thumbnaildarstellung falls keine Thumbdatei vorhanden ist [gut das ist ne Krücke, weil die Dateigröße zum Laden ja bleibt, aber allemal besser als gar nix]...)

      @Claus
      
      Ja freilich - das hatte ich schon gefunden im SelfForum, ist mir trotzdem
      noch nicht klar, was das undef $/ in dem Zusammenhang bedeutet und warum es ab einer nicht genauer untersuchten "Verschachtelungstiefe" in BasePortal
      zu Problemen führt.

      @alle dies interessiert:
      
      Der Link zu paar interessanten Codeschnipseln, u.a. auch zu dem von mir benutzten Scriptteil
      http://www.inspire-world.de/perlcgi/codeschnipsel.html

     Antworten

    Beitrag von Claus (4645 Beiträge) am Montag, 11.Juni.2007, 09:32. WWW: automobilhai.de
    Re: Perl-Frage (Lizenz) Dateihandling

     Antworten

    Beitrag von Claus (4645 Beiträge) am Montag, 11.Juni.2007, 12:03. WWW: hummelexpress.de
    Re: Perl-Frage (Lizenz) Dateihandling

      >Thumbnaildarstellung falls keine Thumbdatei vorhanden ist [gut das ist ne Krücke, weil die Dateigröße zum Laden ja bleibt, aber allemal besser als gar nix]...)
      

      Hatte das Thema damals mal angefangen, aber noch nicht beendet. Mußte erstmal bei mir auf dem PC "kramen", um das wiederzufinden.,-)

      Dateigröße bleibt zwar, aber die Abmessungen für die Ausgabe kann man recht einfach steuern:

      http://www.mediaevent.de/css/dimension.html

      Gruß

      Claus

     Antworten

    Beitrag von Sander (8133 Beiträge) am Sonntag, 10.Juni.2007, 22:12.
    Re: Perl-Frage (Lizenz) Dateihandling

      speicher freigeben: leider nein, am ende wird bei perl aufgeräumt... ;(

     Antworten

    Beitrag von Christoph Bergmann (8110 Beiträge) am Montag, 11.Juni.2007, 17:08.
    Re: Perl-Frage (Lizenz) Dateihandling

      Also bei der 2. Methode stellen sich mir die Zehennägel auf - Zeichenweisees Datei-Einlesen mag in C angehen, aber in Perl is das arg. Schonmal den Zeitunterschied gemessen?

      > Und was bedeutet das undef $/ - gibt das auch den Speicherplatz wieder frei?
      > Warum macht dies Probleme in bp-scripten in Bezug auf Datenbankabfragen?
      

      In den Lizenzen werden deine eigenen Skripte keinen Beschränkungen unterworfen. Wenn Du magst kannst Du Dir also auch Deine Umgebung zerschiessen und danach läuft nichts mehr. $/ ist eine von Perls Spezialvariablen mit denen man die Art und Weise wie Perl funktioniert ändern kann. Es ist extrem schlechter Stil, diese Variablen zu verändern und danach nicht wieder in den Originalzustand zurückzuversetzen, wie es Deine 1. Methode macht. Darauf wird sogar extra in der Perl-Doku hingewiesen, genau mit diesem Beispiel:

      http://search.cpan.org/dist/perl/pod/perlvar.pod

      "
      You should be very careful when modifying the default values of most special variables described in this document. In most cases you want to localize these variables before changing them, since if you don't, the change may affect other modules which rely on the default values of the special variables that you have changed. This is one of the correct ways to read the whole file at once:

          open my $fh, "foo" or die $!;
          local $/; # enable localized slurp mode
          my $content = <$fh>;
          close $fh;
      

      But the following code is quite bad:

          open my $fh, "foo" or die $!;
          undef $/; # enable slurp mode
          my $content = <$fh>;
          close $fh;
      

      since some other module, may want to read data from some file in the default "line mode", so if the code we have just presented has been executed, the global value of $/ is now changed for any other code running inside the same Perl interpreter.
      "

      Üblicherweise macht man noch { ... } um den Code, damit das "local" nur genau diesen Bereich betrifft, d.h. was Du möchtest ist:

       open (FILEHANDLE , "<$bildpfad/$picture") ;
       { local $/=undef; $gifs=<FILEHANDLE> ; }
       close(FILEHANDLE) ;
      

     Antworten

    Beitrag von hempelr (1976 Beiträge) am Montag, 11.Juni.2007, 20:32.
    Re: Perl-Frage (Lizenz) Dateihandling

      >Also bei der 2. Methode stellen sich mir die Zehennägel auf - Zeichenweisees Datei-Einlesen mag in C angehen, aber in Perl is das arg. Schonmal den Zeitunterschied gemessen?
      
      *grins* - sowas in der Art dachte ich mir schon, weil sonst wäre das ja irgendwie als "Standardmethode" auch beschrieben...

      Vielen Dank für den Pod-Auszug und das Stück Code, ich glaub ich hab etwas davon verstanden...
      Werd es dann mal ausprobieren, es "richtig" zu machen.

     Antworten


     
 Liste der Einträge von 13350 bis 13500:Einklappen Zur Eingabe 
Neueste Einträge << 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | Neuere Einträge < Zur Eingabe  > Ältere Einträge | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 >> Älteste Einträge


Zurück zur Homepage

© baseportal.de. Alle Rechte vorbehalten. Nutzungsbedingungen



powered in 0.09s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!