Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Migracja strony www do nowszego środowiska PHP i MySQL
Forum PHP.pl > Forum > Przedszkole
el_conejo
Witam,
Próbuję przenieść na nowy serwer stronę internetową napisaną kilka lat temu w PHP i MySQL.
Dotychczas serwis pracował w następującym środowisku:
  • Serwer Linuxowy
  • PHP 4.3.10
  • MySQL 3.23.58

Teraz chciałbym uruchomić go pod PHP 5.3.5 oraz MySQL 5.5.8
Pierwszą przeszkodą okazał się import bazy przy pomocy PHPMyAdmin. Przy każdej wyeksportowanej tabeli pojawił się wpis "TYPE=MyISAM", przez który nie można było zaimportować bazy. Zmiana na "ENGINE=MyISAM" pomogła i baza została zaimportowana do nowego środowiska.
Teraz jednak zaczęły się schody... Skopiowałem wszystkie pliki serwisu, skonfigurowałem prawa dostępu do bazy danych, ustawiłem ścieżki dostępu do plików. Wywołuję w przeglądarce index.php i obok załadowanej treści i grafiki pojawiają się błędy typu:
  • Notice: Undefined variable: search in "ścieżka_do_pliku\body.php" on line 4
  • Notice: Undefined variable: dzial in "ścieżka_do_pliku\body.php" on line 4
  • Notice: Undefined index: forum_login in "ścieżka_do_pliku\index.php" on line 5

Dodatkowo linki w menu nie przekierowują mnie do docelowych podstron (klikam i nic się nie dzieje).

Jeśli jest to możliwe, to bardzo proszę o pomoc.
nospor
Twój kod pewnie jest napisany dla włączonej opcji REGISTER_GLOBALS.
Masz dwa rozwiązania:
1) Szybkie ale złe: włącz u siebie tę opcję
2) Dłuższe ale prawidłowe
wszelkie odwołania do danych z forma czyli np.
$forum_login musisz zamieniać na $_POST['forum_login']
Wszelkie odwołania da zmiennych z linków np. $jakaszmiennazlinka masz zamieniać na $_GET['jakaszmiennazlinka']
el_conejo
Cytat(nospor @ 21.07.2011, 08:43:56 ) *
Twój kod pewnie jest napisany dla włączonej opcji REGISTER_GLOBALS.
Masz dwa rozwiązania:
1) Szybkie ale złe: włącz u siebie tę opcję
2) Dłuższe ale prawidłowe
wszelkie odwołania do danych z forma czyli np.
$forum_login musisz zamieniać na $_POST['forum_login']
Wszelkie odwołania da zmiennych z linków np. $jakaszmiennazlinka masz zamieniać na $_GET['jakaszmiennazlinka']

Ad. 1. Włączenie opcji REGISTER_GLOBALS nie poprawiło sytuacji.
Ad. 2. Przy błędzie w rodzaju: Notice: Undefined variable: dzial in "ścieżka_do_pliku\body.php" on line 4 poprawiłem zmienną na wzór $_GET['jakaszmienna']. Po tej zmianie pojawił się kolejny błąd o treści: Notice: Undefined index: dzial in "ścieżka_do_pliku\body.php" on line 4
nospor
ad1) A po włączeniu tej opcji zrestartowałeś serwer?
ad2) To był przykład. Jeślia ta dana idzie z url to ma być $_GET. jesli z post to ma być $_POST

Ale jak włączyłeś register globals i zrestartowałeś serwer to już punkt dwa nie jest ważny.
Jeśli po włączeniu register_globals i restarcie serwera nadal ci nie działa, to widać chodziło o coś innego.
Inna kwestia to taka, że jesli problemem jest tylko i wyłącznie pokazywanie błędów NOTICE, to wyłącz wyświetlanie tych błędów.
Możesz oczywiście spróbować ich nie generować, czyli zanim dobierzesz się do jakiejś zmiennej to najpierw swrawdź czy ona w ogóle istnieje - isset()
el_conejo
Po włączeniu opcji REGISTER_GLOBALS zrestartowałem serwer i nie stosowałem się do punktu nr 2.
Ukrycie błędów nic mi nie daje, ponieważ linki w menu nadal nie działają.
Funkcja isset wskazuje, że np. zmienna 'id' nie istnieje. W takim razie jakim cudem zmienna ta była widoczna w starym środowisku PHP i MySQL?
mls
Błędy się naprawia, nie ukrywa. Więc może czas przepisać ten fragment kodu który nie działa na taki który będzie zgodny z PHP5?
el_conejo
Poniżej zamieszczam kod php z pliku, który generował kilka błędów na stronie głównej. Czy może ktoś wskazać w nim elementy jakie należy poprawić dla zgodności z PHP5?
Kod
<?
$id_bak=$id;

