Een keer vereisen werkt niet. Hoe zorg ik ervoor dat het vereiste kenmerk voor invoer werkt in oudere versies van IE? Als opnemen of vereisen niet werkt

Een van de leukste en handigste functies van php is het koppelen van een ander bestand. Een site heeft bijvoorbeeld een hoofdmenu, een onderste menu en daartussen de inhoud van de pagina zelf. En bijvoorbeeld 10 pagina's van de site gebruiken een onderste menu. Op een gegeven moment moest het veranderd worden. In html zou je handmatig wijzigingen aanbrengen in elk afzonderlijk bestand, maar met php kun je het werk met de site aanzienlijk vereenvoudigen! De onderste menucode kan in een apart bestand staan, en op elk van de 10 pagina's kunt u dit aparte bestand gewoon opnemen! Dat wil zeggen, alle wijzigingen moeten nu alleen worden aangebracht in het bestand met het menu, en op 10 andere wordt het al weergegeven met de wijzigingen.

De betekenis van verbinden in php in eenvoudig Russisch:

1.php bestand
Topmenu

2.php bestand
Onderste menu

Voorbeeld.php bestand
Verbind bestand 1.php
Pagina inhoud
Verbind bestand 2.php

Als resultaat van het verwerken van het bestand example.php, wordt het volgende weergegeven:
Topmenu
Pagina inhoud
Onderste menu
Dienovereenkomstig, om iets in het onderste menu te veranderen, hoeft u alleen wijzigingen aan te brengen in het 2.php-bestand

Het pad naar het bestand

Het bestand is verbonden volgens het opgegeven pad naar het bestand. Er zijn twee opties voor het pad: relatief en absoluut. Relatief is een indicatie van het pad naar het opgenomen bestand ten opzichte van het bestand met de verbindingsinstructie. Absoluut - specificeert het volledige pad naar het opgenomen bestand.

PHP-code

// voorbeeld van een relatief pad
omvatten "include / your_file.php"; // het bestand staat in de include-map, die zich in dezelfde map bevindt als het bestand met de verbinding

// voorbeeld van een absoluut pad
include $ _SERVER ["DOCUMENT_ROOT"]. "/ include / your_file.php"; // $ _SERVER ["DOCUMENT_ROOT"] - geeft de hoofdmap van de site aan

include en include_once

erbij betrekken ()- een constructie die is ontworpen om bestanden in de PHP-scriptcode op te nemen tijdens de uitvoering van het PHP-script. Bij het verwerken van de code wordt de instructie vervangen door de inhoud van het bijgevoegde bestand. Ik stel voor om meteen een voorbeeld te bekijken.

Laten we eens kijken naar het werk van include met twee bestanden als voorbeeld: index.php en tekst.php... Laten we voor de eenvoud zeggen dat ze zich in dezelfde map bevinden.

PHP-code(het dossier index.php)

Echo "Platte tekst in het hoofdbestand";
omvatten "tekst.php"; // neem de inhoud van het text.php-bestand op

?>
PHP-code(het dossier tekst.php)

Echo "De tekst in het include-bestand";

?>
Als resultaat van het werk van het index.php-bestand, wordt het volgende weergegeven:

Platte tekst in het hoofdbestand
De tekst in het include-bestand
Is het niet handig? Door nu de inhoud in het tekst.php-bestand te wijzigen, zal het resultaat van het index.php-werk compleet anders zijn!

Laten we het nu hebben over een ander ontwerp - include_once... Het werkt precies hetzelfde als include, alleen is het later gemaakt en voor die gevallen waarin het bestand niet opnieuw kan worden opgenomen. U bent bijvoorbeeld bang dat u als gevolg van een fout het bestand 2 of meer keer kunt verbinden, wat de onjuiste werking van de pagina zal beïnvloeden en een bijbehorende foutmelding krijgt.

PHP-code

include_once "text.php"; // text.php bestand wordt maar één keer opgenomen

// onderstaande herverbinding wordt niet geteld en weergegeven
// en daarom wordt er geen foutmelding weergegeven
include_once "text.php"; // er zal niks gebeuren

vereisen en vereisen_eenmaal

De instructies required en required_once werken op dezelfde manier als include en include_once, behalve één eigenaardigheid - als het opgenomen bestand niet wordt gevonden, wordt de uitvoering van het script gestopt (het script wordt niet verder gelezen), terwijl include en include_once alleen een waarschuwing weergeven en doorgaan met verdere scriptuitvoering.

