Php ошибка подключения require

Не подключает файл require

Fatal error: require(): Failed opening required ‘../templates/header.php’ (include_path=’.;c:/ospanel/modules/php/PHP-7.1-x64;c:/ospanel/modules/php/PHP-7.1-x64/PEAR/pear’) in C:\OSPanel\domains\store\guest\login.php on line 3

Если файл находится не в папке с header.php то require не работает. То есть require ‘test.php’; работать будет, а require ‘../test.php’ — нет. Помогите плз, может чего не учел.

require подключает header внутрь тега body?
Картинка сама все говорит за себя: подключаю как обычно: <?php require_once.

Require, файл не подклчюается
Не подключается файл, который существует по данному пути, залил его даже отдельно. Путь вывел.

include require как подключить правильно файл
Проблема в следующем: Нужно подключить файл который находиться в другой директории. Имеем файл.

require(1) [function.require]: failed to open stream: No such file or directory
код: дерево файлов — api/auth.php — www/index.php — www/include/main.php запускаем файл.

Эксперт PHP

Лучший ответ

Сообщение было отмечено _BoGdaN_ как решение

Решение

ЦитатаСообщение от _BoGdaN_ Посмотреть сообщение

Крайне рекомендуется не использовать относительные пути при подключении php файлов. Есть магическая константа __DIR__, к ней и нужно привязывать пути

Источник

Почему файл не подключаеться через require?

Привет, я хочу написать бота на php использую эту SDK.
Все делаю как в описании.
1.Копоузером ставлю
2.В корне создаю 2 файла, bot и setup.php
Заливаю на хост пытаюсь запусить вайбер бота, получаю белую страницу. Захожу в лог и вижу
что файл не подключился.

[28-Oct-2020 01:18:03 Europe/Helsinki] PHP Fatal error: require(): Failed opening required ‘/home/пользователь/папка_под_домена/vendor/composer/ralouphie/getallheaders/src/getallheaders.php’ (include_path=’.:/opt/alt/php72/usr/share/pear’) in /home/пользователь/папка_под_домена/vendor/composer/autoload_real.php on line 66

Средний 5 комментариев

HARDPLATON

HARDPLATON, код на гит хаб. Я ничего не менял, кроме того что файлы bot.php & setup.php поставил в корень

FanatPHP

Ну, файла такого нету, а вот почему композер думает что папка вендор лежит в композере — непонятно
попробуй переустановить

FanatPHP

ну вот ак правильно заметил Антон Шаманов , ты, судя по твоим словам, непонятно как «устанавливаешь» непонятно где, а потом «заливаешь на хост». Надо все наоборот.
устанавливать сразу на хосте

FanatPHP

Сейчас я объясню тебе Самую Главную Вещь, которую должен знать любой пользователь пхп.

Если у перед тобой стоит выбор, кому верить — собственным фантазиям или сообщению об ошибке — то всегда выбирай второе.

Тебе надо твердо запомнить это правило. И пересмотреть свой вопрос с его учетом.

И в итоге у тебя получится совсем другой вопрос.
Во-первых, мы узнаем, что файл не подключаетсячерез require по осовершенно банальной причине — он не найден.
Во-вторых — следуя вышеприведенному правилу — что файла такого на диске нет
(тут важно понимать, что файл всегда включает в себя путь. Если тебя послали на кухню за чайником, а ты пошел за ним в туалет, то в туалете чайника нет. потому что важно, куда ты за ним пошел. то же и с файлами. у тебя может быть милилон файло в н диске, нодо тех пор пока ты будеш ьуказывать неправиьный путь, ни один не будет найден)
И вот дальше у нас возникают совсем другие вопросы::
По какому пути композер пытается зкгрузить файл?
и почему композер пытается загрузить файл не из той папки, в которой файл на самом деле лежит?

Навскидку сказать сложно, скорее всего ты руками там что-то после установки поковырял, но в любом случае стоит для начала попробовать все переустановить с нуля

ты должен на сервере
1. создать composer.json с sdk в require секции
2. закачать composer.phar
3. запустить консоль и выполнить установку

FanatPHP

FanatPHP

ну и если прочитать вопрос (я понимаю что слишком многого требую, но попробуй напрячься), то станет ясно, что композер в системе установлен

