У меня есть функция (это именно то, как она появляется, начиная с моего файла):
<?php //dirname(getcwd()); function generate_salt() { $salt = ''; for($i = 0; $i < 19; $i++) { $salt .= chr(rand(35, 126)); } return $salt; } ...
И по какой-то причине я продолжаю получать ошибку:
Неустранимая ошибка: невозможно обновить файл generate_salt () (ранее объявленный в /Applications/MAMP/htdocs/question-air/includes/functions.php:5) в /Applications/MAMP/htdocs/question-air/includes/functions.php on line 13
- Настройка PHP Включить путь на основе сайта?
- require () не удается, даже если файл file_exists ()
- Как получить содержимое в виде строки?
- Предотвратите прямой доступ к файлу включения php
- Как использовать переменные php из включенного php-файла
- Может ли PHP включать работу только для определенной части файла?
Я не могу понять, почему и как может произойти такая ошибка. Есть идеи?
Эти ошибки говорят, что ваша функция уже определена; что может означать:
Чтобы помочь с третьим пунктом, решением будет использовать include_once
вместо include
при включении вашего файла functions.php
– поэтому его нельзя включить более одного раза.
dont объявляет функцию внутри цикла (например, foreach
, for
, while
и т. д.). Заявите перед ними.
Вы должны включать только содержащий функцию файл:
use: include_once("functions.php");
вместо: include ("functions.php");
Если ни одно из вышеописанных действий не помогает, перед объявлением функции проверьте, существует ли она:
if (!function_exists('your_function_name')) { function your_function_name() { ........ } }
Вы, вероятно, включаете файл functions.php более одного раза.
вы можете проверить сначала, если имя вашей функции не существует или нет, прежде чем писать функцию By
if (!function_exists('generate_salt')) { function generate_salt() { ........ } }
ИЛИ вы можете изменить имя функции на другое имя
У меня было странное поведение, когда мой * .php.bak (который автоматически был создан блокнотом) был включен в компиляцию. После того как я удалил все * .php.bak из папки, эта ошибка исчезла. Возможно, это будет полезно для кого-то.
Другой возможной причиной получения этой ошибки является то, что ваша функция имеет то же имя, что и другая встроенная функция PHP. Например,
function checkdate($date){ $now=strtotime(date('Ymd H:i:s')); $tenYearsAgo=strtotime("-10 years", $now); $dateToCheck=strtotime($date); return ($tenYearsAgo > $dateToCheck) ? false : true; } echo checkdate('2016-05-12');
где функция checkdate
уже существует в PHP.
Я бы рекомендовал использовать get_included_files
– поскольку Паскаль говорит, что вы либо как-то смотрели на неправильный файл, либо эта функция уже определена в файле, который был включен.
require_once
также полезна, если файл, который вы пытаетесь включить, имеет важное значение.
У меня такая же проблема. И, наконец, это было двойное включение. Один из них относится к файлу с именем X. И еще один включает в себя файл с именем Y. Зная, что в файле YI есть («X»)
Поскольку код, который вы предоставили, явно не содержит ничего, либо он дважды включается, либо (если скрипт является точкой входа для кода), в конфигураторе веб-сервера / php.ini должна быть установлена автоматическая добавка или, альтернативно, у вас есть действительно неясное расширение, которое определяет эту функцию.
означает, что вы уже создали класс с тем же именем.
Например:
class ExampleReDeclare {} // some code here class ExampleReDeclare {}
Этот второй примерReDeclare выдаст ошибку.
или вы можете создать функцию в цикле
такие как
for ($ i = 1; $ i <5; $ i ++) {function foo () {echo 'something'; }}
Foo ();
// Будет отображаться ошибка, связанная с повторной декларацией
Эти ошибки говорят, что ваша функция уже определена; что может означать:
Я думаю, что ваша проблема на третьей позиции заключается в том, что скрипт содержит этот файл более одного раза. Таким образом, вы можете решить его, используя require_once
вместо require
или include_once
вместо include
для включения вашего файла functions.php
– поэтому его нельзя включить больше чем один раз.
В моем случае это было из-за функции внутри другой функции! как только я переместил функцию, ошибка исчезла, и все сработало, как ожидалось.
Этот ответ объясняет, почему вы не должны использовать функцию внутри функции .
Это может помочь кому-то.