Diskuze: file_exists chyba
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Doporučuji funkci file_exists()
k tomuto účelu nepoužívat.
Je zbytečné se ptát na existenci souboru s třídou před vytvářením
instance a je to vlastně i špatně.
V PHP to dost dobře jinak nejde, jedině handlovat ten fatal error co vyvolá autoloader a to nebylo úplně průzračné. Funkce file_exists() se samozřejmě indexuje, takže to není ani pomalé. Spíše by mě zajímalo, proč mu to nejede, Máš nějaký nápad?
Že nejde? Tak si zkus tohle:
<?php
function __autoload($class) {
if (!@include("$class.class.php")) throw new Exception("Třída $class neexistuje");
}
try {
$a=new NonExistClass();
echo "OK\n";
} catch (Exception $e) {
echo $e->getMessage()."\n";
}
Už jsem to vyřešil tak, že jsem prohnal proměnou s názvem objektu funkci trim. Musely tam být bílé znaky.
Přišel jsem na to tak, že jsem kombinoval "@" a "include/require". A jedna
z těch kombinací udělala přesně to, co jsem potřeboval.
@include()
vrací při neúspěchu false
a nedělá
nic víc.
Jinak je dost nebezpečné vytvářet objekty podle názvu z dat od uživatele.
Pokud proměnnou $kontroler bereš z URL, je dobré ji ošetřit, např.
$kontroler=basename($kontroler);
Zobrazeno 8 zpráv z 8.