Předsunutý HTML kód

Předsunutý HTML kód
« kdy: 20. 09. 2019, 15:40:17 »
Dobrý den,

pomocí PHP konfigurační proměnné auto_prepend_file v php.ini podstrkuji HTML kód.

On se ale podstrčí předsunutě ve zdrojovém kódu úplně na začátek ještě před deklaraci HTML dokumentu. Problém je v tom, že tohle podstrčení HTML kódu např. bez HTML značek čistě text "neco" se zničí struktura HTML kódu, protože před deklarací dokumentu nemá žádný HTML kód ani jakýkoliv text zřejmě co dělat.

Já se tedy ptám, jak je možné v praxi využít php konfiguraci auto_prepend_file v praxi, aniž by se rozbil web?

Děkuji všem za tipy, jak by to šlo vyřešit.


RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Předsunutý HTML kód
« Odpověď #1 kdy: 20. 09. 2019, 16:04:38 »
O co ti jde??

auto_prepend_file slouzi na vykonani skriptu pred hlavnim skriptem - muzes si tam treba nainstalovat ruzne hooky ktere treba upravi obsah vystupu, viz output buffering:

https://www.php.net/manual/en/book.outcontrol.php a hlavne ob_start: https://www.php.net/manual/en/function.ob-start.php (pokud neplanujes pouzit i auto_append_file, tak musis filtr definovat jako callback funkci, ktera se automaticky provede pri ukonceni hlavniho skriptu.

Re:Předsunutý HTML kód
« Odpověď #2 kdy: 20. 09. 2019, 20:35:40 »
Ono asi podstrkovat pouze HTML nepůjde, protože by ten kód vždy byl hozen na začátek dokumentu ještě před počáteční značku HTML a rozbíjelo by to jen webové aplikace.

Člověče, už jsem na funkci ob_start(); párkrát narazil, ale až teď jsem pochopil jak funguje. Teoreticky, kdybych se ještě naučil regulární výrazy tak by mi to možná i mohlo pomoci. Děkuji ti za velmi užitečný komentář a pomoc.

Re:Předsunutý HTML kód
« Odpověď #3 kdy: 21. 09. 2019, 10:38:36 »
Člověče, už jsem na funkci ob_start(); párkrát narazil, ale až teď jsem pochopil jak funguje. Teoreticky, kdybych se ještě naučil regulární výrazy tak by mi to možná i mohlo pomoci. Děkuji ti za velmi užitečný komentář a pomoc.

Output buffering má ale i své stinné stránky. Mimo jiné musí bufferovat výstup do paměti a neodesílá ho v průběhu zpracování, ale až na konci scriptu. Pro malé scripty a malé výstupy nepocítíte rozdíl. U déle běžících scriptů a větších výstupů to je docela zásadní. Vznikají pak mj. problémy s webservery a proxy servery, které bez výstupu počítají timeout. (Timeout, když zvýšíte, zase oslabujete bezpečnost)... Takže pokud output buffering používat, dělal bych to na odděleném php-fpm poolu, kde by byla jasná pravidla pro scripty a timeouty.

Regexem můžete obsah vložit i na webserveru, např. nginx umí regex najít a zaměnit. Pokud by to dostačovalo, bylo by to asi o něco čistší řešení, než bufferovat a zvyšovat timeouty.

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Předsunutý HTML kód
« Odpověď #4 kdy: 21. 09. 2019, 12:22:32 »
Pro output buffering jsem zatím nenašel praktické využití s výjimkou případu, že nějaká užitečná funkce či knihovna třetí strany cpe nějaká data přímo na výstup.


Re:Předsunutý HTML kód
« Odpověď #5 kdy: 22. 09. 2019, 00:01:54 »
Citace
Děkuji všem za tipy, jak by to šlo vyřešit.
Nic ti vyřešit nepomůžu, ono to primárně není k předsunutí HTML kódu.

Prepend jsem používal v jednom případě, kdy byl uživatel autorizovaný proti NTML doméně. Bylo to na Apache asi s mod_auth_sspi. A on ten modul vracel kromě jména uživatele i heslo v něčem jako $_SERVER["password"]. To se mi nelíbilo, tak jsem do prepend dal odmazání takovéhle proměnné, aby to žádný další *.php neviděl.

A je asi kupa dalších věcí, které se tam mohou dát, aby to všechny skripty měly k dispozici.

RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Předsunutý HTML kód
« Odpověď #6 kdy: 22. 09. 2019, 10:15:30 »
Ja pouzivam ten prepend/append pro zpracovani jednoho webu - puvodni data byli u predesleho poskytovatele v nejakem CMS, ktery se editoval jako wysiwyg - klient nebyl spokojen s cenou, takze chtel odejit - ale neexistovala moznost exportovat uzivatelska data, takze se udelal rekurzivni wget a mame staticky mirror. Nad tyhle data se prave priplacne muj PHP kod z obou stran, ktery pak algoritmicky edituje puvodni HTML mirror - zejmena odstranuje copyright na CMS, nejake jejich interni admin linky.. a celkove kultivuje ten generovany kod. Neni to web, kde by stalo za to resit stovku podstranek prepisovanim.. tak jsem to vyresil takto. Na blby problem, blba zaplata.

Re:Předsunutý HTML kód
« Odpověď #7 kdy: 25. 09. 2019, 18:10:39 »
Regexem můžete obsah vložit i na webserveru, např. nginx umí regex najít a zaměnit. Pokud by to dostačovalo, bylo by to asi o něco čistší řešení, než bufferovat a zvyšovat timeouty.

To je pech, na serveru je apache s nginx neumím a nemůžu (též nechci) měnit. Že by apache něco takového uměl jsem se nedočetl. Našel jsem jen informaci o nějakém prehistorickém modu, který něco takového umí.

Re:Předsunutý HTML kód
« Odpověď #8 kdy: 25. 09. 2019, 19:10:01 »
To je pech, na serveru je apache s nginx neumím a nemůžu (též nechci) měnit. Že by apache něco takového uměl jsem se nedočetl. Našel jsem jen informaci o nějakém prehistorickém modu, který něco takového umí.

To je pech, Apache to má pořád :)
http://httpd.apache.org/docs/2.4/mod/mod_substitute.html

Kit

  • *****
  • 704
    • Zobrazit profil
    • E-mail
Re:Předsunutý HTML kód
« Odpověď #9 kdy: 25. 09. 2019, 20:11:54 »
Ja pouzivam ten prepend/append pro zpracovani jednoho webu - puvodni data byli u predesleho poskytovatele v nejakem CMS, ktery se editoval jako wysiwyg - klient nebyl spokojen s cenou, takze chtel odejit - ale neexistovala moznost exportovat uzivatelska data, takze se udelal rekurzivni wget a mame staticky mirror. Nad tyhle data se prave priplacne muj PHP kod z obou stran, ktery pak algoritmicky edituje puvodni HTML mirror - zejmena odstranuje copyright na CMS, nejake jejich interni admin linky.. a celkove kultivuje ten generovany kod. Neni to web, kde by stalo za to resit stovku podstranek prepisovanim.. tak jsem to vyresil takto. Na blby problem, blba zaplata.

K tomuto účelu používám XSLT šablony. Je to snadné a rychlé, dají se měnit elementy, jejich atributy, přehazovat bloky apod.