Jump to content
php.lv forumi

$_SERVER problēma


Joyride

Recommended Posts

Ir TRequest klase, kura kalpo ka reģistrs visiem superglobāļiem (GET, POST, COOKIE, SERVER)

 

class TRequest
{
$SERVER = array();

public function __construct()
{
	$this->SERVER = $GLOBALS['_SERVER'];
	unset($GLOBALS['_SERVER']);
}
}

Lieta tāda, ka ja PHP konfigurācijā "auto_globals_jit" ir uzstādīts uz "On", tad:

 

"the SERVER and ENV variables are created when they're first used (Just In Time) instead of when the script starts."

Šādā gadījumā, TRequest::__construct metodē $GLOBALS['_SERVER'] ir neeksistējošs mainīgais, tā arī ir problēma, kuru gribu atrisināt.

Viens variants ir kautkur ārpus visām klašu metodēm un funkcijām (piem. skripta sākumā) likt PHP izveidot šo mainīgo kaut vai šādi:

 

$_SERVER['dummy'] = 1;

... un tad izveidot Request klasi. Vai ir vēl kāds veids to panākt, nepiesārņojot kodu ar šādu paņēmienu?

Link to comment
Share on other sites

$this->SERVER = $_SERVER;

?

 

It kā taču vajadzētu strādāt, jo tu akseso $_SERVER, tātad izmanto.

 

 

Bet vispār - man kaut kā neliekas laba doma unsetot šos globālos mainīgos. Ja nu kāds third party scripts tos izmanto ?

 

Kāpēc vispār taisi tā ? Kāds praktisks iemesls ?

Link to comment
Share on other sites

andrisp - Paldies! $GLOBALS['_SERVER'] nestrādāja, bet $_SERVER strādā!

 

Unset globālajiem taisu tādēļ, lai programmētājs būtu spiests lietot Request klasi, lai piekļūtu šiem mainīgajiem, jo pirms tam vajag veikt dažādus drošības pasākumus, piem. strip_tags, vai stripslashes, atkarībā no mainīgā + vēl rewrite url funkcionalitāte (nevis $_GET['module'], bet, piem. $REQUEST->module, $REQUEST->lang, $REQUEST->param('id') utt.) un daudzas citas lietas. Vārdu sakot, vienots interfeiss. Bez tam tiks lietots custom sesiju klase, tā kā par $_SESSION arī var aizmirst.

Pagaidām netiek izmantots neviens 3rdparty skripts. Ja būs vajadzība pēc kāda, tad veikšu mazas izmaiņas :)

Link to comment
Share on other sites

×
×
  • Create New...