Avatar billede sorenmh Nybegynder
08. januar 2006 - 19:24 Der er 19 kommentarer og
1 løsning

Migrering til PHP5

Er der nogen der har nogen erfaring med migrering fra PHP4 til PHP5?

Helt specifikt har jeg et problem med OOP, hvor der jo er sket meget siden PHP4.
Da man i PHP5 nu skal benytte enten public/private/protected til at definere sine klassevariable har jeg et problem med den gamle syntaks fra PHP4, hvor man erklærer dem med var.
Findes der en måde at omgå dette problem med?

Det skal egentlig bare være en midlertidig løsning, da alle klasser skal konverteres til PHP5. Kan man få PHP5 til at lave dem til public som standard?
Avatar billede coderdk Praktikant
08. januar 2006 - 21:59 #1
Hvad præcis har du problemer med? Jeg har en del gamle PHP4-klasser som kører helt uden problemer i PHP5. Disse bruger også var osv, og ingen private etc...
I langt de fleste tilfælde burde alt som kørte i PHP4 køre i PHP5.
Avatar billede rednex Nybegynder
09. januar 2006 - 00:07 #2
Du kan stadig benytte PHP4 syntax til dine klasser. Hvis ikke du har angivet andet, vil metoder og variable være public. Det samme gælder for constructoren. Hvis PHP5's __construct() ikke findes benytter den PHP4 constructoren med klassens navn.
Avatar billede rednex Nybegynder
09. januar 2006 - 00:25 #3
Kom lige i tanker om en (mere eller mindre) væsentlig ændring mellem OO i PHP4 og PHP5. I PHP5 bliver objekter altid 'passed by reference', hvor de normalt blev kopieret i PHP4. Det svarer til at bruge &-operatoren.

Du kan i øvrigt læse mere om ændringer mellem PHP4 og PHP5 hos Zend: http://www.zend.com/php5/migration.php
Avatar billede sorenmh Nybegynder
09. januar 2006 - 18:15 #4
Problemet er at PHP spytter tusindvis af fejlbeskeder ud, hvor den brokker sig over at jeg bruger "var" i stedet for PPP i erklæringen af klasse variable. Jeg fandt ud af at jeg skulle ændre i error reporting og ekskludere E_STRICT fejlbeskeder, men syntes ikke at dette rykkede ved noget. Fandt senere ud af at PHP ignorerer min php.ini fil.
Nu er det store spørgsmål, hvorfor gør den det og hvordan får jeg den til at læse den?
Tager jeg en phpinfo(); så kan jeg se at PHP har den rigtige path til filen ("/etc/php.ini"), men den læser ikke mine konfigurationsdirektiver.

Problemet med passed by reference kan løses ved at aktivere zend.ze1_compatibility_mode i php.ini, så det er ikke noget problem, hvis blot min php.ini fil bliver læst.

Nogen idéer?

Ps. php.ini har følgende rettigheder: -rwxr--r-- og er ejet af root. Jeg kører et fedora system uden SELinux. Apache2 og PHP5 er kompileret fra bunden med følgende compile options:
'./configure' '--with-apxs2=/usr/local/apache2/bin/apxs' '--prefix=/usr' '--with-regex=php' '--with-config-file-path=/etc' '--enable-memory-limit' '--with-pear=/usr/share/php' '--enable-ftp' '--enable-sockets' '--with-mime-magic=/usr/share/file/magic.mime' '--with-mysql=/usr/lib/mysql' '--enable-track-vars' '--enable-safe-mode' '--enable-magic-quotes' '--disable-short-tags' '--enable-trans-sid' '--with-zlib' '--with-bz2' '--enable-ftp' '--with-dom=shared' '--with-xmlrpc' '--enable-yp' '--with-gd' '--enable-gd-native-ttf' '--with-png' '--with-jpeg-dir=/usr/lib' '--enable-mbstring=da' '--enable-mbstr-enc-trans' '--enable-mbregex' '--enable-calendar' '--with-dbase' '--with-gd' '--with-freetype' '--enable-gd-native-ttf' '--with-jpeg-dir=/usr/local' '--with-zlib-dir=/usr/local' '--with-openssl=/usr' '--with-pdo-mysql=/usr/local' '--with-curl' '--with-mm=/usr/local/lib'
Avatar billede rednex Nybegynder
09. januar 2006 - 18:30 #5
Har du husket at restarte Apache efter du har ændret php.ini?

Når du kører PHP som apache module, så er du nødt til at restarte Apache hver gang du ændrer i php.ini. Det er det eneste jeg lige kan komme i tanker om.
Avatar billede sorenmh Nybegynder
09. januar 2006 - 18:33 #6
Ja, det er sket en del gange efterhånden.
Jeg tænkte på mm modulet kunne finde på at cache mine konfigurationsindstillinger?
Avatar billede rednex Nybegynder
09. januar 2006 - 18:43 #7
Jeg kører selv med PHP5 på en Apache2 under Debian Sarge, og jeg har aldrig været ude for at den ikke ville sluge mine rettelser efter en restart.

Jeg er virkelig blank her, så det må næsten betyde at det er noget tåbeligt simpelt :o) Nu har du husket at fjerne ; foran de linie du har ændret, ikk'?
Avatar billede sorenmh Nybegynder
09. januar 2006 - 20:46 #8
Udpluk fra phpinfo.php:
Configuration File (php.ini) Path     /etc/php5/php.ini

Indhold af /etc/php5/php.ini:
[PHP]
engine = Off

Og alligevel vises alle sider (og ja, der er genstartet).
Jeg har forsøgt at slette alt hvad der har med PHP at gøre på hele maskinen, men uden held.
Avatar billede rednex Nybegynder
09. januar 2006 - 20:57 #9
Prøv lige at stoppe Apache og kør en `ps aux | grep apache`. Det ser godt nok underligt ud.
Avatar billede sorenmh Nybegynder
09. januar 2006 - 21:01 #10
ps aux | grep apache
root    13960  0.0  0.3  3760  688 pts/2    S+  21:00  0:00 grep apache

Der er intet at se.

Jeg eksperimenterer i øjeblikket med forskellige compile options.
Avatar billede rednex Nybegynder
09. januar 2006 - 21:07 #11
Du kører ikke apache i et jail eller noget vel?
Avatar billede sorenmh Nybegynder
09. januar 2006 - 21:15 #12
Det skule jeg da ikke mene. Det kan man da kun i FreeBSD kan man ikke?

Den er kompileret med følgende og det er en Apache 2.2:
./configure \
'--enable-so' \
'--enable-rewrite=shared' \
'--sysconfdir=/etc/httpd' \
'--enable-expires' \
'--enable-headers' \
'--enable-mime-magic' \
'--with-mpm=prefork'
Avatar billede sorenmh Nybegynder
09. januar 2006 - 21:16 #13
Ville det hjælpe hvis jeg kompilerede PHP ind i Apache 1.3 i stedet?
Avatar billede rednex Nybegynder
09. januar 2006 - 21:26 #14
Nej, du kan også lave jails i Linux. Men hvis du ikke selv har sat et jail op, så er jeg ret sikker på at der ikke er et :o)

Min eneste bemærkning til din configure er at det ikke er nødvendigt at indkapsle argumenterne i '.

Jeg må indrømme at det her er FOR underligt, så du kan da godt prøve med Apache 1.3 i stedet. Ellers kan du måske prøve at køre PHP som CGI og se om den virker bedre.
Avatar billede coderdk Praktikant
09. januar 2006 - 21:39 #15
(jails bliver også kaldt for chroot-jails eller blot chroot)

Du skriver: "så kan jeg se at PHP har den rigtige path til filen ("/etc/php.ini")"

Men længere nede: "Configuration File (php.ini) Path    /etc/php5/php.ini"

Har du rettet i den rigtige?
Avatar billede sorenmh Nybegynder
09. januar 2006 - 22:04 #16
Ja, det er rettet.
Det er fordi at jeg har jongleret lidt frem og tilbage med PHP4 og PHP5, så jeg havde behov for to forskellige php.ini'er.

Det her virkede for et par dage siden og jeg fatter simpelthen ikke hvad der er gået galt, siden at den opfører sig så mærkeligt. Jeg mistænker lidt Apache for at være problemet.
Avatar billede fangel Nybegynder
14. januar 2006 - 22:53 #17
Med hensyn til de "var is deprecated" beskeder du får, så er det fordi error-reporting indeholder E_STRICT

E_STRICT får PHP til at komme med kommentare om mulige deprecations, forbedringer og andet... i PHP 5.0.x udsender "var" en notice m. deprecation, men i PHP 5.1 er dette iirc ændret til at var bare er et alias for public, så ingen notice længere..

--

Udover det, så er stort set ingen funktioner ændret mellem 4 og 5, så ja - en af de største forskelle er faktisk pass-by-reference af objekter...

Fangel
Avatar billede sorenmh Nybegynder
15. januar 2006 - 12:39 #18
Jep, den er jeg godt med på. Men jeg definerer jo at E_STRICT ikke skal vises, men den gør det alligevel:

error_reporting  =  E_ALL & ~E_NOTICE & ~E_STRICT

Den læser php.ini nu, men den gør ikke som jeg har skrevet i error_reporting.
Avatar billede sorenmh Nybegynder
18. august 2010 - 20:27 #19
Eksperten har bedt mig om at lukke indlægget, men ved ikke lige hvordan man gør det.
Nogen forslag?
Avatar billede sorenmh Nybegynder
18. august 2010 - 20:28 #20
Ah, det var fordi der manglede et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester