Schrift
[thread]833[/thread]

Fehler beim Aufrufen des CGI-Skriptes: Fehler beim Aufrufen des CGI-Skriptes



<< >> 7 Einträge, 1 Seite
sde42dn
 2006-10-26 13:20
#8925 #8925
User since
2006-10-26
11 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

habe zum Thema &„Exceldateien mit Perl erzeugen&“ ein Problem, mit dem ich mich bereits seit mehreren Tagen beschäftige (was inzwischen tierisch nervt, da ich keine Lösung finde).

Falls jemand Zeit/Lust hat sich mein Problemchen mal anzuschauen, wäre ich ihm/ihr sehr dankbar!!!!!



Probelm:

Das unten stehende CGI-Skript soll eine ASCII-Datei in eine Excel-Datei umwandeln.
Die ASCII-Datei enthält CPU-Daten in unten stehender Form:

0 0 44 50 14 64 23:53:51
.
.
u.s.w

Führt man das Skript händisch aus (also mit &„./CPU_write_to_excel.cgi&“ siehe Skript unten), so funktioniert alles wunderbar (egal, ob als root oder beliebiger User). Wird das Skript aber mit einen Klick auf den Button >> &„CPU-EXCEL erstellen&“ über die web-Seite (siehe Code unten) aufgerufen, so kommt unten stehende Meldung:

Button im HTML:

<input type="button" value="CPU-EXCEL erstellen" method="post" onclick="document.Formular.action='cgi-bin/CPU_write_to_excel.cgi';document.Formular.submit()">

Fehlermeldung (sehr vielsagend!!!)

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, peter@t-systems.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.







Vielen Dank im Voraus!!!!!


Grüsse Peter






CGI-Skript:


Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/perl
################################################
# toexcel --Peter Richter
################################################
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Spreadsheet::WriteExcel;



############################### Variablen entschluesseln ##################################

if ($ENV{REQUEST_METHOD} eq GET) {
$Eingabe=$ENV{QUERY_STRING};
}
else {
read(STDIN, $Eingabe, $ENV{CONTENT_LENGTH});
}

@Paare=split(/&/, $Eingabe);

foreach $Paar (@Paare) {
($Schluessel, $Wert)=split(/=/, $Paar);
$Wert=~tr/+ //;
$Wert=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$Schluessel}=$Wert;
}

############################################################################################





my $PFAD="/perf_Data/Server";

# zum testen
$FORM{Serverliste}=dcbpc111;
$FORM{Monat}=10;
$FORM{Tag}=24;
$FORM{Perftyp}=CPU;


my $IN = "$PFAD/$FORM{Serverliste}/$FORM{Monat}/$FORM{Tag}/$FORM{Perftyp}/$FORM{Serverliste}" . ".cpu"; # Eingabedatei
my $OUT = "/perf_Data/tmp/$FORM{Serverliste}" . ".cpu.xls"; # Ausgabe-(Excel)-Datei


my $book = Spreadsheet::WriteExcel->new($OUT);
my $sheet = $book->addworksheet();
my $format = $book->addformat(font => "Arial", size => 8);

open IN, "<$IN" or die "Can not open $IN";

my $row=0;

# Titel in Excel setzen
$sheet->write($row, 0, "Run-Queue", $format);
$sheet->write($row, 1, "Block-Queue", $format);
$sheet->write($row, 2, "Wait-Queue", $format);
$sheet->write($row, 3, "User-CPU", $format);
$sheet->write($row, 4, "System-CPU", $format);
$sheet->write($row, 5, "Ges-CPU", $format);
$sheet->write($row, 6, "Zeit", $format);





while(<IN>) {
$row++;
chomp;
my($run, $block, $wait, $user, $system, $ges, $zeit)=(split/\s+/,$_)[0,1,2,3,4,5,6];

# Reihe, Spalte, Wert, Format (Format siehe oben)

$sheet->write($row, 0, $run, $format);
$sheet->write($row, 1, $block, $format);
$sheet->write($row, 2, $wait, $format);
$sheet->write($row, 3, $user, $format);
$sheet->write($row, 4, $system, $format);
$sheet->write($row, 5, $ges, $format);
$sheet->write($row, 6, $zeit, $format);
}

