18. Extenze Combiscriptové knihovny

Ilustrační obrázek k článku: Extenze Combiscriptové knihovny
Abychom naši funkci faktoriál mohli používat jak v .js tak .php programu, tak ji potřebujeme uložit do knihovny. A v tomto článku si ukážeme jakou taková knihovna bude mít extenzi.

Nejhezčí by asi bylo určit si svoji vlastní extenzi, třeba .cs. Otázka ale je, zda se s takovouto extenzí smíří PHP i JavaScript?

PHP

Z pohledu PHP potřebujeme, aby šel soubor vkládat pomocí include nebo require. A to není problém – PHP umožňuje vkládat soubory libovolných extenzí.

Možná vás napadne: kde je tohle chování v manuálu vlastně popsané? Většinou přece knihovny mají koncovku .php. Ale podívejme se na první větu dokumentace k include: „The include expression includes and evaluates the specified file.Není tam ani slovo o požadované extenzi.

Proč se ale běžně používá právě .php? Je to kvůli serveru (např. Apache), který takový soubor v případě přímého přístupu zpracuje jako PHP. Díky tomu ho nevypíše jako obyčejný text a neukáže třeba uložená hesla. Jen upozorňuji – tohle není zrovna spolehlivá ochrana.

JavaScript

U JavaScriptu potřebujeme, aby šel soubor načíst pomocí atributu src v tagu SCRIPT. Zapsat ho tam můžeme – ale bude to fungovat?

Prohlížeč totiž očekává, že mu server k souboru pošle správný MIME typ, tedy text/javascript. Bez něj skript nebude spuštěn. A správný MIME typ můžeme zajistit několika způsoby:

Načítat JS přes PHP ale podle mě porušuje zadání. Cílem je, abychom tentýž soubor načítali jak v PHP, tak v JavaScriptu (bez serverového jazyka). Pokud bychom jej v PHP načítali a měnili mu hlavičky, rovnou bychom ho mohli i transpilovat. Toto tedy vylučuji.

Použít třeba extenzi .cs a přidat k ní MIME typ (např. pomocí AddType v .htaccess) vypadá docela elegantně. Ale narážíme na problém: některé hostingy nedovolují měnit hlavičky, což by část uživatelů vyloučilo ze hry. Ani tohle řešení se mi nezdá ideální.

Ponechat extenzi .js by fungovalo, ale začne se nám to plést s běžnými JS soubory. Co s tím?

Naštěstí – to, že soubor končí .js, neznamená, že nemůže mít před tím ještě něco dalšího. Tím, že přidáme mezičlánek, můžeme naznačit, že jde o „kombinovaný“ soubor. A právě takovou cestu volím. Definuji:

Knihovny CombiScriptu končí .php.js

Například: util.php.js

V příštím díle si ukážeme, jak naši funkci uložit do knihovny tak, aby šla vkládat jak do JS, tak do PHP. Tj. jak zařídit, aby úvodní <?php nerozhodilo JavaScript. Zatím můžete přemýšlet, jak by se to dalo udělat.

Předchozí