Require не работи. Как да накарам необходимия атрибут за въвеждане да работи в по-стари версии на IE? Ако включите или изисквате, не работи

Една от най-забавните и полезни функции на PHP е включването на друг файл. Например, един уебсайт има горно меню, долно меню и между тях самото съдържание на страницата. И например на 10 страници от сайта се използва долното меню. В един момент трябваше да се направят промени в него. В html бихте направили ръчно промени във всеки отделен файл, но php ви позволява значително да опростите работата със сайта! Кодът за долното меню може да се съдържа в отделен файл, като на всяка от 10-те страници можете просто да включите този отделен файл! Тоест всички промени сега трябва да се правят само във файла с менюто, а на 10 други ще се покаже с промени.

Значението на връзката в php на прост руски език:

Файл 1.php
Горно меню

Файл 2.php
Долно меню

Пример.php файл
Свържете файл 1.php
Съдържание на страницата
Свържете файл 2.php

В резултат на обработката на файла example.php той ще бъде показан
Горно меню
Съдържание на страницата
Долно меню
Съответно, за да промените нещо в долното меню, трябва да направите промени само във файла 2.php

Път към файла Файлът се свързва според пътя, посочен за файла. Има два варианта на пътя: относителен и абсолютен. Относително - това е указание за пътя до свързания файл спрямо файла с инструкциите за свързване. Абсолютно - посочване на пълния път до включения файл.

PHP код

// пример за относителен път
включват "include/your_file.php"; // файлът е в папката за включване, която се намира в същата директория като файла за връзка

// пример за абсолютен път
включва $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php"; // $_SERVER["DOCUMENT_ROOT"] - показва основната директория на сайта

include и include_onceinclude() са конструкции, предназначени да включват файлове в кода на PHP скрипт по време на изпълнение на PHP скрипта. При обработката на кода инструкцията се заменя със съдържанието на прикачения файл. Предлагам веднага да разгледаме пример.

Нека да разгледаме как работи include, използвайки два файла като пример: index.php и text.php. За по-лесна работа нека приемем, че те се намират в една и съща директория.

PHP код (файл index.php)

Echo "Обикновен текст, съдържащ се в основния файл";
включват "text.php"; // включва съдържанието на файла text.php

?>
PHP код (файл text.php)

Echo "Текст, съдържащ се във включения файл";

?>
Резултатът от изпълнението на файла index.php ще бъде:

Обикновен текст, съдържащ се в основния файл
Текст, съдържащ се във включения файл
Наистина ли е удобно? Сега, като промените съдържанието на файла text.php, резултатът от index.php ще бъде напълно различен!

Сега нека поговорим за друга конструкция - include_once. Работи точно както включването, само че е създадено по-късно и за случаите, когато файлът не може да бъде включен отново. Например, страхувате се, че в резултат на грешка може да свържете файл 2 или повече пъти, което ще повлияе на това страницата да не работи правилно и да получи съответното съобщение за грешка.

PHP код

Include_once "text.php"; // файлът text.php ще бъде включен само веднъж

// повторните връзки по-долу няма да бъдат взети предвид и показани
// и няма да доведе до извеждане на съобщение за грешка
include_once "text.php"; // нищо няма да се случи

require и require_once Инструкциите require и require_once работят идентично за включване и include_once с изключение само на една функция - ако включващият файл не бъде намерен, изпълнението на скрипта ще бъде спряно (скриптът вече няма да се чете), докато include и include_once просто отпечатайте предупреждение и продължете с по-нататъшното изпълнение на скрипта, ако включване или изискване не работи За да разберете причините, поради които включването не работи, предлагам да проверите всичко стъпка по стъпка. Колкото и ясни и повърхностни да са точките по-долу, проверете всичко от самото начало

1. Проверете дали вашият сървър и php работят и дали някой php код на сайта работи изобщо
2. Проверете дали файлът за включване съществува
3. Проверете дали името и разширението на файла са въведени правилно във връзката
4. Уверете се, че включеният php файл действително се намира на адреса, който сте посочили
5. Опитайте се да посочите не относителен път, а абсолютен път (пълен път до файла).

Примерен PHP код

Включете "http://www.example.com/include/your_file.php";

// DOCUMENT_ROOT - обозначава основната директория на ресурса
включва $_SERVER["DOCUMENT_ROOT"]."/include/your_file.php";

6. Ако вашият файл не се свързва и не се показва грешка, тогава в директорията с файла, който свързвате, създайте .htaccess файл със следното съдържание

Php_flag display_errors Вкл
или в php файла, преди да се свържете, поставете следния ред

Error_reporting(E_ALL);
И двете настройки ще принудят грешките да се показват

Благодаря ви за вниманието!

За всеки уеб разработчик в момента няма по-сериозен проблем от пълната съвместимост на различни браузъри на неговия продукт. Това вероятно е една от основните задачи на добрия специалист: да гарантира, че неговият уебсайт винаги се показва правилно във всички браузъри.

Необходимият параметър, който понякога се използва за въвеждане, не работи в стария IE, който просто не може да бъде оставен така. Пенсионираните потребители, които все още използват IE6, трябва да имат същата лекота на използване с вашия сайт като потребителите на най-новата версия на Google Chrome. Кой освен уеб разработчиците може да се погрижи за тях.

За болната точка, за Internet Explorer