close IN;


$book->close();


######################################################################################
######################################################################################

HTML-Seite:



Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
<!-- HTML-Sartseite erstellt von: Peter Richter -->


<html>


<head>

<title>STEPS - Startseite </title>

<script type="text/javascript">
function chkFormular () {
if (document.Formular.Monatauswert.selectedIndex < 1 && document.Formular.Tag.selectedIndex < 1) {
alert("Bitte einen Tag angeben!");
document.Formular.Tag.focus();
return false;
}
if (document.Formular.Monatauswert.selectedIndex < 1 && document.Formular.Monat.selectedIndex < 1) {
alert("Bitte einen Monat angeben!");
document.Formular.Monat.focus();
return false;
}
if (document.Formular.Monatauswert.selectedIndex < 1 && document.Formular.Tag.selectedIndex < 1 && document.Formular.Monat.selectedIndex < 1) {
alert("Bitte einen Monat angeben!");
document.Formular.Monatauswert.focus();
return false;
}
if ((document.Formular.Tag.selectedIndex >= 1 || document.Formular.Monat.selectedIndex >= 1) && document.Formular.Monatauswert.selectedIndex >= 1) {
alert("Entweder Tages. oder Monatauswertung angeben!");
document.Formular.Monatauswert.selectedIndex = 0;
document.Formular.Monat.selectedIndex = 0;
document.Formular.Tag.selectedIndex = 0;
return false;
}
if (document.Formular.Serverliste.selectedIndex < 0) {
alert("Bitte einen Server angeben!");
document.Formular.Serverliste.focus();
return false;
}
if (document.Formular.Perftyp[2].checked && document.Formular.sds_platte.value == "") {
alert("Bitte eine SDS-Platte angeben! Siehe linke Spalte von \"diskinfo.pl\" auf Zielserver.");
document.Formular.sds_platte.focus();
return false;
}
if (document.Formular.Perftyp[3].checked && document.Formular.vx_platte.value == "") {
alert("Bitte Vx-Platte angeben! Siehe \"vxdisk list\" auf Zielserver.");
document.Formular.vx_platte.focus();
return false;
}
if (document.Formular.Perftyp[4].checked && document.Formular.sds_volume.value == "") {
alert("Bitte SDS-Volume angeben! Siehe linke Spalte \"volinfo.pl\" auf Zielserver.");
document.Formular.sds_volume.focus();
return false;
}
if (document.Formular.Perftyp[5].checked && document.Formular.vx_volume.value == "") {
alert("Bitte Vx-Volume angeben! Siehe \"vxprint\" auf Zielserver.");
document.Formular.vx_volume.focus();
return false;
}
}


function Volinfo () {

if (document.Formular.Serverliste.selectedIndex < 0) {
alert("Bitte einen Server angeben!");
document.Formular.Serverliste.focus();
return false;
}else{
for(var i = 0;document.Formular.Serverliste.options.length;i++){
if (document.Formular.Serverliste.options[i].selected){
//ziel='cgi-bin/volinfo.cgi?Serverliste=' + document.Formular.Serverliste.options[i].text;
ziel='cgi-bin/volinfo.cgi';
window.open(ziel); // &�fnet sich ein neues Fenster
//window.location.href(ziel); // es geht im gleichem Fenster weiter
}
}
}
}

</script>
</head>


<body bgcolor="e0ffff" text="#000000">


<noscript>
JavaSkript ist in Ihrem Browser nicht aktiviert!!!
Bitte aktivieren Sie JavaSkript.
</noscript>


