KomputilojProgramaro

PHP malloka variablo en la funkcio. Faru malloka variablo en PHP

Por krei kompletan retejon, kiu havas larĝan funkciojn vi bezonas scii multe. Sed kion povas fari lin vere unika - estas PHP. La tutmonda variablo en la programlingvo ne estas uzata tre ofte, sed kelkfoje scii kiel funkcias, kelkfoje estas necesa. Tio estas la studo de kio ĝi estas kaj kiel ĝi funkcias, ni intencas fari en ĉi tiu artikolo.

amplekso

Do nomu la kunteksto en kiu la variablo kaj decidita. Plejofte, ili havas nur unu medio. Kiam PHP tutmonda variabloj ŝarĝis el aliaj dosieroj, do eble inkluziva (inkludas) kaj postulata (postulas).

Defaŭlte, ili limigas al la loka funkcio medio. Kaj kiel fari variablo vidis dosierojn en ĝia limoj, kio povus pli kaj uzi? Al ĉi tiu fino, kaj estas provizita en la PHP tutmonda variabloj.

La ŝlosilvorto "tutmonda"

Kaj ĉi tie estas kiel deklari tutmonda variablo por PHP? En atingo tiun celon helpos al ni la vorton "tutmonda". Oni Devas meti antaŭ la variablo kiu vi volas fari tutmondan (narimer, tutmondaj «La Variablo").

Post la efektivigo de tia indiko, la datumoj povos labori kun ajna dosiero. Se ie ekzistas referencoj al tiu variablo, la programo ĉiam atentu la tutmonda versio.

Kial tia stranga lingvo? La fakto ke samtempe povas esti lokaj versioj. Sed ili estos disponebla ekskluzive por tiuj dosieroj kie anoncis. Kaj por la cetero agos tutmonda variabloj PHP klaso. Tial vi devas atenti. Kaj tio ne ekzistis dubo, jen ekzemplo de tio, kion ili aspekti: tutmonda al.

Ĉar se unu dosiero havos aliron al kelkaj variabloj, ĝi tie mi ilin konfliktas. Sed ni ne povas diri por certa - loka aŭ malloka variablo legas aŭ tute mankas. Do, se ĝi estas registri en funkcio, ĝi devus esti problemo. Sed la uzo de variablo por ĝia limoj esti problema. Tial, la strukturo de la redakcio de la kodo necesa por proksime monitori kaj certigi ke nenie estas tie eĉ antaŭkondiĉo por la diris konflikto ekestis.

Alia personigo de la registradon

Ĉu eblas en PHP por krei tutmondan variablo alimaniere? Jes, eĉ ne unu. Unue, ni konsideru la $ GLOBALS. Tio estas asocieca tabelo. La ŝlosilo al tio - estas la nomo. Kiel la valoro de la enhavo agas kiel tutmonda variablo. Ni notu, ke la tabelo post la anonco ekzistas en ajna medio. Tio donas kialon por kredi superglobal. Aspektas tiel: $ GLOBALS [ 'variablo'].

Antaŭdifinita / superglobals

En ĉiu programlingvo estas kelkaj nomoj, kiuj estas ĉartita por iuj de liaj funkcioj. Tial, por krei en PHP tutmonda variabloj de la sama nomo ne funkcios.

Tiu programlingvo havas propran karakterizaĵoj. Do, gravas ke la predefinido variabloj tie ne instali "super", tio estas, ili ne estas disponeblaj en ĉiuj lokoj. Kiel mi ripari ĝin? Por predefinido variabloj estis disponeblaj ĉe iu loka areo, ĝi devas esti deklarita jene :. Global «Variablo" Ŝajnas esti la sama kiel antaŭe diris, ĉu ne? Estas vere, sed ne tute. Ni rigardu jam "batalante" ekzemplon:

  • tutmonda $ HTTP_POST_VARS;
  • echo $ HTTP_POST_VARS [ 'nomo'].

Vi sentas la diferencon inter ili? Notu ke en PHP tutmonda variabloj ne nepre devas esti uzata en la funkcio. Ĝi eĉ povas esti metitaj en dosiero kiu estas inkludita en ĝi.

Ligiloj kaj sekureco

Kiel vi povas vidi, en PHP krei malloka variablo ne estas problemo. Sed ekzistas aparta relativaj ligiloj? Jes, povas esti neatenditaj konduto uzinte tutmonda. Sed antaŭ tio, iom fonrakonto.

En versio 4.2.0 la directiva defaŭlte register_globals ŝanĝiĝis de la ŝtato al ekstere. Por plej uzantoj, tio ne tre grava, sed vane. Ja ĝi rekte tuŝas la sekurecon de la evoluintaj produkto. Se vi bezonas por fari la variablo tutmonda, PHP-direktivon pri ĉi tiu parametro ne estas rekte tuŝitaj. Tamen, malĝusta uzo povas jam krei precedencoj sekureco.

Do se register_globals estas ŝaltita, antaŭ la ekzekuto de la skribita kodo inicializado la malsamaj variabloj kiuj estas necesaj, ekzemple por sendi HTML-formojn. Tial, oni decidis turni ĝin.

Kial estas la stato de tiu direktivo en php malloka variablo devas tre? La fakto estas ke, kiam la stato de la programistoj ne ĉiam kun certeco povus sin respondi la demandon de kie gxi estis. Unuflanke, estas pli facile skribi kodon. Sed sur la alia - estas sekureca risko. Tial, por eviti erarojn, kaj ankaŭ datumoj miksaĵo kaj direktivo estas malebligita.

Nun ni rigardu ne / sekura kodo, kaj ankaŭ kiel detekti kazojn kie la anonco de la tutmonda PHP variablo estas akompanita per provoj ĉe manipulado kun datumoj. Tiu estas necesa por krei ne nur bela, sed ankaŭ konstante laboras retejoj, fendi la unua disponebla persono.

malica kodo

Ni starigis tiu variablo estas vera por tiuj, kiuj estas rajtigitaj:

se (authenticate_user ()) {
$ Rajtigi = vera;
}

se ($ rajtigi) {
inkluzivas "/highly/sensitive/data.php";
}

En ĉi tiu stato, la variablo povas esti aro aŭtomate. Konsiderante, ke la datumoj povas simple esti anstataŭigita, kaj la fonto de ilia origino ne estas agordita, do iu ajn povas pasi tian provon kaj ŝajnigi esti alia persono. Se dezirata, la atacante (aŭ simple scivola sed nesperta persono) povas esti difektita, nia logiko.

Se ni ŝanĝas la valoron de la directiva, ĉi kodo funkcios korekte, kiel ni postulis. Sed inicialización de variabloj estas ne nur bona tono en la programado, sed ankaŭ donas al ni certan garantion de la stabileco de la skripto.

Fidinda versio de la kodo

vi povas malŝalti aŭ labori direktivojn, aŭ preskribi pli kompleksa kodo por atingi tiun celon. Ekzemple, tiel:

se (isset ($ _ SESIO [ 'uzantonomo'])) {

eĥo "Saluton {$ _ SESIO [ 'uzantonomo']} ";

} Alie {

eĥo "Saluton Gasto
";
echo "Bonvenon uzanto!";

}

Faru anstataŭigo en ĉi tiu kazo, estos malfacila. Sed ankoraŭ - eblas. Por fari tion, vi devas prizorgi, ke la rapida respondo iloj estis provizita. Se vi volas inkluzivi tutmonda variabloj en PHP, vi povas uzi la sekvajn ilojn: se ni scias kion la gamo estas la valoro akirita, eblas registri skripton por kontroli tion kun matĉo. Kompreneble, ĝi ankaŭ ne garantias plenan protekton kontraŭ anstataŭigo valorojn. Sed tio tro da ebloj signife kompliki.

Trovas provoj sin aliformas

Ni vidu, kiel vi kompreni skriban pli frue. En PHP tutmonda variabloj en la funkcio kiu estos donita malsupre, vi bezonos por deklari vin mem. Ni povas diri ke ĉi tiu estas speco de hejmtaskoj en la asimilación de la leciono temo. Jen la kodo:

se (isset ($ _ kuketon [ 'C_COOKIE'])) {
} Elseif (isset ($ _ GET [ 'C_COOKIE']) || isset ($ _ POST [ 'C_COOKIE'])) {

poŝto ( "administrarot@example.com", "Atenton, la skripto estis registrita provo ĉe ŝtelo kaj manipulado kun datumoj", $ _SERVER [ 'REMOTE_ADDR']);
echo "Estis rompita sekureco aŭ provi tion fari sciigita la Administranto.";
eliro;

} Alie {
}
?>

Nun klarigo al tio. Parte C_COOKIE venas al ni de fidinda fonto. Por plene kontenta laŭ la atendita rezulto, ni kontrolu lian valoron kaj sciigi la administranton en kazo de problemoj. Se ĝi ne venas, do neniu ago kaj ne bezonis fari. Vi devas kompreni, ke simple malŝalti register_globals direktivo ne faras via kodo estas sekura. Sekve, ajna variablo kiu ricevas skribo de la uzanto, devas esti kontrolata de la atendita valoro.

konkludo

Jen, ĝenerale, kaj ĉio vi bezonas scii pri la tutmonda variabloj sukcese kaj sekure uzi ilin en sia laboro. Kompreneble, por diri ke estas plena garantio, ke neniu uzos ilin ne povas - siegxontoj konstante plibonigi sian metodoj kaj kapabloj. Estas do dezirinde limigi la maksimuma uzo de tutmondaj variabloj en la kodo. Feliĉe, la strukturo kaj dezajno trajtoj de tiu programlingvo povas atingi tiun celon. Bonŝancon!

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 eo.delachieve.com. Theme powered by WordPress.