Smarty include_php исключение

Я хочу включить в свой шаблон php-файл. Но иногда файл php не существует. Пытаюсь проверить функцией "file_exists", но не работает.

{if file_exists("`$plugin`/button.php")}
    {include_php "`$plugin`/button.php"}
{/if}

Fatal error: Uncaught --> Smarty Compiler: Syntax error in template "file:/home/user/www/site/template/template.tpl" on line 456 "{include_php "$plugin/button.php"}" {include_php} file '/button.php' is not readable <-- thrown in /home/user/www/site/smarty/sysplugins/smarty_internal_templatecompilerbase.php on line 456

Есть ли способ проверить, существует ли файл php?

Что это: `$ plugin` / button.php - это действительно имя пути к файлу?

Andreas 01.07.2018 21:04

@Andreas Я использую имя папки в переменной $ plugin, оно работает нормально в пути к файлу

MrSmile 01.07.2018 21:05
it works ok in file path но в вопросе вы пишете but it doesn't work.. Что он?
Andreas 01.07.2018 21:08

@Andreas, он хорошо работает, если файл существует :) Но я хочу проверить, существует ли файл, потому что есть фатальная ошибка, если файл не существует

MrSmile 01.07.2018 21:13

Уверены, что ошибка возникает не из-за того, что переменная $ plugin пуста или не задана?

Andreas 01.07.2018 21:15

Есть какие-нибудь комментарии по этому поводу?

Andreas 01.07.2018 22:24

@Andreas да, вы правы - в данном случае это пустой var .. Но проблема в другом - как мне проверить файл, чтобы защитить скрипт от фатальной ошибки.

MrSmile 01.07.2018 22:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Всегда проверяйте свои переменные, прежде чем пытаться их использовать.

В данном случае это была пустая переменная $ plugin, из-за которой конкатенация строк не удалась.

Если вы сначала убедитесь, что ваши переменные установлены, затем, если это правда, проверьте, существует ли файл, он должен работать, как ожидалось.

{if isset($plugin) && file_exists("`$plugin`/button.php")}
    {include_php "$plugin/button.php"}
{/if}

В чистом PHP это должно работать, поскольку, если isset не работает, он даже не будет пытаться file_exist.
Хотя насчет умника не уверен. Если это не работает, вам нужно сделать отдельный if.

К сожалению, в Smarty это не работает, но спасибо за помощь. Я отредактировал код, и теперь мне больше не нужен include_php. Более того, include_php будет удален в одной из нескольких следующих версий.

MrSmile 02.07.2018 08:12

Другие вопросы по теме