FanatPHP, возможно ты и прав, а возможно нет — лично я понял так: инсталит все локально и копирует файлы на сервер

FanatPHP

А да действительно. этот момент как раз я-то и пропустил.
сначала где-то ставит а потом заливает.

но первый пункт все равно не нужен, composer require прекрасно создаст все файлы сам

Источник

How to catch error of require() or include() in PHP?

I’m writing a script in PHP5 that requires the code of certain files. When A file is not available for inclusion, first a warning and then a fatal error are thrown. I’d like to print an own error message, when it was not possible to include the code. Is it possible to execute one last command, if requeire did not work? the following did not work:

require('fileERROR.php5') or die("Unable to load configuration file."); 

Supressing all error messages using error_reporting(0) only gives a white screen, not using error_reporting gives the PHP-Errors, which I don’t want to show.

7 Answers 7

You can accomplish this by using set_error_handler in conjunction with ErrorException .

The example from the ErrorException page is:

 set_error_handler("exception_error_handler"); /* Trigger exception */ strpos(); ?> 

Once you have errors being handled as exceptions you can do something like:

The example above is copied directly from the ErrorException docs (link above) — in the «official» example they use $errno as $code, while others (including in the comments on that page) have suggested using it as $severity — note that if you like you can use it for both, or neither.

This is actually a useful solution in my situation. i have legacy (pre-framework!) code that has suffixes in filenames. ClassA.class.php or InterfaceA.interface.php . Long term goal: fix all that. Short term: reduce redundant file-exists checks by attempting both safely.

if (file_exists("must_have.php")) < require "must_have.php"; >else

Better to use is_readable(); it checks for file existence, in addition of readability of the file (simply, a file must exist to be readable). Also, to prevent from including directories, you should use is_dir() (i.e. !is_dir($filename)).

incldue die() at the end of your echo. require will stop the script from running and if the file does not exist the echo will be shown and the rest of the page load. But instead addng die() at the will show nothing in the page other than the message.

A better approach would be to use realpath on the path first. realpath will return false if the file does not exist.

$filename = realpath(getcwd() . "/fileERROR.php5"); $filename && return require($filename); trigger_error("Could not find file ", E_USER_ERROR); 

You could even create your own require function in your app’s namespace that wraps PHP’s require function

namespace app; function require_safe($filename) < $path = realpath(getcwd() . $filename); $path && return require($path); trigger_error("Could not find file ", E_USER_ERROR); > 

Now you can use it anywhere in your files

namespace app; require_safe("fileERROR.php5"); 

I have absolutely no idea why, but your code does not work correctly (produces false positive), when run in PHP CLI / console. I.e. It halts execution of script, claiming, that file XYZ does not exists, while it actually does exists — commenting out your code and going directly to include() works fine and file is included without errors.

You need to use include(). Require(), when used on non-existent file, produces a fatal error and exits the script, so your die() won’t happen. Include() only throws warning and then the script continues.

Your answer is either specific to a certain PHP version or specific to certain php.ini configuration. On my side (PHP 5.5.4) with my configuration, changing require to include brings absolutely no difference. Both are throwing ugly fatal errors, that I can’t catch.

@trejder — This is not correct Include throws a warning, but it carries on. It is not fatal. Whereas require throws an error and the program will stop. It is true that both produce entries in error.log

@RohitGupta You are referring to my seven years old comment that talks about things 100% configuration specific. Are you sure that it is not possible to configure PHP the way that I describe? I don’t know what was my PHP’s configuration seven years ago, but I pretty much don’t see a reason for which I would be writing here something that is not true. I rather think that I wrote what I was observing at that time and how my environment was actually behaving.

As of PHP 7.0, you can catch the Throwable exception thrown by require() .

try < require '/path/not-found/or-not-available.php'; >catch (Error $e) < // debugging example: die('Caught error =>' . $e->getMessage()); > 

Will output something like:

Caught error => Failed opening required ‘/path/not-found/or-not-available.php’ [. ]

I would suggest you took a look at the most recent comment in the documentation for the set_error_handler() function.

It suggests the following as a method (and with an example) of catching fatal errors:

 register_shutdown_function('shutdown'); ini_set('max_execution_time',1 ); sleep(3); ?> 

