Require_once ne fonctionne pas comme prévu lors de la demande d'un fichier aux classes. Comment faire fonctionner l'attribut requis pour la saisie dans les anciennes versions d'IE ? Exiger ne fonctionne pas

Pour tout développeur Web, il n'y a actuellement pas de problème plus grave que la compatibilité totale entre navigateurs de son produit. C'est probablement l'une des tâches principales d'un bon spécialiste : veiller à ce que son site Internet s'affiche toujours correctement dans tous les navigateurs.

Le paramètre requis, qui est parfois utilisé pour la saisie, ne fonctionne pas dans l'ancien IE, qui ne peut tout simplement pas être laissé ainsi. Les utilisateurs retraités qui utilisent encore IE6 devraient bénéficier de la même facilité d'utilisation de votre site que les utilisateurs de la dernière version de Google Chrome. Qui, à part les développeurs web, peut s’en occuper.

À propos du point sensible, à propos d'Internet Explorer

Pour les navigateurs normaux, notamment Firefox, Opera et Google Chrome, cette tâche est relativement simple. Même les versions plus anciennes de ces navigateurs affichent tout aussi bien le code HTML, à moins, bien sûr, que de nouvelles technologies soient utilisées. Mais pour y parvenir dans les navigateurs de la famille Internet Explorer, des efforts herculéens sont tout simplement nécessaires.

Chaque version du navigateur Internet Explorer a sa propre stupidité. Ce qui fonctionne dans IE6 peut ne pas fonctionner correctement dans IE7 et vice versa. Microsoft n'a pas pu surmonter ce zoo, même dans la dernière version de son navigateur.

Je ne comprends pas pourquoi les développeurs de navigateurs ne peuvent pas simplement ouvrir et lire les normes du W3C pour la création de sites Web.

Par conséquent, en tant que développeur Web, je dois agir comme une sorte de « couche » entre les navigateurs capricieux et les visiteurs du site qui ont besoin de connaissances et de spectacle. Et c’est formidable que les développeurs Web aient réussi à le faire jusqu’à présent.

Alors, comment puis-je être obligé de travailler dans les anciennes versions d’IE ?

JS vient à notre aide. Auparavant, je ne pouvais pas le supporter, mais maintenant je ne vois pas d'autre chemin sans cela dans l'étendue du WEB « correct ».

Je n'ai pas inventé moi-même la solution donnée ci-dessous, mais je l'ai tirée d'un blog bourgeois. Comme je suis gourmand et que le blog est bourgeois, je ne fournirai pas de lien vers celui-ci.

La fonction fnCheckFields() sera responsable de tout. Placez le code JS sur votre site :

