Php novirzīšana uz lapu. Kā novirzīt lietotāju uz citu lapu

Pieņemsim, ka vēlaties rādīt lapu https://example.com/final.php lietotājiem, kuri apmeklē lapu https://example.com/initial.php. To var izdarīt, izmantojot vairākas PHP, JavaScript un HTML metodes. Šajā rakstā mēs apskatīsim katru no metodēm, kuras varat izmantot, lai novirzītu PHP uz citu lapu.

Šeit ir daži mainīgie, ko izmantosim:

Izmantojot PHP header() funkciju, lai novirzītu URL

Ja vēlaties pievienot novirzīšanu no kezdets.php uz final.php , varat ievietot šādu kodu inicial.php tīmekļa lapā. Tas pārlūkprogrammai nosūta jaunu atrašanās vietas galveni:

Šeit mēs izmantojam PHP funkcijas header(), lai izveidotu novirzīšanu. Šis kods ir jāievieto pirms jebkura HTML vai teksta. Pretējā gadījumā jūs saņemsit kļūdas ziņojumu, ka galvene jau ir nosūtīta. Varat arī izmantot izvades buferizāciju, lai novērstu šo kļūdu, nosūtot galvenes. Šis piemērs parāda šo PHP novirzīšanas paņēmienu darbībā:

Lai veiktu novirzīšanu, izmantojot header() funkciju, funkcijai ob_start() ir jābūt pirmajai funkcijai PHP skriptā. Tas novērsīs galvenes kļūdu rašanos.

Kā papildu pasākumu varat pievienot die() vai exit() tūlīt pēc galvenes novirzīšanas, lai pārējais tīmekļa lapas kods netiktu izpildīts. Dažos gadījumos meklēšanas roboti vai pārlūkprogrammas var nepievērst uzmanību norādei Atrašanās vietas galvenē. Kādi ir iespējamie draudi vietnes drošībai:

Skaidrības labad: die() vai exit() nav nekāda sakara ar novirzīšanu. Tie tiek izmantoti, lai novērstu pārējā tīmekļa lapas koda izpildi.

Pāradresējot uz PHP lapu, ir ieteicams izmantot absolūtos URL, norādot Location galvenes vērtību. Taču darbosies arī relatīvie URL. Varat arī izmantot šo funkciju, lai novirzītu lietotājus uz ārējām vietnēm vai tīmekļa lapām.

JavaScript novirzīšanas koda izvadīšana, izmantojot PHP echo() funkciju

Tas nav tīrs PHP risinājums. Tomēr tas ir arī efektīvs. Varat izmantot PHP echo() funkciju, lai izvadītu JavaScript kodu, kas apstrādās novirzīšanu.

Ja izmantojat šo risinājumu, jums nebūs jāizmanto izvades buferizācija. Tas arī novērš kļūdu rašanos, kas saistītas ar galveņu nosūtīšanu.

Tālāk ir sniegti daži piemēri, kas izmanto dažādas JavaScript metodes, lai novirzītu no pašreizējās lapas uz citu:

Vienīgais šīs novirzīšanas metodes trūkums uz citu PHP vietni ir tas, ka JavaScript darbojas klienta pusē. Un jūsu apmeklētājiem var būt atspējots JavaScript.

HTML metatagu izmantošana novirzīšanai

Lai veiktu novirzīšanu, varat izmantot arī pamata HTML. Tas var šķist neprofesionāli, bet tas darbojas. Un jums nav jāuztraucas par to, ka jūsu pārlūkprogrammā ir atspējots JavaScript vai iepriekš ir nosūtīta galvenes kļūda:

Varat arī izmantot iepriekšējā piemēra pēdējo rindiņu, lai automātiski atsvaidzinātu lapu ik pēc "n" sekundēm. Piemēram, šis kods automātiski atsvaidzinās lapu ik pēc 8 sekundēm:

Secinājums

Šajā rakstā es apskatīju trīs dažādas indeksu php novirzīšanas metodes, kā arī to priekšrocības un trūkumus. Konkrētā izmantojamā metode ir atkarīga no projekta mērķiem.

Draudzīgās projekta komandas tulkojums rakstam “Kā es varu veikt novirzīšanu uz citu URL pirms lapas ielādes PHP”.

Labs slikts

(PHP 4, PHP 5, PHP 7)

galvene — sūtīt HTTP galveni

Apraksts

galvene (virkne $header [, bool $aizvietot = TRUE [, int $http_response_code ]]) : spēkā neesošs

header() tiek izmantots, lai nosūtītu HTTP galveni. » HTTP/1.1 specifikācijā ir detalizēts HTTP galveņu apraksts.

Atcerieties, ka header() funkciju var izsaukt tikai tad, ja klientam vēl nav nosūtīti dati. Tas nozīmē, ka izvadā tam jābūt pirmajā vietā, pirms tā izsaukuma nedrīkst būt HTML tagi, tukšas rindas utt. Diezgan bieži kļūda rodas, ja, lasot kodu ar faila funkcijām, piemēram, include vai request , kodā ir atstarpes vai tukšas rindas, kas tiek izdrukātas pirms header() izsaukšanas. Tādas pašas problēmas var rasties, izmantojot PHP/HTML vienā failā.