<table width="1100">
<tr>
<td colspan="2">
<h1 align="center" style="color:blue">
Performancedaten der STEPS-Server
</h1>
<div align="center">
<p>
<img src="t-systems1.jpg" alt="T-Systems">
</p>
</div>
<br>
<br>
<br>
<br>
</td>
</tr>
</table>
<form name="Formular" action="cgi-bin/steps-perf.cgi" method="post" onsubmit="return chkFormular()">
<table width="1000">
<tr>
<th align="left" width="700" nowrap>
<h4 style="color:green" style="font-family:Latin">
Typ
</h4>
<br>
<input type="radio" name="Perftyp" value="CPU" checked>CPU
<br>
<input type="radio" name="Perftyp" value="memory">Memory
<br>
<input type="radio" name="Perftyp" value="platten1">SDS-Platten (z.B. sd4 oder ssd4, siehe linke Spalte "diskinfo")
<input name="sds_platte" type="text" size="7" maxlength="30">
<input type="button" value="diskinfo" onclick="document.Formular.action='cgi-bin/diskinfo.cgi';document.Formular.submit()">
<br>
<input type="radio" name="Perftyp" value="platten2">Vx-Platten (siehe "vxdisk list")
<input name="vx_platte" type="text" size="7" maxlength="30">
<br>
<input type="radio" name="Perftyp" value="volumes1">SDS-Volumes (z.B. md52 bzw. md200_meta_2, siehe linke Spalte "volinfo")
<input name="sds_volume" type="text" size="7" maxlength="30">
<!-- <input type="button" value="volinfo" onclick="Volinfo()"> -->
<input type="button" value="volinfo" onclick="document.Formular.action='cgi-bin/volinfo.cgi';document.Formular.submit()">
<br>
<input type="radio" name="Perftyp" value="volumes2">Vx-Volumes (siehe "vxprint")
<input name="vx_volume" type="text" size="7" maxlength="30">
<br>
<br>
</th>
<th align="center" width="200">
<h4 style="color:green" style="font-family:Latin">
Serverliste
</h4>
<br>
<select name="Serverliste" size="10">
<optgroup label=" Bitte Auswahl treffen ">
<optgroup label="---------------------------">
<option>dcb0261</option>
<option>dcb0262</option>
<option>dcbe0312</option>
<option>dcbp0134</option>
<option>dcbp0171</option>
<option>dcbpc111</option>
<option>dcbpc112</option>
<option>dcbpc121</option>
<option>dcbpc122</option>
<option>dcbpc131</option>
<option>dcbpc132</option>
<option>dcbpc141</option>
<option>dcbpc142</option>
<option>dcbpc151</option>
<option>dcbpc152</option>
<option>dcbpc153</option>
<option>dcbt0231</option>
<option>dcbt0261</option>
<option>dcbt0262</option>
<option>dcbtc291</option>
<option>dcbtc292</option>
</select>
<br>
<br>
<input type="button" value="Hardware-Infos" method="post" onclick="document.Formular.action='cgi-bin/serverinfos.cgi';document.Formular.submit()">
<input type="button" value="CPU-EXCEL erstellen" method="post" onclick="document.Formular.action='cgi-bin/CPU_write_to_excel.cgi';document.Formular.submit()">
</th>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<table width="1100">
<tr>
<th align="left" width="550">
<h4 style="color:green" style="font-family:Latin">
Tagesauswertung
</h4>
</th>
<th align="left" width="550">
<h4 style="color:green" style="font-family:Latin">
Monatauswertung
</h4>
</th>
</tr>
</table>
<table width="1100">
<tr>
<th align="left" width="550">
<br>
Tag:
<select name="Tag">
<option>
<option>01
<option>02
<option>03
<option>04
<option>05
<option>06
<option>07
<option>08
<option>09
<option>10
<option>11
<option>12
<option>13
<option>14
<option>15
<option>16
<option>17
<option>18
<option>19
<option>20
<option>21
<option>22
<option>23
<option>24
<option>25
<option>26
<option>27
<option>28
<option>29
<option>30
<option>31
</select>
Monat:
<select name="Monat">
<option>
<option>01
<option>02
<option>03
<option>04
<option>05
<option>06
<option>07
<option>08
<option>09
<option>10
<option>11
<option>12
</select>
</th>
<th align="left" width="550">
<br>
<br>
Monat: <select name="Monatauswert">
<option>
<option>01
<option>02
<option>03
<option>04
<option>05
<option>06
<option>07
<option>08
<option>09
<option>10
<option>11
<option>12
</select>
</th>
</tr>
<tr>
<th colspan="2" align="center">
<br>
<br>
<br>
<br>
<br>
<input type="image" src="png/button1.png" alt="Absenden">
</th>
</tr>
</table>
<br>
<br>
<br>
<br>
<br>

