Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]951[/thread]

im Script eingebettete Bilder



<< >> 9 Einträge, 1 Seite
Inferno
 2007-06-29 20:12
#247 #247
User since
2007-06-29
19 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich hätte eine Frage zu einer eventuell schwierigeren Sache...es betrifft folgendes.
Ich entwickle zur Zeit ein Webinterface zur Steuerung eines Gameservers. Hauptsächlich geschieht die Konfiguration über die INI Datei der Serveranwendung. Glücklicherweise stellt die Perl Modulbibliothek schon etwas passendes zum auslesen von INI Dateien zur Verfügung, was die Arbeit sehr erleichtert. Dennoch hänge ich im Moment an der Entwicklung der Installationsroutine. Es soll dem User möglichst einfach gemacht werden das Interface zu installieren. Aus diesem Grund soll das Install File nur aus einer Datei bestehen, welche letztendlich alles enthält und sich in die eigendlichen Files dann aufteilt. Ich denke das bekomme ich hin, indem ich den Quelltext meiner einzelnen Files in eine importiere und dann mit den nötigen Befehlen neue Dateien erzeuge.

ABER: Da mein Interface nicht nur aus Text besteht, sondern auch Bilder (z.B. im Kopfbereich der Banner) vorhanden sind, suche ich eine Lösung die Bilder mit in diese Installationsdatei (hier: setup.cgi) zu importieren. Den Binärcode der Bilder mit einzufügen und damit eine Bilddatei zu schreiben ist natürlich völliger unsinn. Ich habe diese Vorgehensweise schon einmal bei einem CGI installer erlebt und würde dies gern auch nutzen :). Ich wäre für gute Vorschläge sehr dankbar.

MfG, Inferno
Ronnie
 2007-06-30 00:46
#248 #248
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Kann man per MIME-Codierung, aber der IE versteht das nicht:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#!/usr/bin/perl

use strict;
use warnings;

use MIME::Base64;
use IO::All;

my $g = io($ARGV[0])->binary->all;
print '<IMG SRC="data:image/png;base64,', encode_base64($g), '" alt=""/>';
Inferno
 2007-06-30 16:50
#249 #249
User since
2007-06-29
19 Artikel
BenutzerIn
[default_avatar]
Hi Ronnie, danke für die Antwort!
Vielleicht kam es nicht richtig herrüber, aber vereinfacht gesagt geht es mir darum dieses setup.cgi file auf den server zu laden und es via Browser auszuführen. Dann erscheint ein Installationsmenü. Nach Abarbeitung der Installationsschritte soll dieses CGI file in die ganzen anderen benötigten cgi, pl, jpg files usw. zerfallen.
Um es nicht noch komplizierter zu machen, soll das setup.cgi file erhalten bleiben. Dieses kann man ja nach der Installation manuell löschen.
Bei dieser Herrangehensweise müssten die Bildinformationen aber doch in der setup.cgi enthalten sein...wie sonst könnten dann die Bilddateien erzeugt werden, oder? :)
Wie gesagt ich habe selbst schon einmal eine Software auf meinem Webserver installiert, wo der Installer auch so ein einfaches (aber auch recht großes -> ca. 900kB) cgi file war, aus diesem Grund bin ich sehr daran interessiert.
renee
 2007-06-30 16:56
#250 #250
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Warum gibst Du nicht eine Archiv-Datei weiter? Jeder wird wohl in der Lage sein, eine .zip zu entpacken und die Dateien auf den Server zu schieben...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Ronnie
 2007-06-30 17:48
#251 #251
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Na ja, wenn es viele Dateien sind, alle base64 codiert, in YAML verpackt, in die __DATA__ Sektion des CGIs. Ein Skript das dies vorbereitet, könnte so aussehen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

use strict;
use warnings;

use MIME::Base64;
use IO::All;
use YAML;

my %files = ();

for my $to_store (@ARGV) {
$files{$to_store} = encode_base64(io($to_store)->binary->all);
}

print Dump %files;

Die Ausgabe sähe dann für das Skript selbst so aus, wobei natürlich mehrere Dateien auf einmal verarbeitet werden könnten:
Code: (dl )
1
2
3
4
5
6
--- pack_files.pl
--- |
IyEvdXNyL2Jpbi9wZXJsCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgTUlNRTo6QmFz
ZTY0Owp1c2UgSU86OkFsbDsKdXNlIFlBTUw7CgpteSAlZmlsZXMgPSAoKTsKCmZvciBteSAkdG9f
c3RvcmUgKEBBUkdWKSB7CiAgICAkZmlsZXN7JHRvX3N0b3JlfSA9IGVuY29kZV9iYXNlNjQoaW8o
JHRvX3N0b3JlKS0+YmluYXJ5LT5hbGwpOwp9CgpwcmludCBEdW1wICVmaWxlczs=

EDIT: Wobei die Variante von renee wahrscheinlich am einfachsten ist.\n\n

<!--EDIT|Ronnie|1183211420-->
Inferno
 2007-06-30 21:21
#252 #252
User since
2007-06-29
19 Artikel
BenutzerIn
[default_avatar]
ja ihr habt sicher recht...ich werde es wohl einfach per rar oder zip archiv lösen. im prinzip habe ich mir selbst wiedersprochen...
die installation sollte sich einfach für den user gestalten. dies ist ja schonmal nicht möglich weil er mit hoher wahrscheinlichkeit das modul zum auslesen der INI dateien nachinstallieren muss. für den stardard-user ist ja selbst das schon eine große hürde.

vielen dank nochmals für die bemühungen. wenn die ganze sache sehr einfach wäre, würde ich die ursprüngliche idee natürlich bevorzugen, aber in diesem fall lass ich es dann lieber ;).
nepos
 2007-07-01 13:36
#253 #253
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Naja, das Modul könntest du auch zu deinen anderen Sachen packen. Dann muss der Besitzer nix nachinstallieren.
Inferno
 2007-07-02 23:58
#254 #254
User since
2007-06-29
19 Artikel
BenutzerIn
[default_avatar]
einfach mit in das archiv packen oder mit in die setup routine integrieren? wie zweitens geht (falls es überhaupt geht) hab ich keine ahnung :)
Ishka
 2007-07-03 12:01
#255 #255
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Schau dir mal CPAN:Par an. Wenn ich mich recht erinnere, macht das genau das, was du haben willst (Ich habs noch nie verwendet, aber vor zwei Jahren mal nen Vortrag darüber gehört).
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
<< >> 9 Einträge, 1 Seite



View all threads created 2007-06-29 20:12.