
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:
- Soubor načíst v PHP a poslat ho s odpovídající hlavičkou
- Nastavit MIME typ na serveru pro námi zvolenou extenzi
- Ponechat souboru extenzi
.js
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.