Hrnečku vař v PHP

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: #L.u.k.@.s
Datum: 25.2.2010
Hodnocení/Hlasovalo: 0/0

Jak obejít limit freehostingu. Generování souborů na serveru.

Nedávno jsem si založil web na nejmenovaném freehostingu a začal jsem si hrát s PHP. Zkoušel jsem si různou syntax jazyka, protože jsem s ním dlouho nedělal. Později jsem také začal experimentovat se zapisováním do souboru. Nejdříve jsem do něj zapisoval „Hello Word!“, pak jsem si osvojil práci se smyčkami a naučil jsem se napsat tyto dvě slova 10x pod sebe. Vytvořil jsem tedy soubor o velikosti 138 bajtů. Chtěl jsem také vyzkoušet rychlost zapisování pomocí PHP, tak jsem tedy vytvářel soubor o velikosti cca 5 MiB a sledoval proces kynutí v FTP klientovi. Zápis souboru o zmíněné velikosti byl takřka spontánní! Chtěl jsem, aby byla rychlost měřitelná, začal jsem zapisovat soubor o velikosti 100 MiB, no a za pár sekund byl soubor na světě *. Pak jsem pokračoval v mém experimentování a udělal jsem začátečnickou chybu a to v takovémto smyslu:
while(5<6) {/* Zápis do souboru */}
Co se stalo? Soubor začal kynout ! a to rychle 15 MiB,40 MiB,….,150 MiB ! Po dosažení cca 170 MiB byl skript patrně ukončen.
Později jsem zjistil, že je zápis rychlejší s použitím bufferu a stabilnější při zápisu do více oddělených souborů. Experimentálně jsem zjistil, že ideální velikost bufferu je od 1 do 100 kiB.
Napadlo mě, že by se takhle dala snadno vyzkoušet skutečná hranice dat, které pojme freehosting. Mýlil jsem se! Začal jsem zapisovat 750,1000,1250,1500 MiB a pořád nic.
Po zaplnění provozovatelem stanovené hranice 500 MB již nebylo možno nahrávat na server další soubory pomocí FTP. Generování souborů s libovolným obsahem v PHP bylo však stále možné.
for($c=0;$c<$_GET["count"];$c++){
$fileName = $c.$_GET["name"] or die("No such file.");
unlink($fileName);
$fh = fopen($fileName, 'w') or die("can't open file");
$data = "";

for ($a=0;$a<1024*$_GET["size"];$a++) {
$data=$data."a";
}

for ($x=0;$x<1024;$x++) {
fwrite($fh, $data);
}
fclose($fh);
}
Skript spouštím takto:
skript.php?size=5&name=soubor&count=15
Vytvoření patnácti souborů o velikosti 5 MiB se jménem Nsoubor.

Napadlo mě, že tímto způsobem by šel jednoduše obejít limit webhostingu. Nejdříve bych vygeneroval jeden velký soubor (např. 1 GiB) a pak bych v něm začal hospodařit s pomocí PHP. Třeba bych si naprogramoval vlastní vnořený souborový systém.

*Rychlost tvorby souboru – záleželo jak kdy, někdy 10 vteřin, jindy se zas nějak server „seknul“.

#L.u.k.@.s