2012-03-26 9 views
2

Ich migriere eine PHP 5.2.x-Anwendung auf einen neuen 5.2.x-Server. Der alte Server startete vor vielen Jahren als PHP 4.0 Server und wurde im Laufe der Zeit auf PHP 5.2 aktualisiert. Eines unserer Module hat eine Funktion, die neu deklariert wird, wenn dieses Modul mehrfach verwendet wird. Wir können das leicht beheben, aber wir sind verblüfft darüber, wie es jemals funktioniert haben könnte.Redeclare-Funktion funktioniert auf alten Server, aber nicht neu

auf dem neuen Server wird es nicht mit einem erwarteten:

Fatal error: Cannot redeclare function 

Das Problem ist, dass auf dem alten Server war es immer die Funktion wieder zu erklären! Gibt es hier eine PHP-Einstellung oder eine spezielle Verwendung, die auf einem Server funktioniert, aber nicht auf einem anderen?

Vielen Dank!

Edit Immer noch versuchen, durch zu gießen, wie dies möglich ist. Die Website FATAL-Fehler, aber Ausführung nach diesem Fehlerpunkt.

+2

Sind Sie sicher? Ohne etwas ** seriöses ** [Hacker] (http://www.php.net/manual/en/ref.runkit.php) können Sie eine PHP-Funktion niemals neu deklarieren. – ceejayoz

+4

PHP4 erlaubte Funktionsredeklarationen, PHP5 nicht. Sie müssen das Modul in ein include_once/require_once ändern oder die Funktionsdefinition in ein 'if (! function_exists ('...')) {...}' Block umbrechen. –

+0

@MarcB Habe ich PHP5 so lange benutzt? Ich könnte schwören, PHP4 erlaubt es auch nicht. – ceejayoz

Antwort

1

Die Anzeige von Funktionen ist ein Fehler.

Vielleicht können Sie "Umbenennungsfunktion" verwenden.

http://es.php.net/manual/en/function.rename-function.php

if(function_exist("foo")){ 
    rename_function('foo', 'old_foo'); 

    function foo(){ 
     /*...*/ 
    } 
} 

Eine weitere Idee ist Code neu zu schreiben, um dieses

$foo = function(){ /* something */.... }; 

Also das nächste Mal, wenn Sie $ foo() tun wollen, neu zu definieren, was Sie tun

$foo = function(){ /* something else */.... }; 
+0

Ist das nicht eine wirklich, wirklich schreckliche Praxis? – sbichenko

+0

@exizt Willkommen bei PHP – Dan

0

Ich bin nicht in der Lage, Ihre Beschreibung zu reproduzieren, PHP 4 erlaubt Ihnen nicht, Funktionen neu zu deklarieren:

echo PHP_VERSION; 
function foo() {} 
function foo() {} 

Demo/Output:

4.4.9
Fatal error: Cannot redeclare foo() (previously declared in /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138) : eval()'d code:2) in /homepages/26/d94605010/htdocs/lz/writecodeonline.com/php4/index.php(138) : eval()'d code on line 3

Sie Dinge hier mischen müssen, so finden besser mehr über Fakten, wenn das Debuggen, nicht zu raten (ja ich weiß, kann manchmal hart sein, aber Fakten helfen beim Debuggen , ziele auf sie).

Und wenn es ein schwerer Fehler ist, endet Ihr Skript. Sie können einen Shutdown-Callback-Funktion hinzufügen, weiter um Ihr Problem zu debuggen, sehen eine ähnliche Frage:

Verwandte Themen