K.Bokov: system

Hallo,

ich möchte ein Programm mit dem Perl-Skript aufrufen (http://localhost/cgi-bin/test.cgi):

#!/usr/bin/perl -w

use strict;

use CGI::Carp qw(fatalsToBrowser);
use CGI;
use Env;
use Shell;

my @toScaleImg = ();

@toScaleImg = qq(bmpscale ../bilder/_test.bmp 120 90 ../bilder/_test_scaled.bmp);

printf ("Programmaufruf: %80s \n", @toScaleImg);

system (@toScaleImg) == 0 or die "Command: @toScaleImg \n Return: $? \n $! \n";

und bekomme aber immer wieder die Fehlermeldung:

Software error:

Command: /bin/bmpscale ../bilder/_test.bmp 120 90 ../bilder/_test_scaled.bmp
 Return: 256

Das Programm bmpscale liegt unter /bin und lässt sich über Kommandozeile bedienen:

user@home:> bmpscale ../bilder/_test.bmp 120 90 ../bilder/_test_scaled.bmp
user@home:>

...skaliert das Bild auf die Größe 120x90 und speichert das Ergebnis in der Datei _test_scaled.bmp

Bilderverzeichnis liegt unter http://localhost/bilder

Danke für die Tipps!

  1. ich möchte ein Programm mit dem Perl-Skript aufrufen

    schön

    Danke für die Tipps!

    Was ist das Problem?

    Struppi.

    1. Was ist das Problem?

      ;-) na ja, das Bild wird nicht skaliert
      und die Fehlermeldung...

  2. Hallo,

    system (@toScaleImg) == 0 or die "Command: @toScaleImg \n Return: $? \n $! \n";

    Warum system(), Du hast doch
    use Shell;

    machs so
    use Shell qw(programm);

    und dann:
    programm(@parameterliste);

    ...skaliert das Bild auf die Größe 120x90 und speichert das Ergebnis in der Datei _test_scaled.bmp

    Dann doch besser gleich:
    use Image::Size;

    Viele Grüße,
    Hotte

    1. use Shell qw(programm);

      und dann:
      programm(@parameterliste);

      Keine Fehlermeldung aber auch keine Skalierung. :(

  3. und bekomme aber immer wieder die Fehlermeldung:

    Hab ich übersehen, du kannst hier auch Quellcode formatieren, dann wären deine Kommentare sichtbarer gewesen.
    ``

    Software error:

    Command: /bin/bmpscale ../bilder/_test.bmp 120 90 ../bilder/_test_scaled.bmp
    Return: 256
    Das Programm bmpscale liegt unter /bin und lässt sich über Kommandozeile bedienen:

    Bist du sicher?
    Was ergibt im Perl Skript

    print "Datei ist nicht da wo du sie vermutest" unless -e '/bin/bmpscale';

    user@home:> bmpscale ../bilder/_test.bmp 120 90 ../bilder/_test_scaled.bmp
    user@home:>

    Wie lautet das verzeichniss unter dem das CGI Skript läuft?

    Was ergibt

    use Cwd;  
    print 'Arbeitsverzeichniss: ', cwd();  
    
    

    Struppi.

    1. Was ergibt

      use Cwd;

      print 'Arbeitsverzeichniss: ', cwd();

        
      /home/user/www  
        
      jetz habe ich den Pfad angepasst:  
        
      ~~~perl
        
      @toScaleImg = qq(bmpscale ./bilder/_test.bmp 120 90 ./bilder/_test_scaled.bmp);  
      
      

      und rufe den Skript aus der Kommandozeile:

      user@home:> pwd
      user@home:> /home/user/www
      user@home:> ./cgi/test.cgi

      ...das Bild wird skaliert! Über Browser geht es noch nicht.

      1. Hallo,

        ...das Bild wird skaliert! Über Browser geht es noch nicht.

        Wenns unbedingt über den Browser laufen soll:

        print "Content-type: text/html\n\n"; # oder text/plain

        bevor Du was ausgibst mit weiteren print-Anweisungen. Und wie Struppi schon sagte, die Pfadangaben beachten.

        Viele Grüße,
        Hotte

        1. bevor Du was ausgibst mit weiteren print-Anweisungen. Und wie Struppi schon sagte, die Pfadangaben beachten.

          Pfadangaben müssen stimmen. Es geht aber nicht, wenn ich sogar nur das Programm aufrufe:

            
            
          system ("bmpscale");  
            
          
          

          Der Browser sagt mir:

          No such process at ... line ....

          Das komische daran ist, wenn ich ls-Befehl aufrufe:

            
            
          system ("ls -la");  
            
          
          

          ...so zeigt er mir Dateiein im Verzeichnis an. ls und bmpscale liegen im gleichen /bin Verzeichnis, haben gleiche Rechte etc.

          1. ...so zeigt er mir Dateiein im Verzeichnis an. ls und bmpscale liegen im gleichen /bin Verzeichnis, haben gleiche Rechte etc.

            Unter welchen Rechten laufen den die CGI Skripte?
            ich kenn micht damit niocht so aus, aber das müssen nicht die sein mit denen du arbeitest.

            Struppi.

            1. Unter welchen Rechten laufen den die CGI Skripte?

              Ganz extrem 777

    2. Bist du sicher?

      Ja.

      Was ergibt im Perl Skript

      print "Datei ist nicht da wo du sie vermutest" unless -e '/bin/bmpscale';

      Nichts. Wird nicht angezeigt, weil die Datei da ist.

  4. Das Programm bmpscale liegt unter /bin und lässt sich über Kommandozeile bedienen:

    Problem habe ich gelöst!!!

    Ich habe mal das Binary-Programm nach /bin kopiert aber die Librarys sind im geschützten Verzeichnis liegen geblieben.
    Der Server dürfte sie nicht anfassen und deshalb gab's diesen Effekt. Ich müsste also mit shell diesen Fehler korrigieren... ;)

    Danke an Allen!