Als opnemen of vereisen niet werkt

Om de redenen te begrijpen waarom include niet werkt, stel ik voor om alles stap voor stap te controleren. Hoe duidelijk en oppervlakkig de onderstaande punten ook zijn, controleer alles vanaf het begin.

1. Controleer of uw server en php werken, of de php-code op de site überhaupt werkt
2. Controleer of het include-bestand bestaat
3. Controleer of de bestandsnaam en extensie correct zijn ingevoerd in de verbinding
4. Zorg ervoor dat het meegeleverde php-bestand zich daadwerkelijk bevindt op het adres dat u hebt opgegeven
5. Probeer geen relatief pad op te geven, maar een absoluut pad (volledig pad naar het bestand).

Voorbeeld PHP-code

Voeg "http://www.example.com/include/your_file.php" toe;

// DOCUMENT_ROOT - geeft de hoofdmap van de bron aan
include $ _SERVER ["DOCUMENT_ROOT"]. "/ include / your_file.php";

6. Als uw bestand niet is aangesloten en er wordt geen fout weergegeven, maak dan een bestand aan in de map met het bestand waarmee u verbinding maakt .htaccess met de volgende inhoud:

Php_flag display_errors Aan
of in php-bestand, voordat u verbinding maakt, voegt u de volgende regel in:

Error_reporting (E_ALL);
Zowel de ene als de andere instellingen dwingen de weergave van fouten af

Bedankt voor de aandacht!

0

Ik ben een klein PHP MVC-framework aan het bouwen en hier is mijn structuur

/ app / controllers / modellen / views / templates / config /config.php / core /Controller.php /Router.php /init.php /index.php

mappen Binnenin index.php, wat front-controller is, heb ik deze code nodig init.php /app/core/init.php

app / kernel / init.php

init.php vereist elke basiscontroller en -klasse in de / core-directory, inclusief controller.php en router.php, en hier start index.php ook klassen

Alles werkt tot nu toe goed, omdat ik het heb geverifieerd door een constructor te maken in zowel controller.php als router.php, dus de code in die twee bestanden zal er zo uitzien

app / kern / controller.php

applicatie / kern / router. php

binnen index.php deze echo OK! omdat de klassen correct worden gegenereerd, maar het probleem is wanneer ik config.php wil opnemen in /app/config/config.php van Controller.php die zich in /app/core/Controller.php bevindt met deze code

Telkens wanneer ik dit doe, wordt deze fout geretourneerd

Controller :: include (../ config / config.php): kan stream niet openen: Geen bestand of map in C: \ AppServ \ www \ myapp \ app \ core \ Controller.php op regel 6

Controller :: include (): Kan "../config/config.php" niet openen voor opname (include_path = ".; C: \ php5 \ peer") in C: \ AppServ \ www \ myapp \ app \ core \ Controller .php online 6

Ik denk dat ik de juiste locatie heb gebruikt, ik werk met /app/core/Controller.php en heb /app/config/config.php nodig. Ik ga terug naar dezelfde map met ../

Waarom kan ik het bestand dan niet claimen?

  • 3 antwoorden
  • Sorteren:

    Werkzaamheid

2

Vanuit mijn persoonlijke ervaring zal het gebruik van relatieve bestandspaden op een gegeven moment tot hoofdpijn leiden. Daarom gebruik ik meestal het volledige pad naar het bestand. Het heeft ook het voordeel dat het iets sneller is. Als je dan op een gegeven moment een include-fout krijgt, is het gemakkelijker om de fout te vinden, omdat je het hele pad beschikbaar hebt.

Om absolute paden te kunnen maken, raad ik je aan een constante toe te voegen aan je index.php (frontcontroller) bestand. Iets als het volgende:

Definieer ("ROOT_PATH", realpath (dirname (__ FILE__)). DIRECTORY_SEPARATOR);

Definieert een constante genaamd ROOT_PATH die verwijst naar de directory waar het index.php-bestand zich bevindt, en dus uw rootdirectory. Tegelijkertijd heb ik aan het einde een directory-scheidingsteken toegevoegd om het schrijven van de paden gemakkelijker te maken. Om dit te gebruiken, moet je schrijven.

Require_once ROOT_PATH. "config / config.php";

Bonusinformatie

Maar als je deze aanpak in je controller.php-klasse gebruikt, hangt het af van deze constante. Om dit op te lossen, kunt u het rootpad doorgeven als een variabele in de constructor.

Publieke functie __construct ($ root) (...

En gebruik het dan als volgt:

Publieke functie __construct ($ root) (require_once ($ root. "Config / config.php");)

Ik hoop dat dit helpt.

0

Ik weet niet wat er aan de hand is, maar required_once () heeft geen fout gegenereerd, verwijzend naar zichzelf als include () omdat het verschillende functies zijn, en als dit alle code is, is het foutregelnummer niet hetzelfde als uw required_once () regel, aangezien het 4 zou moeten zijn. Probeer uw webserver opnieuw op te starten en kijk of dat iets oplost, anders maakt u waarschijnlijk een grapje.

Voor elke webontwikkelaar is er nog geen groter probleem dan de volledige compatibiliteit tussen verschillende browsers van zijn product. Waarschijnlijk is dit een van de belangrijkste taken van een goede specialist: ervoor zorgen dat zijn site altijd correct wordt weergegeven in alle browsers.

Parameter verplicht die soms voor invoer wordt gebruikt, werkt niet in het oude IE, wat gewoon niet zo kan worden gelaten. Gepensioneerde gebruikers die nog steeds IE6 gebruiken, zouden net zo gemakkelijk op uw site moeten zijn als gebruikers van de nieuwste versie van Google Chrome. Wie anders dan webontwikkelaars kan voor hen zorgen.

Over pijnlijk, over Internet Explorer

Voor normale browsers zoals Firefox, Opera en Google Chrome is deze taak relatief eenvoudig. Zelfs oudere versies van deze browsers geven html-code even goed weer, tenzij er natuurlijk een nieuwe technologie in wordt gebruikt. Maar om dit te bereiken in browsers van de Internet Explorer-familie, kost het een enorme inspanning.

Elke versie van de Internet Exlorer-browser heeft zijn eigen unieke stompzinnigheid. Wat in IE6 werkt, werkt mogelijk niet goed in IE7 en vice versa. Deze dierentuin van Microsoft heeft zelfs in de nieuwste versie van zijn browser niet kunnen overwinnen.

Ik begrijp niet waarom browserontwikkelaars niet gewoon de W3C-standaarden voor het bouwen van sites kunnen openen en lezen.

Daarom moet ik als webontwikkelaar fungeren als een soort "laag" tussen grillige browsers en sitebezoekers die kennis en een bril nodig hebben. En het is geweldig dat webontwikkelaars tot nu toe zijn geslaagd.

Dus hoe word je verplicht om in oudere versies van IE te werken?

JS komt ons te hulp. Vroeger kon ik er niet tegen, maar nu zie ik geen andere weg meer zonder in de uitgestrektheid van het "juiste" WEB.

Onderstaande oplossing heb ik niet zelf bedacht, maar van een burgerlijke blog gehaald. Aangezien ik hebzuchtig ben en de blog burgerlijk is, zal ik er niet naar linken.

De functie is verantwoordelijk voor alles. fnCheckFields ()... Plaats de JS-code op uw website:

Het wordt meestal aanbevolen om het tussen html-tags te plaatsen HOOFD aan het begin van de pagina, maar ik zou toch aanraden om het helemaal onderaan de pagina te plaatsen vóór de afsluitende tag LICHAAM... JS heeft dus minder invloed op de laadsnelheid van de pagina.

Het invoervenster, waar de vereiste parameter moet worden ingevoerd, zou er in html-taal als volgt uit moeten zien:

Dit script werkt heel eenvoudig: na het klikken op de knop versturen, het script controleert alle invoer op de aanwezigheid van de vereiste parameter en als het deze vindt, kijkt het dienovereenkomstig naar de ingevoerde waarde van dit veld. Als er niets wordt ingevoerd in een dergelijke invoer, wordt een waarschuwingsvenster weergegeven over de noodzaak van invoer. Dienovereenkomstig worden de gegevens nergens heen gestuurd.

Het is ook geweldig dat als je een normale browser hebt die deze parameter al heeft leren begrijpen zoals verwacht, een dergelijk waarschuwingsvenster niet zal verschijnen en de standaardtools voor het verwerken van de vereiste parameter voor je browser zullen werken.

Deel op sociale media netwerken