I haven’t tried the suggestion, but this could propably be used in other fatal error scenarios.

While this may work, it produces good question, if this will work in conditions, OP is asking? I believe that most people landing here are looking for a solution, where they can catch require on non-existing file and continue script execution. Being able to gracefully die (i.e. display something, I want but end up with script termination even so — and that is what your code seems to be doing) doesn’t seem to be fitting into many scenarios. I assume, script can display whatever it want’s if it going to die. I want to prevent die / termination on non-existing file fed to require .

A simple way I am using is that

I have downvoted you because this still generates a warning. Execution still carries on, but it leaves two lines in your error log. It is still an error condition, that you have not caught.

This question is in a collective: a subcommunity defined by tags with relevant content and experts.

Источник

PHP не работает require и аналогичные функции

Зарегистрировался на бесплатном хостинге byethost.com. Функции типа require(‘text.html’) — работают, а вот require(‘..app/text.html’) нет. Подскажите, пожалуйста, почему такое может быть? Папка app создана, на нее и все ее содержимое стоят права 777. Это же код на локальном сервере работает. update возможно как-то заблокированы инклуды из других папок?

не важно в чем тут проблема, никогда не пишите пути таким образом, лучше всего указывать полный путь, т.е. что-то типа require $_SERVER[‘DOCUMENT_ROOT’] . ‘/someDirectory/someFile.someExt’;

1. Так не работает тоже. 2. Наличие скобок же не критично ? 3. А так можно ? require dirname(dirname(FILE)) . ‘/someDirectory/someFile.someExt’;

3 ответа 3

P.S: Для home/dir1/test.php это означает подключение home/app/text.html. Уверены-ли вы, в таком пути?

UPD: А какие права на родительскую ( «../» ) папку?

В пути уверен. Слеш как раз нужен т.к. слеш у последней папки в пути ОС не ставит и получится homeapp/text.html , а не home/app/text.html

А какие права на родительскую ( «../» ) папку? — не знаю). И как посмотреть не знаю. Это же бесплатный хостинг

>В пути уверен. Слеш как раз нужен т.к. слеш у последней папки в пути >ОС не ставит и получится homeapp/text.html , а не home/app/text.html та сам это придумал?

Почти . Просто все функции в PHP, которыми я пользовался возвращают строку вида ‘/dir/dir/dir’ — без последнего слеша

Попробуй спросить у службы поддержки, либо написать на их форуме.

chdir(dirname(dirname(__FILE__)).'/add/'); require('text.html'); 

chdir() [function.chdir]: open_basedir restriction in effect. File(/home/vol2/byethost14.com/b14_<индивидуальный_номер>/add/) is not within the allowed path(s): (/php_sessions:/tmp:/var/www/errors:/home/vol2/byethost14.com/b14_<индивидуальный_номер>/htdocs) Что это значит?

Вернее не так). Я понимаю, что у php нет доступа к этой папке, но как это исправить? — Еще раз уточняю, что это на бесплатном хостиге. Или куда перенести файл с паролями, чтобы они php был доступен, а снаружи нет?

Если файл с паролями для подключения к базе данных — то почему бы его не оставить в этой же директории. 1) Расширение поставить php и пароли прописать в переменные (как в большинстве CMS). 2) Дополнительно можно заблокировать доступ с помощью .htaccess. 3) Изменить права доступа к файлу.

Ну не знаю, мне кажется лопатить код из-за ограничений хостинга, как-то не правильно. Тем более, что после того, как я все обкатаю мне предоставят нормальный хост. Короче, мне легче поменять на другой хост. 1. Так и сделано. 2. Это я знаю, но опять придется менять стуктуру сайта и лопатить код. 3. Уже и так стоит 777 🙂 Неужели тут никто не пользоватся byethost.com никогда? Возможно кто-то знает альтернативы? Только без рекламы и с доменом.

Да переместите вы папку уже > _ < Сделайте в начале скрипта, в главном конфиге И подключайте файлы как большинство нормальных людей( require ROOT.'/app/text.html' ). Хостинг кривой будет - просто в этот дефайн добавите нес-ко букв. Ну или сношайтесь дальше с относительными путями.

Источник

Читайте также:  Ссылки
Оцените статью