Thread Optimieren (21 answers)
Opened by kabel at 2003-08-20 12:05

stb2050
 2003-08-20 11:31
#990 #990
User since
2003-08-14
87 articles
BenutzerIn
[default_avatar]
Hi Ihr,

mein Script ist saulangsam und ich hätte gerne mal ein paar Tipps zur Optimierung. Es sind zwei Scripts, die hintereinander aufgerufen werden und anscheinend Jahre brauchen.

Code (perl): (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
#!/usr/bin/perl

#Einleitung

use CGI;
use CGI::Carp qw(fatalsToBrowser);
&#36q = new CGI;

require "hpm_einstellungen.cgi";

#Username ermitteln

&#36username = &#36q->param("user");

if (&#36username eq "")
{
   &#36url = &#36ENV{REQUEST_URI};
   &#36username = (split /\//, &#36url)[-1];
}

#Prüfen, ob User vorhanden ist oder User-ID ermitteln

&#36anfrage = "SELECT userid, status FROM hpm_user WHERE username='&#36username';";
&datenbank;
&#36ergebnisse = &#36sth->fetchall_arrayref( { userid => 1, status => 1 } );
foreach(@&#36ergebnisse) { &#36userid = &#36_->{userid}; &#36status = &#36_->{status}; }

if (&#36userid eq "") { require "hpm_homepage_error404.cgi"; }

#Prüfen, ob User gesperrt ist

if (&#36status eq "4") { require "hpm_homepage_gesperrt.cgi"; }

open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/homepagedaten.dat");
flock FILE,1;
@einstellungen = <FILE>;
s/\n// foreach (@einstellungen);
close(FILE);

&#36titel = &#36einstellungen[0];
&#36beschreibung = &#36einstellungen[1];
&#36design = &#36einstellungen[3];
&#36autor = &#36einstellungen[4];
&#36herausgeber = &#36einstellungen[5];
&#36copyright = &#36einstellungen[6];
&#36keywords = &#36einstellungen[7];

#Prüfen, ob Design erlaubt ist

if (!(&#36design eq "own"))
{
   open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/payeddesigns.dat");
   flock FILE,1;
   @designs = <FILE>;
   s/\n// foreach (@designs);
   close(FILE);
   foreach(@designs) { if (&#36_ eq &#36design) { &#36found = "ja"; } }
   if (!(&#36found eq "ja")) { require "hpm_homepage_designnn.cgi"; }
}

#Art und Name des Designs ermitteln

if (&#36design eq "own")
{
   &#36name = "own";
}
else
{
   &#36anfrage = "SELECT name FROM hpm_designs WHERE designid='&#36design'";
   &datenbank;
   &#36ergebnisse = &#36sth->fetchall_arrayref( { name => 1 } );
   foreach(@&#36ergebnisse) { &#36name = &#36_->{name}; }
}

#Hintergrundmusik ermitteln

open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/musik.dat");
flock FILE,1;
@einstellungen = <FILE>;
s/\n// foreach (@einstellungen);
close(FILE);
&#36hintergrundmusik = &#36einstellungen[0];

#Prüfen, ob Werbung angezeigt werden muss

open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/funktionen.dat");
flock FILE,1;
@einstellungen = <FILE>;
s/\n// foreach (@einstellungen);
close(FILE);
&#36werbung = &#36einstellungen[6];

#Frameset ausgeben

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

if (&#36werbung eq "1")
{
   &#36anfrage = "SELECT value FROM hpm_sonstiges WHERE name='werbeart'";
   &datenbank;
   &#36ergebnisse = &#36sth->fetchall_arrayref( { value => 1 } );
   foreach(@&#36ergebnisse) { &#36werbeart = &#36_->{value}; }

   if (&#36werbeart eq "1")
   {
      require "hpm_homepage_frame.cgi";
   }
   elsif (&#36werbeart eq "2")
   {
      require "hpm_homepage_popup.cgi";
   }
}
else
{
   require "hpm_homepage_werbefrei.cgi";
}

exit();


Die hpm_homepage_frame, popup und werbefrei printen noch ein bisschen HTML-Code für ein Frameset und binden dann hpm_homepage.cgi so ein.

Code (perl): (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
#!/usr/bin/perl

#Einleitung

use CGI;
use CGI::Carp qw(fatalsToBrowser);
&#36q = new CGI;

require "hpm_einstellungen.cgi";

#Infos einlesen

&#36userid = &#36q->param("userid");
&#36name = &#36q->param("name");
&#36page = &#36q->param("page");
&#36typ = &#36q->param("typ");
&#36var = &#36q->param("var");
&#36id = &#36q->param("id");

if (&#36page eq "") { &#36page = "index"; }

if (&#36name eq "")
{
   open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/homepagedaten.dat");
   flock FILE,1;
   @einstellungen = <FILE>;
   s/\n// foreach (@einstellungen);
   close(FILE);
   &#36design = &#36einstellungen[3];

   if (&#36design eq "own")
   {
      &#36name = "own";
   }
   else
   {
      &#36anfrage = "SELECT name FROM hpm_designs WHERE designid='&#36design'";
      &datenbank;
      &#36ergebnisse = &#36sth->fetchall_arrayref( { name => 1 } );
      foreach(@&#36ergebnisse) { &#36name = &#36_->{name}; }
   }

   if (&#36name eq "") { &#36message = "Designfehler. Bitte wenden Sie sich an den Webmaster."; &error_end; }
}

#Besucher für User zählen

open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/counter.dat");
flock FILE,1;
@einstellungen = <FILE>;
s/\n// foreach (@einstellungen);
close(FILE);

&#36zahl = &#36einstellungen[0];
&#36ips = &#36einstellungen[1];

&#36userip = &#36ENV{'REMOTE_ADDR'};
(&#36datum, &#36uhrzeit) = split (/\|/, &DATUM_UHRZEIT);

if (!((grep(/&#36userip/, split(",", &#36ips))) > 0))
{
   &#36newips = "&#36userip,&#36ips";
   &#36newips = substr(&#36newips, 0, 250);

   &#36zahl++;

   open(FILE, ">&#36internmaindir/userdaten/&#36userid/daten/counter.dat");
   flock FILE,2;
   print FILE "&#36zahl\n";
   print FILE "&#36newips\n";
   close(FILE);

   open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/counter_tage.dat");
   flock FILE,1;
   @tage = <FILE>;
   s/\n// foreach (@tage);
   close(FILE);

   for(0..&#36#tage)
   {
      (&#36tagdatum, &#36tagzahl) = split(/\|\|\|/, &#36tage[&#36_]);
      if (&#36tagdatum eq &#36datum) { &#36status = "ja"; &#36zeile = &#36_; &#36zahl = &#36tagzahl; }
   }

   if (&#36status eq "ja")
   {
      &#36eintraege[&#36zeile] = "&#36datum|||&#36zahl";

      open(FILE, ">&#36internmaindir/userdaten/&#36userid/daten/counter_tage.dat");
      flock FILE,2;
      foreach(@tage) { print FILE &#36_ . "\n"; }
      close(FILE);

   }
   else
   {
      open(FILE, ">>&#36internmaindir/userdaten/&#36userid/daten/counter_tage.dat");
      flock FILE,2;
      print FILE "&#36datum|||1\n";
      close(FILE);
   }

   #Aufruf der Homepage für System zählen

   &#36anfrage = "SELECT value FROM hpm_sonstiges WHERE name='counter_homepages';";
   &datenbank;
   &#36ergebnisse = &#36sth->fetchall_arrayref( { value => 1 } );
   foreach(@&#36ergebnisse) { &#36inhalt = &#36_->{value}; }

   @content = split/OOO/, &#36inhalt;

   (&#36countdatum, &#36countzahl) = split(/\|\|\|/, &#36content[0]);

   &#36countzahl++;
   &#36content[0] = "&#36countdatum|||&#36countzahl";

   &#36newinhalt = "";
   foreach(@content) { &#36newinhalt .= &#36_ . "OOO"; }

   &#36anfrage = "UPDATE hpm_sonstiges SET value='&#36newinhalt' WHERE name='counter_homepages'";
   &datenbank;
}

#Prüfen, ob Intro angezeigt werden soll oder nicht

open(FILE, "&#36internmaindir/userdaten/&#36userid/daten/intro.dat");
flock FILE,1;
@einstellungen = <FILE>;
s/\n// foreach (@einstellungen);
close(FILE);
&#36showit = &#36einstellungen[0];

if ((&#36showit eq "0") || (&#36showit eq "") || (!(&#36id eq ""))  || (!(&#36page eq "index")))
{
   #Intro nicht anzeigen

   if (&#36name eq "own")
   {
      print "Location: designs/benutzer.cgi?page=&#36page&typ=&#36typ&id=&#36id&userid=&#36userid&var=&#36var\n\n";
   }
   else
   {
      print "Location: designs/&#36name/index.cgi?page=&#36page&typ=&#36typ&id=&#36id&userid=&#36userid&var=&#36var\n\n";
   }
}
elsif (&#36showit eq "1")
{
   #Intro anzeigen

   #Richten Link für Weiterleitung generieren

   if (&#36name eq "own")
   {
      &#36weiterlink = "&#36homedir/designs/benutzer.cgi?page=&#36page&typ=&#36typ&id=&#36id&userid=&#36userid&var=&#36var";
   }
   else
   {
      &#36weiterlink = "&#36homedir/designs/&#36name/index.cgi?page=&#36page&typ=&#36typ&id=&#36id&userid=&#36userid&var=&#36var";
   }

   #Intro ausgeben

   &#36form = &#36einstellungen[1];
   &#36grafik = &#36einstellungen[2];
   &#36flash = &#36einstellungen[3];
   &#36quali = &#36einstellungen[4];
   &#36width = &#36einstellungen[5];
   &#36height = &#36einstellungen[6];
   &#36hintergrund_farbe = &#36einstellungen[7];
   &#36hintergrund_bild = &#36einstellungen[8];
   &#36button_text = &#36einstellungen[9];
   &#36button_schriftgroesse = &#36einstellungen[10];
   &#36button_schriftart = &#36einstellungen[11];
   &#36button_schriftfarbe = &#36einstellungen[12];

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

   print "<html>\n";
   print "<head></head>\n";
   print "<body text=\"&#36button_schriftfarbe\" bgcolor=\"&#36hintergrund_farbe\" background=\"&#36hintergrund_bild\" link=\"&#36button_schriftfarbe\" vlink=\"&#36button_schriftfarbe\" alink=\"&#36button_schriftfarbe\">\n";
   print "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\" height=\"100%\">\n";
   print "  <tr>\n";
   print "    <td width=\"100%\" align=\"center\">\n";

   if (&#36form eq "1")
   {
      #Grafik-Tag

      print "    <p><img border=\"0\" src=\"&#36maindir/userdaten/&#36userid/bilder/&#36grafik\"></p>\n";
   }
   elsif (&#36form eq "2")
   {
      #Flash-Tag

      print "    <p>\n";
      print "    <object width=\"&#36width\" height=\"&#36height\">\n";
      print "    <param name=\"movie\" value=\"&#36maindir/userdaten/&#36userid/flash/&#36flash\">\n";
      print "    <param name=\"loop\" value=\"false\">\n";
      print "    <param name=\"quality\" value=\"&#36quali\">\n";
      print "    <param name=\"menu\" value=\"false\">\n";
      print "    <embed src=\"&#36maindir/userdaten/&#36userid/flash/&#36flash\" width=\"&#36width\" height=\"&#36height\" loop=\"false\" quality=\"&#36quali\" menu=\"false\" border=\"0\" type=\"application/x-shockwave-flash\" pluginspace=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash\"></embed>\n";
      print "    </object>\n";
      print "    <p>\n";
   }

   print "    <p><font face=\"&#36button_schriftart\" size=\"&#36button_schriftgroesse\"><a target=\"_self\" href=\"&#36weiterlink\"><font>&#36button_text</font></a></font></p>\n";
   print "    </td>\n";
   print "  </tr>\n";
   print "</table>\n";
   print "</body>\n";
   print "</html>\n";
}

exit();


Hmm ich denke mal ich habe da ne Menge uneffektiv programmiert.

Viele Grüße
Steffen\n\n

<!--EDIT|snadra|1061376157-->

View full thread Optimieren