| (Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI... |
Diskussion: PHP minimalisieren im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallöchen, für xenos 32k Wettkampf habe ich mir mal ein kleines PHP Script gebaut, das einen Dateinamen als Parameter ...
![]() |
| | #1 (permalink) |
| Registriert seit: 22.10.05 ![]() Likes: 3 | Anzeige Hallöchen, für xenos 32k Wettkampf habe ich mir mal ein kleines PHP Script gebaut, das einen Dateinamen als Parameter übergeben bekommt (der name ist 'f'). Diese Datei ist eine mit bzip2 komprimierte HTML Datei, bzw. ein Teil davon. Dieses Script entpackt also die Datei, deren Namen es übergeben bekommen hat und gibt diese Datei dann aus, wobei allerdings vorher noch ein (ebenfalls komprimierter) Header, danach ein Footer und zwischendrin für alle Seiten gemeinsames CSS sowie das Ende des Headers eingeflochten werden. Das Script sieht im Moment so aus: Code: <? b(a);b($_GET[f]);b(c);function b($f){if(!$f)$f=m;$h=bzopen($f,r);while($l=fgets($h)){if($l=="<!>
")b(e);($l=="<>
")?b(d):print$l;}} Code: <?
b(a);
b($_GET[f]);
b(c);
function b($f)
{ if(!$f)
$f=m;
$h=bzopen($f,r);
while($l=fgets($h))
{ if($l=="<!>\n")
b(e);
($l=="<>\n") ? b(d) : print $l;
}
} In der gepackten Form mit so wenig Whitespaces und Linebreaks wie möglich nimmt das Script 135 Byte ein. Sieht jemand eine Möglichkeit, mit der ich noch etwas mehr Platz sparen kann? Die Konformität an reguläres PHP ist mir dabei weniger wichtig als die Funktion des Scriptes, die so erhalten bleiben soll (auf bzclose($h), php und ?> und "" um die meisten Strings hab ich ja schon verzichtet, wie man sehen kann), wichtig ist allerdings, dass das Script weiterhin Standardkonformes HTML 4.01 Strict ausspuckt (also der : beim trinity operator erhalten bleibt) mfG, farhaven |
| | |
| | #2 (permalink) |
| Moderator ![]() | "echo" ist kürzer als "print" und die runden Klammern beim Ternary-Operator kannst du weglassen: Code: echo $l=="<>\n" ? b(d) : $l; Code: if ( $a ) $b = $c; // ist dasselbe wie $a && $b = $c |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Registriert seit: 23.03.05 ![]() Likes: 22 | Platz sparen könntest du eventuell auch noch, indem du alle deine Projektdateien zusammen in einer Datei komprimierst und du dann immer nur einen bestimmten Bereich einliest. |
| | |
| | #4 (permalink) |
| Registriert seit: 11.06.05 ![]() Likes: 0 | Code: if(!$f)$f=m; Code: !$f?$f=m:''; Edit: Habs grad ausprobiert, funktioniert, ist aber durch die '' nicht kuerzer. Hab gedacht man koennte sie weglassen, vergiss meine Idee ![]() Syntax: Code: (exp1) ? (exp2) : (exp3) ; Code: if (exp1)
(exp2);
else
(exp3); |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 22.10.05 ![]() Likes: 3 | Heyho und danke schonmal für die Antworten, ich habe das Script mittlerweile auf atemberaubende 123 Byte runtergedrückt, aber ich habe irgendwie das Gefühl, dass da noch mehr geht ![]() So sieht das ganze im Moment aus: Code: <?b(a);b($_GET[f]);b(c);function b($f){$h=bzopen($f?$f:m,r);while($l=fgets($h)){$l=="<!>
"?b(e):0;echo$l=="<>
"?b(d):$l;}} Code: <? b(a);
b($_GET[f]);
b(c);
function b($f)
{ $h = bzopen($f ? $f : m,r);
while($l = fgets($h))
{ $l == "<!>\n" ? b(e) : 0;
echo $l == "<>\n" ? b(d) : $l;
}
} ![]() Falls jemandem noch etwas einfällt, wie ich das Script noch kleiner bekomme: Ich bin für alle Vorschläge offen farhaven |
| | |
| | #6 (permalink) |
| Registriert seit: 11.06.05 ![]() Likes: 0 | Ich bin mir nicht ganz sicher, wie das mit den register_globals war. Wenn ich mich nicht taeusche, kann man $_GET['x'] auch per $x abrufen, wenn register_globals on ist. Das ist natuerlich eine Sicherheitsluecke in Scheunentordimensionen, aber es wuerde den Code nochmal um 6 Zeichen druecken. |
| | |
| | #7 (permalink) | ||
| Member of Honour ![]() | Zitat:
Zitat:
| ||
| | |
| | #8 (permalink) | ||
| Moderator ![]() | Zitat:
| ||
| | |
| | #9 (permalink) |
| Registriert seit: 16.06.08 ![]() Likes: 0 | von Sicherheitslücken wollen wir bei deinem Script ja besser gar nicht sprechen... und ob $_GET[x] oder $x spielt der Sicherheit wegen keine Rolle. Eine Möglichkeit, die du noch hast ist alles direkt in PHP einzubauen oder zumindest einige Sachen wie den Typ function durch f zu ersetzen und echo durch e und while durch w, etc. !$f?$f=m:''; sind 12 Zeichen, aber $f?'':$f=m; sind 11 PS: Wenn du bzopen benötigst benötigst du doch normalerweise auch bzread, sonst macht bzopen doch kein Sinn, nicht? |
| | |
| | #10 (permalink) | |
| Themenstarter Registriert seit: 22.10.05 ![]() Likes: 3 | Zitat:
Das mit dem Ersetzen durch Kurzformen werde ich gleich mal ausprobieren, genauso wie den Tipp mit dem Umordnen des Ternary Operators | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |