Autor Zpráva
LastHunter
Profil *
Ahoj,
bohužel tuto část PHP naprosto neovládám a potřebuji udělat toto:

Pracuji na třídě pro práci s CSS, která ho má "minifikovat" (to jsem již zvládnul, inspiroval jsem se Jakubem Vránou) a která má nahradit všechny výskyty url('cesta-k-obrazku') přímo za base64 obsah těch obrázků (HTML i CSS to umožňují), což se hodí pro nasazení na produkční server - naprostá minimalizace počtu HTTP požadavků.

Má představa je taková - namatchují se všechny výskyty url('cokoli'), pak se vezme to 'cokoli' jako cesta k souboru, v PHP udělám base64_encode obsahu toho souboru a nahradím tím to 'cokoli' v původním CSS. Zopakuji to pro všechny výskyty.

Ví někdo, jak na to? :) Díky moc.

Ondřej Mirtes
Majkl578
Profil
myslim, ze to by nemel byt problem:

$data = "background: url('http://diskuse.jakpsatweb.cz/img/button_code.gif') no-repeat;";

$data = preg_replace_callback('~url\(\'([^\)]+)+?\'\)~i', function($match) {
	$imgInfo = getimagesize($match[1]);
	return 'url(data:' . $imgInfo['mime'] . ';base64,' . base64_encode(file_get_contents($match[1])) . ')';
}, $data);


prevede to primo na spravny mime obrazku. je potreba, aby bylo v nastaveni povoleno allow_url_fopen. vyzaduje php 5.3 (kvuli closure, pro starsi php potreba prevest na create_function).
uestla
Profil
Majkl578
Ten regulár není nejšťastnější vzhledem k následující a jí podobným konstrukcím (i jiným detailům - tvůj akceptuje jen apostrofy):

<style>
@import url('jiny_styl.css');
</style>


Upravil bych jej na
$regexp = '~url\(([\'"])([^\)]+\.(?:png|jpe?g|gif))\\1\)~i';


V callbacku je samozřejmě třeba nahradit $match[1] za $match[2].

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: