Het is eigenlijk heel eenvoudig. Kwestie van de php source code tweaken. Het plaatje is inderdaad gedefinieerd op regel 749 van main/logos.h:
code:
1
2
3
4
| unsigned char php_egg_logo[] = {
71, 73, 70, 56, 57, 97, 130, 0, 67, 0,
......
4, 0, 59, 0 }; |
Om te testen of het echt de binaire data van een gif is (zie regel 1 main/logos.h) heb ik eerst die zooi met nummers eerst gekopieerd in een php programma dat het plaatje weergeeft en opslaat op schijf:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| <?php
$a = array(
71, 73, 70, 56, 57, 97, 130, 0, 67, 0,
....
4, 0, 59, 0 );
$s = "";
for ($i = 0; $i < sizeof($a); $i++) {
$s .= chr($a[$i]);
}
echo $s;
$fp = fopen("egg_logo.gif", "w");
fwrite($fp, $s, sizeof($a));
fclose($fp);
?> |
"echo $s" geeft inderdaad het plaatje in de browser. Verder wordt dus het plaatje opgeslagen als gif. Dit plaatje blijkt inderdaad een valid gif te zijn.
Vervolgens heb ik een plaatje gezocht (kwam bij rooie-oortjes.nl uit

), heb hetzelfde gifje ontdaan van die lelijke kerel en opgefleurd met Natasja ofzo. Photoshop werk dus. Opgeslagen als .gif. Dit plaatje dan vervolgens ingelezen met het script:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <?php
$fd = fopen("egg_logo2.gif", "r");
$s = fread($fd, filesize("egg_logo2.gif"));
$c = 0;
echo "\t";
for ($i=0; $i < filesize("egg_logo2.gif"); $i++) {
if ($c==10) {
echo "\n\t";
$c=0;
}
$g = ord($s[$i]);
if (intval($g) < 100) echo " ";
if (intval($g) < 10) echo " ";
echo $g . ", ";
$c++;
}
fclose($fd);
?> |
Het resultaat is een rij getallen in de browser, maar de source van deze 'html'-pagina is precies geschikt als nieuw plaatje in main/logos.h:
code:
1
2
3
4
| unsigned char php_egg_logo[] = {
71, 73, 70, 56, 57, 97, 130, 0, 67, 0,
...
161, 30, 250, 161, 71, 16, 4, 0, 59, 0 }; |
De laatste 0 heb ik zelf toegevoegd, zal wel een eind-code zijn die ontbrak door mij script. Deze nummers heb ik domweg over de bestaande nummers in main/logos.h gekopieerd.
Vervolgens heb ik de aanroep (in ext/standard/info.c) een handje geholpen, zodat ie niet alleen op 1 april zichtbaar is:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| if (expose_php) {
srand(clock());
if (((ta->tm_mon==3) && (ta->tm_mday==1)) || !(rand() % 5)) {
PUTS("<a href=\"http://www.rooie-oortjes.nl/\"><img src=\"");
if (SG(request_info).request_uri) {
PUTS(SG(request_info).request_uri);
}
PUTS("?=PHPE9568F36-D428-11d2-A769-00AA001ACF42\" border=0 align=\"right\" alt=\"Ooh...yeah!\"></a>");
} else {
PUTS("<a href=\"http://www.php.net/\"><img src=\"");
if (SG(request_info).request_uri) {
PUTS(SG(request_info).request_uri);
}
PUTS("?=PHPE9568F34-D428-11d2-A769-00AA001ACF42\" border=0 align=\"right\" alt=\"PHP Logo\"></a>");
}
} |
Dit stukje staat rondom die regel 177 die jij noemde in ext/standard/info.c. De random is er dus bijgekomen en het opbouwen van de link zit nu ook binnen de tweede if. Bij mij is het logo dus zichtbaar op 1 april en verder elke dag met 1/5 kans. En de link is dan dus anders, die gaat naar rooie oortjes

.
De rest was simpel:
rm ext/standard/info.lo
rm main/main.lo
make
su root
apachectl stop
make install
apachectl start
En klaar is Kees, je krijgt op phpinfo() Natasja te zien ipv dat gedrocht!