function fnCheckFields(form_obj)( var error_msg = "Veuillez remplir tous les champs obligatoires."; var is_error = false; for (var i = 0; form_obj_elem = form_obj.elements[i]; i++) if (form_obj_elem.type "input" || form_obj_elem.type "text") if (form_obj_elem.getAttribute("required") && !form_obj_elem.value) is_error = true if (is_error) alert(error_msg);

Habituellement, il est recommandé de le placer entre les balises html HEAD au début de la page, mais je recommanderais quand même de le placer tout en bas de la page avant la balise de fermeture BODY. De cette façon, JS a moins d’impact sur la vitesse de chargement des pages.

La fenêtre de saisie dans laquelle le paramètre requis doit être saisi devrait ressembler à ceci en HTML :

Ce script fonctionne très simplement : après avoir cliqué sur le bouton Soumettre, le script vérifie toutes les entrées pour la présence du paramètre requis et s'il le trouve, il regarde en conséquence la valeur saisie dans ce champ. Si rien n'est saisi dans une telle saisie, une fenêtre d'avertissement concernant la nécessité d'une saisie s'affiche. En conséquence, les données ne sont envoyées nulle part.

Il est également formidable que si vous disposez d'un navigateur normal qui a déjà appris à comprendre ce paramètre comme prévu, une telle fenêtre d'avertissement n'apparaîtra pas et les outils standard de traitement du paramètre requis pour votre navigateur fonctionneront.

Partager sur les réseaux sociaux réseaux

L'une des fonctionnalités les plus amusantes et utiles de PHP consiste à inclure un autre fichier. Par exemple, un site Web comporte un menu supérieur, un menu inférieur et, entre eux, le contenu de la page elle-même. Et, par exemple, sur 10 pages du site, le menu du bas est utilisé. À un moment donné, des modifications ont dû y être apportées. En HTML, vous apporteriez manuellement des modifications à chaque fichier individuel, mais php vous permet de simplifier considérablement le travail avec le site ! Le code du menu du bas peut être contenu dans un fichier séparé, et sur chacune des 10 pages, vous pouvez simplement inclure ce fichier séparé ! Autrement dit, toutes les modifications doivent désormais être apportées uniquement au fichier avec le menu, et sur 10 autres, il sera affiché avec les modifications.

La signification de la connexion en php en langage russe simple :

Fichier 1.php
Menu supérieur

Fichier 2.php
Menu du bas

Exemple de fichier.php
Connecter le fichier 1.php
Contenu des pages
Connecter le fichier 2.php

À la suite du traitement du fichier example.php, il sera affiché
Menu supérieur
Contenu des pages
Menu du bas
Par conséquent, pour modifier quoi que ce soit dans le menu du bas, vous devez apporter des modifications uniquement dans le fichier 2.php.

Chemin d'accès au fichier Le fichier est connecté selon le chemin spécifié pour le fichier. Il existe deux options de chemin : relatif et absolu. Relatif - il s'agit d'une indication du chemin d'accès au fichier connecté par rapport au fichier avec les instructions de connexion. Absolu - spécifiant le chemin complet du fichier inclus.

Code PHP

// exemple de chemin relatif
include "include/votre_fichier.php" ; // le fichier est dans le dossier include, qui se trouve dans le même répertoire que le fichier de connexion

// exemple de chemin absolu
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - indique le répertoire racine du site

include et include_onceinclude() sont des constructions conçues pour inclure des fichiers dans le code du script PHP lors de l'exécution du script PHP. Lors du traitement du code, l'instruction est remplacée par le contenu du fichier joint. Je suggère de regarder un exemple tout de suite.

Voyons comment fonctionne include en utilisant deux fichiers comme exemple : index.php et text.php . Pour simplifier le travail, supposons qu'ils se trouvent dans le même répertoire.

Code PHP (fichier index.php)

Echo "Texte brut contenu dans le fichier principal" ;
inclure "text.php" ; // inclut le contenu du fichier text.php

?>
Code PHP (fichier texte.php)

Echo "Texte contenu dans le fichier inclus" ;

?>
Le résultat de l’exécution du fichier index.php sera :

Texte brut contenu dans le fichier principal
Texte contenu dans le fichier inclus
Est-ce vraiment pratique ? Désormais, en modifiant le contenu du fichier text.php, le résultat de index.php sera complètement différent !

Parlons maintenant d'une autre construction - include_once. Cela fonctionne exactement de la même manière que l'inclusion, seulement créé plus tard et pour les cas où le fichier ne peut pas être réinclus. Par exemple, vous craignez qu'à la suite d'une erreur, vous puissiez connecter un fichier 2 fois ou plus, ce qui affectera le fonctionnement correct de la page et la réception d'un message d'erreur correspondant.

Code PHP

Include_once "text.php" ; // le fichier text.php ne sera inclus qu'une seule fois

// les reconnexions ci-dessous ne seront pas prises en compte et affichées
// et cela ne provoquera pas l'affichage d'un message d'erreur
include_once "text.php"; // rien ne se passera

require et require_once Les instructions require et require_once fonctionnent de la même manière pour include et include_once à l'exception d'une seule fonctionnalité - si le fichier d'inclusion n'est pas trouvé, l'exécution du script sera arrêtée (le script ne sera plus lu), tandis que include et include_once simplement imprimer l'avertissement et poursuivre l'exécution du script. Si include ou require ne fonctionne pas Pour comprendre les raisons pour lesquelles include ne fonctionne pas, je suggère de tout vérifier étape par étape. Aussi clairs et superficiels que soient les points ci-dessous, vérifiez tout dès le début

1. Vérifiez si votre serveur et votre php fonctionnent, et si un code php sur le site fonctionne
2. Vérifiez si le fichier d'inclusion existe
3. Vérifiez si le nom et l'extension du fichier sont correctement saisis dans la connexion.
4. Assurez-vous que le fichier php inclus se trouve réellement à l'adresse que vous avez spécifiée
5. Essayez de spécifier non pas un chemin relatif, mais un chemin absolu (chemin complet vers le fichier).

Exemple de code PHP

Incluez « http://www.example.com/include/your_file.php » ;

// DOCUMENT_ROOT - désigne le répertoire racine de la ressource
include $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. Si votre fichier ne se connecte pas et qu'aucune erreur ne s'affiche, alors dans le répertoire contenant le fichier que vous connectez, créez un fichier .htaccess avec le contenu suivant

Php_flag display_errors activé
ou dans le fichier php, avant de vous connecter, insérez la ligne suivante

Rapport d'erreur (E_ALL);
Les deux paramètres forceront l'affichage des erreurs

Merci de votre attention !

0

Je construis un petit framework PHP MVC et voici ma structure

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

dossiers À l'intérieur de index.php qui est le contrôleur frontal, j'ai ce code à exiger de init.php /app/core/init.php

app/core/init.php

init.php nécessite tous les contrôleurs de base et classes du répertoire /core, y compris controller.php et router.php et ici index.php instancie également les classes

Tout fonctionne bien pour le moment, car je l'ai testé en créant un constructeur à la fois dans controller.php et router.php afin que le code dans ces deux fichiers ressemble à ceci.

app/core/controller.php

application/noyau/routeur. php

à l'intérieur de index.php, cela fait écho OK ! car les classes sont créées correctement mais le problème est lorsque je veux inclure config.php qui se trouve dans /app/config/config.php à partir de Controller.php qui se trouve dans /app/core/Controller.php avec ce code

Chaque fois que je fais cela, cela renvoie cette erreur

Controller::include(../config/config.php) : échec d'ouverture du flux : aucun fichier ou répertoire de ce type dans C:\AppServ\www\myapp\app\core\Controller.php à la ligne 6

Controller::include() : échec de l'ouverture de "../config/config.php" pour inclusion (include_path=".;C:\php5\pear") dans C:\AppServ\www\myapp\app\core\Controller .php en ligne 6

Je pense que j'ai utilisé le bon emplacement, je travaille avec /app/core/Controller.php et je veux nécessite /app/config/config.php. Je retourne dans un répertoire en utilisant ../

Alors pourquoi ne puis-je pas réclamer le fichier ?

  • 3 réponses
  • Tri:

    Activité

2

D'après mon expérience personnelle, l'utilisation de chemins de fichiers relatifs entraînera des maux de tête à un moment donné. J'utilise donc généralement le chemin complet du fichier. L’avantage est également que c’est légèrement plus rapide. Ensuite, si à un moment donné vous obtenez une erreur d’inclusion, il est plus facile de trouver l’erreur puisque vous disposez du chemin complet.

Pour pouvoir faire des chemins absolus, je vous recommande d'ajouter une constante à votre fichier index.php (frontcontroller). Quelque chose comme ceci :

Define("ROOT_PATH", realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);

Définit une constante appelée ROOT_PATH qui fait référence au répertoire où se trouve le fichier index.php, et donc votre répertoire racine. En même temps, j'ai ajouté un séparateur de répertoire à la fin pour faciliter l'écriture des chemins. Pour l'utiliser, vous devez écrire.

Require_once ROOT_PATH . "config/config.php" ;

Informations sur les bonus

Mais si vous utilisez cette approche dans votre classe contrôleur.php, vous la faites dépendre de cette constante. Pour résoudre ce problème, vous pouvez transmettre le chemin racine en tant que variable dans le constructeur.

Fonction publique __construct($root) (...

Et puis utilisez-le comme suit :

Fonction publique __construct($root) ( require_once($root . "config/config.php"); )

J'espère que cela aide.

0

Je ne sais pas ce qui se passe, mais require_once() ne renvoyait pas d'erreur en se référant à lui-même comme include() car ce sont des fonctions différentes, et s'il s'agit de l'intégralité du code, le numéro de ligne d'erreur n'est pas le même que votre require_once(), car elle devrait être 4. Essayez de redémarrer votre serveur Web et voyez si cela résout quelque chose, sinon vous ferez probablement une blague sur quelque chose.