if(!$id    and !$dzial    and    !$search) $dzial="wskrocie";

$sql_t="select count(*) from $tabela_tekst where id='$id'";
$result_t=@mysql_query($sql_t,$db);
$myrow=@mysql_fetch_array($result_t);
$num_rows=$myrow[0];

if(!$num_rows and $show_default) $dzial="wskrocie";

if($id){
$sql="select opis, sort from $tabela_menu where id='$id'";
$result=@mysql_query($sql,$db);
$myrow=@mysql_fetch_array($result);
$opis1=$myrow["opis"];
$sort1=$myrow["sort"];
}

if ($dzial=="mapa") {
@include "mapa.php";

} elseif ($dzial=="ksiega") {
    echo "<p align=center><B><font style='font-width: 14px;'>Księga goci</font></B></p>";
    echo "<p align=center><B><font style='font-width: 12px;'><a class=r HREF=\"index.php?dzial=dodaj\">Dodaj wpis</a></font></B></p>";
    include "plugins/ksiega/ksiega.php";

} elseif ($dzial=="dodaj") {
    echo"<p align=center><a class=r HREF=\"index.php?dzial=ksiega\"><b>Wróć do ogl±dania wpisów</b></a></p>";
    include "plugins/ksiega/dodaj.php";

} elseif ($dzial=="stat") {
    @include "plugins/staty/statystyki.php";
    echo"<br>";

} elseif ($dzial=="statall") {
    @include "plugins/staty/stat_all.php";
    echo"<br>";
    
} elseif ($dzial=="stattech") {
    @include "plugins/staty/stat_tech.php";
    echo"<br>";

} elseif ($dzial=="statgeo") {
    @include "plugins/staty/stat_geo.php";
    echo"<br>";

} elseif ($dzial=="statwizyta") {
    @include "plugins/staty/stat_wizyta.php";
    echo"<br>";

} elseif ($dzial=="wskrocie") {
    @include "plugins/wskrocie/wskrocie.php";
    echo"<br>";
    
    
} elseif ($dzial=="sprawy") {
    @include "sprawy.php";

} elseif ($dzial=="forum") {
    include "plugins/forum/forum.php";

} elseif ($dzial=="pytanie") {
    @include "pytanie.php";

} elseif ($dzial=="odpowiedz") {
    @include "odpowiedz.php";

} elseif ($dzial=="kartki") {
    @include "plugins/kartki/kartki.php";
    
} elseif ($dzial=="galeria") {
    @include "plugins/galeria/galeria.php";
    
} elseif ($dzial=="chat") {
    @include "plugins/chat/chat_login.php";
    
} elseif ($dzial=="kalendarium") {
    @include "plugins/kalendarz/kalendarium.php";

} elseif ($search) {
    @include "search.php";

} elseif ($dzial=="subscribe") {
    @include "subscribe.php";

} elseif ($dzial=="sonda") {
    include "plugins/sonda/sonda_show.php";

} else {
    if($opis1){
      include "skrut_.php";
    } else {
      include "body_.php";
    }
}
$id=$id_bak;
?>
d3ut3r
Tak naprawdę to lepiej to zrobić od początku smile.gif zmienne $id, $dzial, $search zapewne pochodzą z jakiegoś formularza/linku sprawdź czy przesłane były za pomocą metody post czy get i zamień odpowiednio na $_GET['zmienna'] lub $_POST['zmienna']. Zadbaj też o bezpieczeństwo skryptu.
el_conejo
Wreszcie problem rozwiązany!

W kilku plikach php zauważyłem długie zmienne oraz kod php w stylu <? kod php ?>. W związku z tym w konfiguracji PHP włączyłem opcje REGISTER_GLOBALS, SHORT_OPEN_TAG oraz REGISTER_LONG_ARRAYS.
Powyższe opcje wprowadziłem do pliku .htaccess i umieściłem go w głównym katalogu strony, przez co ustawienia te działają tylko w obrębie danej strony www.
Nie jest to zbyt bezpieczna praktyka, ale z przepisaniem kodu byłby większy problem.

Dziękuję wszystkim za pomoc i pozdrawiam

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.