За нормалните браузъри, които включват Firefox, Opera и Google Chrome, тази задача е сравнително лесна. Дори по-старите версии на тези браузъри показват еднакво добре HTML кода, освен ако, разбира се, не се използват някои нови технологии. Но за да се постигне това в браузърите от семейството на Internet Explorer, са необходими просто херкулесови усилия.

Всяка версия на браузъра Internet Explorer има своя собствена уникална глупост. Това, което работи в IE6, може да не работи правилно в IE7 и обратно. Microsoft не можа да преодолее тази зоологическа градина дори в най-новата версия на своя браузър.

Не мога да разбера защо разработчиците на браузъри не могат просто да отворят и прочетат стандартите на W3C за изграждане на уебсайтове.

Следователно, като уеб разработчик, трябва да действам като нещо като „слой“ между капризните браузъри и посетителите на сайта, които изискват знания и зрелище. И е чудесно, че уеб разработчиците са успели да направят това досега.

И така, как мога да получа изискване да работя в по-стари версии на IE?

JS ни идва на помощ. Преди това не можех да го понасям, но сега не виждам по-нататъшен път без него в простора на „правилната“ МРЕЖА.

Даденото по-долу решение не съм го измислил аз, а го взех от един буржоазен блог. Тъй като съм алчен, а блогът е буржоазен, няма да давам линк към него.

Функцията fnCheckFields() ще отговаря за всичко. Поставете JS кода на вашия сайт:

функция fnCheckFields(form_obj)( var error_msg = "Моля, попълнете всички задължителни полета."; 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 "текст") if (form_obj_elem.getAttribute("required") && !form_obj_elem.value) is_error = true; if (is_error) alert(error_msg);

Обикновено се препоръчва да го поставите между HTML таговете HEAD в началото на страницата, но все пак препоръчвам да го поставите най-отдолу на страницата преди затварящия таг BODY. По този начин JS има по-малко влияние върху скоростта на зареждане на страницата.

Прозорецът за въвеждане, където трябва да се въведе необходимия параметър, трябва да изглежда така в html:

Този скрипт работи много просто: след натискане на бутона Submit, скриптът проверява всички входове за наличие на необходимия параметър и ако го намери, разглежда съответно въведената стойност на това поле. Ако нищо не е въведено в такова въвеждане, се показва предупредителен прозорец за необходимостта от въвеждане. Съответно данните не се изпращат никъде.

Също така е чудесно, че ако имате нормален браузър, който вече се е научил да разбира този параметър, както се очаква, такъв предупредителен прозорец няма да се появи и стандартните инструменти за обработка на необходимия параметър за вашия браузър ще работят.

Споделете в социалните медии мрежи

0

Създавам малка PHP MVC рамка и ето моята структура

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

папки Вътре в index.php, който е предният контролер, имам този код, който да изисквам от init.php /app/core/init.php

приложение/ядро/init.php

init.php изисква всеки базов контролер и Classe в директорията /core, включително controller.php и router.php и тук index.php също инстанцира класовете

Засега всичко работи добре, тъй като го тествах, като създадох конструктор както в controller.php, така и в router.php, така че кодът в тези два файла ще бъде като този

app/core/controller.php

приложение/ядро/рутер. php

вътре в index.php отеква OK! тъй като класовете са създадени правилно, но проблемът е, когато искам да включа config.php, който е в /app/config/config.php от Controller.php, който е в /app/core/Controller.php с този код

Всеки път, когато правя това, той връща тази грешка

Controller::include(../config/config.php) : не успя да отвори поток: Няма такъв файл или директория в C:\AppServ\www\myapp\app\core\Controller.php на ред 6

Controller::include(): Неуспешно отваряне на "../config/config.php" за включване (include_path=".;C:\php5\pear") в C:\AppServ\www\myapp\app\core\Controller .php на ред 6

Мисля, че използвах правилното местоположение, работя с /app/core/Controller.php и искам /app/config/config.php. Връщам се към една директория, използвайки ../

Тогава защо не мога да поискам файла?

  • 3 отговора
  • Сортиране:

    активност

2

От моя личен опит използването на относителни файлови пътища ще доведе до главоболия в даден момент. Така че обикновено използвам пълния път до файла. Предимството на това е също, че е малко по-бързо. След това, ако в даден момент получите грешка при включване, е по-лесно да намерите грешката, тъй като имате целия наличен път.

За да можете да правите абсолютни пътища, бих ви препоръчал да добавите константа към вашия файл index.php (frontcontroller). Нещо като следното:

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

Дефинира константа, наречена ROOT_PATH, която се отнася до директорията, където се намира файлът index.php, и следователно вашата основна директория. В същото време добавих разделител на директория в края, за да улесня писането на пътища. За да използвате това, трябва да пишете.

Require_once ROOT_PATH. "config/config.php";

Бонус информация

Но ако използвате този подход във вашия клас controller.php, вие го правите зависим в тази константа. За да коригирате това, можете да подадете основния път като променлива в конструктора.

Публична функция __construct($root) (...

И след това го използвайте по следния начин:

Публична функция __construct($root) (require_once($root. "config/config.php"); )

Надявам се това да помогне.

0

Не знам какво се случва, но require_once() не хвърляше грешка, когато се отнасяше към себе си като include(), защото те са различни функции, освен това, ако това е целият код, номерът на реда за грешка не е същият като вашия require_once(), тъй като трябва да е 4. Опитайте да рестартирате уеб сървъра си и вижте дали това ще поправи нещо, в противен случай вероятно ще се шегувате с нещо.