</form>

</body>
</html>
\n\n

<!--EDIT|renee|1161854754-->
renee
 2006-10-26 13:25
#8926 #8926
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich vermute mal, dass der Webserver-User keine Rechte hat, in das Verzeichnis zu schreiben.

Du solltest Dir auch mal das Modul CPAN:CGI und den Wiki:Artikel durchlesen...
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/
renee
 2006-10-26 13:30
#8927 #8927
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und Du sendest keinen Header...
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/
sde42dn
 2006-10-26 13:32
#8928 #8928
User since
2006-10-26
11 Artikel
BenutzerIn
[default_avatar]
das habe ich anfangs auch vermutet. Ich kann das Skript aber als x-beliebiger user (auch Webserver-User) ausführen und es funktioniert. Probleme gibt es erst mit dem Klick auf den Button.
renee
 2006-10-26 13:36
#8929 #8929
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
der Code mal etwas angepasst, damit es weniger Sicherheitslücken gibt (ungetestet!):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Spreadsheet::WriteExcel;

my $cgi = CGI->new();
my %FORM = $cgi->Vars();

print $cgi->header();

my $PFAD="/perf_Data/Server";

# zum testen
$FORM{Serverliste}='dcbpc111';
$FORM{Monat}=10;
$FORM{Tag}=24;
$FORM{Perftyp}='CPU';

check_input(\%FORM);


my $IN = "$PFAD/$FORM{Serverliste}/$FORM{Monat}/$FORM{Tag}/$FORM{Perftyp}/$FORM{Serverliste}.cpu"; # Eingabedatei
my $OUT = "/perf_Data/tmp/$FORM{Serverliste}.cpu.xls"; # Ausgabe-(Excel)-Datei

my $book = Spreadsheet::WriteExcel->new($OUT);
my $sheet = $book->addworksheet();
my $format = $book->addformat(font => "Arial", size => 8);
my $row=0;
my @header = ("Run-Queue","Block-Queue","Wait-Queue", "User-CPU","System-CPU", "Ges-CPU", "Zeit",);

# Titel in Excel setzen
$sheet->write_row($row, 0,\@header , $format);

open IN, "<",$IN or die "Can not open $IN: $!";
while(<IN>) {
chomp;
$sheet->write_row(++$row, 0, [(split/\s+/,$_)[0..6]], $format);
}
close IN;


$book->close();

sub check_input{
my ($hashref) = @_;
if($hashref->{Monat} !~ /^[01][0-9]$/ or
$hashref->{Tag} !~ /^[0-3][0-9]$/ or
$hashref->{Serverliste} !~ /^dcb[^\s]+$/ or
!grep{$_ eq $hashref->{Perftyp}}(qw(CPU platten1 memory))){
print $cgi->h2('Fehler bei den Eingaben');
exit;
}
}
\n\n

<!--EDIT|renee|1161855871-->
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/
renee
 2006-10-26 13:37
#8930 #8930
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=sde42dn,26.10.2006, 11:32]das habe ich anfangs auch vermutet. Ich kann das Skript aber als x-beliebiger user (auch Webserver-User) ausführen und es funktioniert. Probleme gibt es erst mit dem Klick auf den Button.[/quote]
Wie gesagt, Du schickst auch keinen Header! Der Webserver muss als allererstes den Header losschicken...
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/
sde42dn
 2006-10-26 13:44
#8931 #8931
User since
2006-10-26
11 Artikel
BenutzerIn
[default_avatar]
bin begeistert!!!!!!!!!!!!!!!!
jetzt funktioniert es. Wo lag mein Fehler???

vielen, vielen Dank!!!!!!!!!!!
<< >> 7 Einträge, 1 Seite



View all threads created 2006-10-26 13:20.