Bir Başlarken "Ölümcül hata: Redeclare"

9 Cevap php

Ben (bu benim dosyanın üstünden, göründüğü nasıl) bir işlevi var:

<?php
//dirname(getcwd());
function generate_salt()
{
    $salt = '';

    for($i = 0; $i < 19; $i++)
    {
    	$salt .= chr(rand(35, 126));
    }

    return $salt;
}
...

Ve nedense, ben hata almaya devam:

Fatal error: Cannot redeclare generate_salt() (previously declared in /Applications/MAMP/htdocs/question-air/includes/functions.php:5) in /Applications/MAMP/htdocs/question-air/includes/functions.php on line 13

Neden veya nasıl böyle bir hata oluşabilir ben çözemiyorum. Herhangi bir fikir?

9 Cevap

Bu hataları fonksiyon zaten tanımlı diyor; anlamına gelebilir:

  • Eğer aynı işlevi iki dosyalarında tanımlanmış
  • veya aynı işlevi aynı dosyada iki yerde tanımlanmış
  • veya fonksiyon tanımlandığı dosya iki kez (yani, bu işlevin iki kez tanımlanır görünüyor) dahildir

Böylece birden fazla dahil edilemez - Üçüncü nokta ile yardımcı olmak için, bir çözüm include_once instead of include when including your functions.php dosyasını kullanmak olacaktır.

Diğer dahil dosya aynı işlevi başka bir aramayı içeriyor.

you can check first if name of your function isn`t exists or not before you write function By

  if (!function_exists('generate_salt'))
{
    function generate_salt()
    {
    ........
    }
}

VEYA başka bir ad işlevin adını değiştirebilir

veya döngü işlevini yaratmaktadır

  • gibi

    for($i=1; $i<5; $i++){
        function foo(){
          echo 'something';
        }
    }

foo () ;/ / hata

i olmalı, düşünüyorum:

if (!function_exists('generate_salt'))
{
    function generate_salt()
    {
    ........
    }
}

Muhtemelen birden fazla kez functions.php dosyasını dahil ediyoruz.

Pascal diyor ya bir şekilde yanlış bir dosyaya bakıyoruz ya da bu işlev zaten dahil bir dosyada tanımlanır - Ben kullanarak get_included_files öneririz.

Eklemek için çalışıyorsanız dosyası gerekli ise require_once de yararlıdır.

Ben aynı problem vardı. Ve nihayet bir çift içerir oldu. Bir adlı bir dosya X dahil Ve başka bir dosyada YI ('X') dahil olduğunu bilen Y. adında bir dosyaya eklemek

Verdiğiniz kod açıkça bir şey içermez yana, ya iki kez incldued ediliyor, veya (komut dosyası kodu için giriş noktası ise) web sunucusu config / php.ini kurmak bir oto-, başına olmalı ya da alternatif işlevi tanımlar yüklü bir gerçekten karanlık uzantısı var.