Category Archives

44 Articles

Apache 2.4.60: Problém se zakódovaným znakem otazníku (?) v URL (%3F) způsobí chybu 403

by Zdeněk Večeřa 0 Comments

Apache od verze 2.4.60 z důvodů zvýšení bezpečnosti „vypíná“ podporu pro znaky „%3F“ v URL, které při routování URL adres prochází přes pravidla modulu mod_rewrite, tedy například RewriteRule. Pokud se vám v takové URL objeví zakódovaný znak otazníku (?), který je reprezentován znaky „%3F“, tak zpracování skončí chybou 403.

Jak rychle otevřít soubor v PHPStormu, aniž byste potřebovali projekt? Vyzkoušejte zjednodušený „LightEdit“ mód

by Zdeněk Večeřa 0 Comments

PHPStorm a celá rodina produktů IntelliJ IDEA je založena na projektech. Pokud ale potřebujete otevřít a rychle upravit jeden konkrétní soubor, tak to projekty bohužel celé zdržují.

V praxi se stane to, že (dle nastavení a instalace) se při otevření nového souboru automaticky vytvoří projekt, do kterého se ve výchozím nastavení zahrne celý váš uživatelský profil ve Windows (c:\Users\Zdenek\). Protože se v něm mohou nacházet stovky a tisíce souborů v různých podadresářích, tak skenování PHPStormem zabere nějaký čas. Do toho ještě může začít vyskakovat třeba okno antiviru, který si vynutí vaši pozornost – protože PHPStorm přistupuje třeba ke cookies webového prohlížeče Google Chrome. A to vše kvůli jednomu souboru.

PHPStorm naštěstí nabízí od verze 2020.1 tzv. „LightEdit“, který dokáže otevřít soubor bez projektu. Nabízí velmi zjednodušené ovládání. Omezené nebo skoro žádné dokončování kódu, bez kontroly kódu a pouze základní zvýrazňování kódu. Pokud ale potřebujete otevřít jeden soubor, provést několik změn a uložit, LightEdit je rychlý způsob, jak to udělat. A nepotřebujete k tomu ani nějaký další editor.

PHP: Proč byste neměli spouštět session_start() automaticky na všech stránkách?

by Zdeněk Večeřa 0 Comments

Nejrůznější PHP tutoriály často radí, abyste na začátku skriptů zavolali session_start(). Bez něj totiž nemůžete pracovat se sessions. To je samozřejmě pravda. Často v návodech chybí důležité upozornění – sessions byste měli nastartovat pouze v případě, kdy s nimi opravdu potřebujete pracovat. Na grafech můžete vidět, jak se díky tomu sníží zátěž serveru, pokud se tím budete řídit.

PHP 8.1 změnilo zpracování SQL chyb, ve striktním režimu nově vyvolá výjimku

Až do PHP 8.0 bylo nastaveno výchozí reportování chyb mysqli_report() na stav MYSQLI_REPORT_OFF. To se změnilo s příchodem PHP 8.1.0, kde je výchozí nastavení kombinace MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT. Autoři PHP se tak rozhodli kvůli tomu, že databázové chyby jsou častý problém, které ovlivňuje běh webových aplikací – nyní se tedy programátoři webů budou muset poprat se všemi chybami.

Rozdíl mezi nastavím lze popsat následovně:

Instalace nejnovější verze Apache 2.4, PHP 8.2, MariaDB 10.11, Memcached, Xdebug a ImageMagick na Windows 10 a 11

Nainstalujte si webový server Apache 2.4 se skriptovacím jazykem PHP 8.2 přímo na svůj počítač s Windows 10 a 11. K tomu si během pár vteřin přidejte databázový server MariaDB 10.11 Memcached.

A pro fajnšmekry tu je návod na „VirtualHost“, který využijete pro více (sub)domén na localhostu. Každá (sub)doména bude mít vlastní DocumentRoot“ a bude dostupná na samostatné adrese, například http://tronlaserarena.cz.localhost a http://devtea.cz.localhost.

Instalace nejnovější verze Apache 2.4, PHP 8.0, MariaDB 10.5 a Memcached na Windows 10

Nainstalujte si webový server Apache 2.4 se skriptovacím jazykem PHP 8.0 přímo na svůj počítač s Windows 10. K tomu si během pár vteřin přidejte databázový server MariaDB 10.5 Memcached.

A pro fajnšmekry tu je návod na „VirtualHost“, který využijete pro více (sub)domén na localhostu. Každá (sub)doména bude mít vlastní DocumentRoot“ a bude dostupná na samostatné adrese, například http://tronlaserarena.cz.h a http://devtea.cz.h.

POZOR: Už existuje novější návod na instalaci Apache 2.4, PHP 8.2, MariaDB 10.11 a Memcached na Windows 10 a 11.

PHP: Pozor na zákeřnou funkci filter_var() a FILTER_VALIDATE_INT. Provádíte validaci nulových hodnot (a nejen těch) správně?

by Zdeněk Večeřa 0 Comments

Chceme ověřit, jestli vstup od uživatele je opravdu jakákoliv hodnota integer. Očekáváme tedy celé záporné číslo, celé kladné číslo nebo nulu. Pokud pro validaci celočíselných hodnot (FILTER_VALIDATE_INT) používáme PHP funkci filter_var(), můžeme se při nevhodně použité podmínce dostat do problémů s nulou.

PhpStorm 2020: Jak vypnout otevírání zdrojových souborů v novém odlehčeném editoru „LightEdit“?

by Zdeněk Večeřa 0 Comments

Nová verze aplikace PhpStorm 2020.1 přinesla spoustu vylepšení a také odlehčený editor nazvaný LightEdit, který slouží pro rychlou úpravu zdrojových souborů. Editor se sice zobrazí bleskově, ale chybí mu pluginy, porovnání obsahu a další užitečné nástroje, na které jste zvyklí z plnohodnotného PhpStormu.

Vývojáři budou LightEdit nadále vylepšovat, pokud vám ale jeho současné funkce nedostačují (prakticky nic neumí) nebo nechcete čekat, můžete se vrátit k původnímu chování – otevírání zdrojových souborů v plnohodnotném PhpStormu.

Internet Explorer nezobrazuje JPG/JPEG obrázky s chybně nastaveným MIME typem

by Zdeněk Večeřa 0 Comments

Možná jste se setkali s problémem, kdy Internet Explorer 8-11 nezobrazil nějaký obrázek s příponou JPG, který byl vytvořený přes PHP. Pokud jste původní obrázek zpracovali přes PHP funkci imagecreatefromjpeg() a následně vytvořili nový obrázek pomocí imagejpeg(), tak vězte, že vytváříte soubor JPEG, nehledě na to, že jste mu dali příponu JPG.

Pokud navíc máte zakázáno očmuchávání MIME typu pomocí této hlavičky:

Jak přesměrovat web z HTTP na HTTPS a přidat WWW?

by Zdeněk Večeřa 0 Comments

Přesměrování všech požadavků z HTTP na HTTPS a přidání www lze snadno provést pomocí .htaccess souboru (Apache) s následujícím obsahem. Myslete na to, že je nejlepší řešení nejprve všechno přesměrovat z HTTP na HTTPS a až poté v dalším kroku přidat WWW.

Měli byste vědět, že uvedený postup vyžaduje také HSTS (HTTP Strict Transport Security, neboli vynucené HTTPS), takže pokud jej někdy v budoucnu budete chtít využít, budete aspoň připraveni.

Přesměrování tedy může vypadat nějak takto: