Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Uruchomienie Prediction Football na PHP 7
Forum PHP.pl > Forum > Przedszkole
jwr
Witam,

Posiadam oprogramowanie Prediction Football, które kilka lat temu było rozwijane przez John'a Astill'a. Tego projektu już nie ma w sieci. Musiałem zwiększyć wersję PHP na serwerze na PHP 7 i niestety to oprogramowanie przestało działać. Pojawiają się takie błędy:

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; UserType has a deprecated constructor in /home/xxx/websites/mojadomena.pl/typer/usertypeclass.php on line 9

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; User has a deprecated constructor in /home/xxx/websites/mojadomena.pl/typer/userclass.php on line 9

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Message has a deprecated constructor in /home/xxx/websites/mojadomena.pl/typer/msgclass.php on line 2

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; MessageList has a deprecated constructor in /home/xxx/websites/mojadomena.pl/typer/msgclass.php on line 36

Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; Dbase has a deprecated constructor in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 8

Fatal error: Uncaught Error: Call to undefined function mysql_pconnect() in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php:123 Stack trace: #0 /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php(55): Dbase->connect() #1 /home/xxx/websites/mojadomena.pl/typer/dbasedata.php(7): Dbase->Dbase() #2 /home/xxx/websites/mojadomena.pl/typer/index.php(11): require_once('/home/xxx/w...') #3 {main} thrown in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 123

usertypeclass.php:

  1. class UserType {
  2.  
  3. // Contructor for the user class.
  4. function UserType() {
  5. }


userclass.php:

  1. class User {
  2. // The basedir for this league
  3. var $basedir;


msgclass.php:

  1. class Message {
  2. // The message type e.g. Error, Warning, Info
  3. var $type;


  1. class MessageList {
  2. // Array of current messages.
  3. var $currentMessages;


dbasefunctions.php:

  1. class Dbase {
  2.  
  3. // MySQL Version number
  4. var $mysqlver;


Czy jest możliwe, aby to oprogramowanie działało na PHP 7?
Tomplus
Użyj zamiast:
  1. function UserType()


  1. public function __constructor()



a zamiast: mysql_pconnect("localhost", ...)
użyj:
mysqli_connect("p:locahost", ...); //oczywiście zamiast ... są kolejne wartości.

jwr
Jak zamieniłem w pliku usertypeclass.php tę linię:

  1. function UserType()


Na tę linię:

  1. public function __constructor()


To teraz tylko pojawia się ten błąd:

Fatal error: Uncaught Error: Call to undefined function mysql_pconnect() in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php:123 Stack trace: #0 /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php(55): Dbase->connect() #1 /home/xxx/websites/mojadomena.pl/typer/dbasedata.php(7): Dbase->Dbase() #2 /home/xxx/websites/mojadomena.pl/typer/index.php(11): require_once('/home/xxx/w...') #3 {main} thrown in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 123

W pliku dbasefunctions.php jest taki kod:

  1. function connect() {
  2. global $globalPersistent;
  3.  
  4. if ($globalPersistent == true) {
  5. $this->link = mysql_pconnect($this->host, $this->username, $this->password)
  6. or die("Could not connect to $this->host\n".mysql_error());
  7. } else {
  8. $this->link = mysql_connect($this->host, $this->username, $this->password)
  9. or die("Could not connect to $this->host\n".mysql_error());
  10. }
  11. mysql_query("set names 'latin1'");
  12. }


Cytat(Tomplus @ 5.08.2020, 23:45:23 ) *
a zamiast: mysql_pconnect("localhost", ...)
użyj:
mysqli_connect("p:locahost", ...); //oczywiście zamiast ... są kolejne wartości.


W tej 123 linii mam tylko zmienić mysql na mysqli? Czy we wszystkich liniach mam zmienić mysql na mysqli?

A w tych dwóch liniach: ($this->host, $this->username, $this->password) mam wprowadzić dane bazy danych?
viking
Musisz zmienić w każdym miejscu i możliwe że będzie się różnić kolejność argumentów. Rozszerzenia mysql od v7 nie ma.
Tomplus
Tak powinno być.
  1. mysqli_connect('p:' . $this->host, $this->username, $this->password);

jwr
Występuje taki błąd:

Parse error: syntax error, unexpected 'or' (T_LOGICAL_OR) in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 124

  1. function connect() {
  2. global $globalPersistent;
  3.  
  4. if ($globalPersistent == true) {
  5. $this->link = mysqli_connect('p:' . $this->host, $this->username, $this->password);
  6. or die("Could not connect to $this->host\n".mysqli_error());
  7. } else {
  8. $this->link = mysqli_connect('p:' . $this->host, $this->username, $this->password);
  9. or die("Could not connect to $this->host\n".mysqli_error());
  10. }


Kod w 124 linii w pliku:

  1. or die("Could not connect to $this->host\n".mysqli_error());
viking
Żeby się zabrać za takie przepisanie trzeba znać podstawy PHP chociaż. Masz średniki w 5 i 8 linii. Będziesz tak po kolei każdy błąd wklejał? To trochę ci jeszcze zejdzie.
Tomplus
I jeszcze:
wkleiłeś bezwiednie to co podałem, bo ja sam myślałem że jest tylko jedna funkcja do połaczenia.

ta litera P przed hostem oznacza Persistent,
więc jeżeli drugie połaczenie nie potrzebuje trwałego polaczenia to należy pominac dopisywanie P przed hostem.

Dlatego:

  1. function connect() {
  2. global $globalPersistent;
  3.  
  4. if ($globalPersistent == true) {
  5. $this->link = mysqli_connect('p:' . $this->host, $this->username, $this->password);
  6. or die("Could not connect to $this->host\n".mysqli_error());
  7. } else {
  8. $this->link = mysqli_connect($this->host, $this->username, $this->password);
  9. or die("Could not connect to $this->host\n".mysqli_error());
  10. }
  11. }


a najlepiej to skrócić:
  1. function connect() {
  2. global $globalPersistent;
  3. $persistent =($globalPersistent == true) ? 'p:' : '';
  4. $this->link = mysqli_connect($persistent . $this->host, $this->username, $this->password);
  5. or die("Could not connect to $this->host\n".mysqli_error());
  6. }

jwr
Tomplus,

Niestety nie działa:

Parse error: syntax error, unexpected 'or' (T_LOGICAL_OR) in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 123

  1. or die("Could not connect to $this->host\n".mysqli_error());
nospor
Przeciez viking napisal: sredniki przed OR sa zbedne
jwr
Po wprowadzeniu tego kodu:

  1. function connect() {
  2. global $globalPersistent;
  3. $persistent =($globalPersistent == true) ? 'p:' : '';
  4. $this->link = mysqli_connect($persistent . $this->host, $this->username, $this->password)
  5. or die("Could not connect to $this->host\n".mysqli_error());
  6. }
  7. mysql_query("set names 'latin1'");
  8. }


Bez myślnika na końcu:

  1. $this->link = mysqli_connect($persistent . $this->host, $this->username, $this->password)


Teraz pojawia się taki błąd:

Parse error: syntax error, unexpected 'mysql_query' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in /home/xxx/websites/mojadomena.pl/typer/dbasefunctions.php on line 125

125 linia:

  1. mysql_query("set names 'latin1'");
viking
Przeczytaj jeszcze raz mój post #4. Zwłaszcza ostatnie zdanie. Zaraz bana dostaniesz smile.gif Mod łaskawy ale bez przesady.
nospor
Bo wywaliles
mysql_query("set names 'latin1'");
poza funkcje

Cytat
Mod łaskawy ale bez przesady.

Mod ostatni dzien dzis w pracy przed urlopem, to szczesliwy wink.gif
jwr
Cytat(viking @ 7.08.2020, 12:38:27 ) *
Przeczytaj jeszcze raz mój post #4. Zwłaszcza ostatnie zdanie. Zaraz bana dostaniesz smile.gif Mod łaskawy ale bez przesady.


Czemu masz chamskie zachowanie do mnie? Wydaje się, że to forum jest od pomocy. Założyłem kulturalnie temat i poprosiłem o pomoc. Masz jakiś problem ze sobą? facepalmxd.gif

Regulmin forum przedstawia:

3. Zasady panujące na forum:

f. Każdy użytkownik forum powinien starać się traktować innych uczestników dyskusji tak samo, jak sam chciałby być traktowany. Oczekując szacunku, pamiętajmy o okazywaniu go innym.

3. Odpowiadanie na pytania:

a. Odpisując na czyjeś pytanie starajmy się być konstruktywni i pomocni. Komentarze typu: "popieram przedmówcę" niewiele wnoszą do dyskusji.
b. Odpowiadając trzymajmy się ściśle tematu. Pytającemu na pewno na tym zależy.
c. Jeżeli nie znasz odpowiedzi, nie pisz nic. Po prostu czekaj.

4. Formułowanie treści wiadomości (postów).

a. Bądź profesjonalny i ostrożny w tym co mówisz o innych. Unikaj jak ognia obrażania uczestników dyskusji. Ostateczny skutek takich działań może być tylko jeden: zablokowanie Tobie dostępu do forum przez administratora.

b. Bądź ostrożny pisząc z humorem lub sarkazmem. Bez osobistego kontaktu Twój żart może być odebrany jako złośliwa krytyka.

@nospor,

Nie zmieniałem nic w tej linii. Ta linia jest tak ustawiona w tym kodzie od początku.

Oryginalny kod:

  1. function connect() {
  2. global $globalPersistent;
  3.  
  4. if ($globalPersistent == true) {
  5. $this->link = mysql_pconnect($this->host, $this->username, $this->password)
  6. or die("Could not connect to $this->host\n".mysql_error());
  7. } else {
  8. $this->link = mysql_connect($this->host, $this->username, $this->password)
  9. or die("Could not connect to $this->host\n".mysql_error());
  10. }
  11. mysql_query("set names 'latin1'");
  12. }
viking
W którym niby miejscu tego posta jestem chamski? Ty jesteś niegrzeczny w stosunku do nas gdy zamiast czytać i poprawić co ci parser mówi traktujesz nas jak interaktywną pomoc. To zaledwie jedna metoda. Metod i ogólnie kodu jest pewnie od groma. Jak ty sobie wyobrażasz przepisanie tego jeśli brakuje ci elementarnych podstaw?
nospor
Ignorujesz to co pisze viking i masz czelnosc jego chamskim nazywac.... no cos tu jest nie tak o to raczej nie z zachowaniem vikinga. Ok, mozesz czegos nie rozumiec, ale to nie powod by ignorowac czyjes odpowiedzi na twoj problem i latac z tym samym co 5 razy.

Cytat
Nie zmieniałem nic w tej linii. Ta linia jest tak ustawiona w tym kodzie od początku.

Linii moze i nie zmieniales. Ale zmieniles jej LOKALIZACJE co ladnie widac na kodzie oryginalnym i kodzie po twoich zmianach. Teraz ta linia jest poza funkcja wiec zamiast mnie poprawiac zacznij czytac co sie do ciebie mowi. I kto tu znowu jest "chamski"? wink.gif
Tomplus
Cytat(nospor @ 7.08.2020, 12:09:39 ) *
Przeciez viking napisal: sredniki przed OR sa zbedne


ja nawet nie zauważyłem tego średnika biggrin.gif
Gdybym użył w kodzie, to bym zauważył.


@jwr
Wszystkie funkcje zaczynające się od mysql_ muszą być zamienione na
  1. mysqli_
.

Co do set names 'latin1' lepiej ustawić
  1. utf8
jako domyślne, bo później będziesz miał problem z kodowaniem.
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.