2013-08-06 11 views
5

Pracuję nad konwersją niektórych starożytnych kodów .php3. Podczas działania starszej wersji .php3 na antycznym pudełku wszystko działa dobrze. Kiedy klikam przycisk przepisywania, wchodzi on do bloku przepisywania, jeśli jest.php3 i php Zmienna różnica

.php3

<? 
if($rewrite) { 
//here is therewrite code 
} 

<input class="smButton" type="submit" name="rewrite" value="Save Changes"> 

.php

<?php 
if($rewrite) { 
//here is therewrite code 
} 

<input class="smButton" type="submit" name="rewrite" value="Save Changes"> 

Czy jest coś oczywiste, że jestem brakujące? Coś w wersji .php3 ustawia zmienną do przepisywania, ale w nowej wersji nie jest ona ustawiona, chyba że ręcznie ustawię ją na górze pliku .php.

Mam nadzieję, że to wystarczający kod. Zastanawiam się tylko, co może powodować tak różne zachowania między 2 wersjami.

Odpowiedz

11

register_globals jest prawdopodobnie w PHP 3 i wyłączyć w swojej nowszej wersji PHP (jak powinno być)

+0

Jest winowajca! To załatwiło sprawę. Wystarczy zmienić wartość z Off na On. Aby szybko znaleźć odniesienie do każdej osoby, ta wartość znajduje się w pliku konfiguracyjnym php.ini. Osobiście moje znajdowało się w /etc/php/php.ini. – sealz

+3

Powinieneś przejrzeć swój kod zamiast aktywować tę paskudną starą funkcję :-). Trochę niebezpiecznie jest zachować to zachowanie (np. Przesłonić zmienne np. ...) –

+0

@Maxime Lorant Zawsze dobry pomysł. Wstawię to na moją listę rzeczy do zrobienia, teraz, gdy różnice w wersjach są powoli opracowywane. – sealz

5

Trzeba wymienić $rewrite przez $_POST['rewrite'], ponieważ nowa wersja PHP nie aktywuje register_globals, które przekładają każdy $_POST['x'] i $_GET['x'] (i bardziej ogólnie $_REQUEST['x']) do $x)

prowadzi to do bunch of security holes, jeśli masz kod PHP niskiej jakości (co może mieć miejsce, jeżeli nie masz zachować go od lat).