Parametru saraksts

Virsraksta rinda.

Ir divas īpašas galvenes. Viens no tiem sākas ar " HTTP/" (reģistrs nav svarīgs) un tiek izmantots, lai nosūtītu HTTP statusa kodu. Piemēram, ja Apache tīmekļa serveris ir konfigurēts tā, ka neesošu failu pieprasījumus apstrādā PHP skripts (izmantojot direktīvu ErrorDocument), iespējams, vēlēsities pārliecināties, vai skripts ģenerē pareizo statusa kodu.

Vēl viens īpašs galvenes veids ir "Atrašanās vieta:". Šajā gadījumā funkcija ne tikai nosūta šo galveni pārlūkprogrammai, bet arī atgriež tai statusa kodu NORĀDĪT(302), ja kods iepriekš nav iestatīts 201 vai 3xx.

Aizvietot

Neobligātais aizstāšanas parametrs nosaka, vai ir jāaizstāj iepriekšējā līdzīgā vai tāda paša veida galvene. Pēc noklusējuma galvene tiks aizstāta, bet, ja norādīsit FALSE , varat norādīt vairākas viena veida galvenes. Piemēram:

Http_response_code

Piespiež HTTP atbildes kodu. Ņemiet vērā, ka tas darbosies tikai tad, ja galvenes virkne nebūs tukša.

Atgriešanās vērtības

Šī funkcija pēc izpildes neatgriež vērtību.

Izmaiņu saraksts Piemēri

1. piemērs Lejupielādes dialoglodziņš

Ja vēlaties brīdināt lietotāju saglabāt nosūtītos datus, piemēram, ģenerētu PDF failu, varat izmantot galveni » Content-Disposition, kas aizstāj ieteicamo faila nosaukumu un liek pārlūkprogrammai parādīt lejupielādes dialoglodziņu.

2. piemērs Direktīvas darbam ar kešatmiņu

PHP skripti bieži ģenerē dinamisku saturu, kas nedrīkst būt kešatmiņā klienta pārlūkprogrammai vai nevienai starpprogrammatūrai, piemēram, starpniekserveriem. Varat piespiest atspējot kešatmiņu daudzos starpniekserveros un pārlūkprogrammās, nododot galvenes:

Piezīme:

Dažos gadījumos pārlūkprogramma nesaglabās jūsu lapas kešatmiņā, pat ja neesat nokārtojis šīs galvenes. Pārlūkprogrammām ir noteikti iestatījumi, ar kuriem lietotājs var mainīt parasto kešatmiņas gaitu un to atspējot. Jums vajadzētu ignorēt visus iestatījumus, kas varētu ietekmēt skriptu kešatmiņu, nosūtot iepriekš norādītās galvenes.

Turklāt gadījumos, kad tiek izmantotas sesijas, varat iestatīt konfigurācijas iestatījumus session_cache_limiter() un session.cache_limiter. Šos iestatījumus var izmantot, lai automātiski ģenerētu kešatmiņas vadības galvenes.

Piezīmes

Piezīme:

Galvenēm varēs piekļūt un tās tiks rādītas tikai tad, ja jūsu izmantotais SAPI tās atbalsta.

Piezīme:

Lai novērstu šo problēmu, varat buferizēt skripta izvadi. Šajā gadījumā visi izvades dati tiks buferizēti serverī, līdz tiek dota skaidra komanda datu pārsūtīšanai. Jūs varat kontrolēt buferizāciju manuāli, izmantojot funkcijas ob_start() un ob_end_flush() vai iestatot direktīvu izvades_buferizācija php.ini konfigurācijas failā vai attiecīgi pielāgojot servera konfigurāciju.

Piezīme:

HTTP statusa galvenes rinda vienmēr vispirms tiks nosūtīta klientam neatkarīgi no tā, vai atbilstošā header() funkcijas izsaukums bija pirmais vai nē. Šo stāvokli var pārrakstīt, izsaucot header() ar jaunu statusa rindiņu jebkurā laikā, kad var nosūtīt HTTP galvenes.

Piezīme:

Programmā Microsoft Internet Explorer 4.01 ir kļūda, kas neļauj tam darboties. To nevar apiet. Arī Microsoft Internet Explorer 5.5 ir šī kļūda, taču to jau var novērst, instalējot 2. servisa pakotni vai jaunāku versiju.

Piezīme. Ja ir iespējots drošais režīms, skripta uid tiks pievienots valstība daļas WWW-Autentificēt galvene (izmanto HTTP autentifikācijai).

Piezīme:

HTTP/1.1 specifikācijai ir nepieciešams absolūts URI kā » Atrašanās vieta: arguments, tostarp shēma, resursdatora nosaukums un absolūtais ceļš, lai gan daži klienti spēj pieņemt relatīvos URI. Jūs varat izveidot absolūto URI pats, izmantojot $_SERVER["HTTP_HOST"], $_SERVER["PHP_SELF"] un dirname() :




Tops