PHP 5.4 für PHP 5.6 lauffähig machen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 04.10.2016 08:24:10

Hallo,

ich schlage mich gerade mit Gemeinschaft 3.2 https://www.alternative-solution.de/gs3 auf einem Raspberry Pi3 mit Debian Jessie herum. Ich hatte gelesen, dass Raspberry mit dieser Version und Jessie lauffähig sei. Problem bereiten jetzt aber die PHP-Scripte, die für PHP 5.4 und MySQL 5.5 konzeptioniert sind. Ich habe mit Jessie PHP 5.6 installiert.
Jetzt finde ich in den Logfiles Einträge wie

Code: Alles auswählen

[ERROR] sbin/gs-queuelog-to-db:  76: PHP: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in lib/yadb/drv/mysql.php on li
ne 144
Die Internetsuche hat mir http://stackoverflow.com/questions/1394 ... use-mysqli hervor gebracht und als eine Lösung, mysql_connect() gegen pdo_connect() auszutauschen. Habe ich auch in dieser Datei gemacht. Allerdings bekomme ich dann

Code: Alles auswählen

 [ERROR] inc/util.php: 154: PHP: Call to undefined function pdo_connect() in lib/yadb/drv/mysql.php on line 144
Was muss ich alles ersetzen, damit alte PHP-5.4-Scripte auf PHP 5.6 lauffähig werden.

Grüße

Wambui

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 05.10.2016 19:11:44

Ich habe das versucht so zu lösen:

Code: Alles auswählen

touch /etc/apt/sources.list.d/wheezy.list
echo "deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi" >> /etc/apt/sources.list.d/wheezy.list
echo "deb-src http://archive.raspbian.org/raspbian/ wheezy main contrib non-free rpi" >> /etc/apt/sources.list.d/wheezy.list
echo "deb http://ftp2.de.debian.org/debian/ wheezy main" >> /etc/apt/sources.list.d/wheezy.list
echo "deb-src http://ftp2.de.debian.org/debian/ wheezy main" >> /etc/apt/sources.list.d/wheezy.list
apt-get update
apt-get install deb-multimedia-keyring

gpg --recv-keys 8B48AD6246925553 && gpg --export 8B48AD6246925553 |apt-key add -
gpg --recv-keys 7638D0442B90D010 && gpg --export 7638D0442B90D010 |apt-key add -
gpg --recv-keys 6FB2A1C265FFB764 && gpg --export 6FB2A1C265FFB764 |apt-key add -
apt-get update

Code: Alles auswählen

vi /etc/apt/preferences.d/php5

Code: Alles auswählen

Package: php5*
Pin: release a=oldstable
Pin-Priority: 700

Package: php-*
Pin: release a=oldstable
Pin-Priority: 700

Code: Alles auswählen

apt-get update
apt-get install php5=5.4.45-0+deb7u5
apt-get install php5-common=5.4.45-0+deb7u5
apt-get install php5-mysql=5.4.45-0+deb7u5
apt-get install php5-ldap=5.4.45-0+deb7u5
Mit dem Resultat, dass zwar die Fehler weg sind in den Logfiles, aber auf der Website im Browser nur der Inhalt der PHp-Scripte angezeigt wird.
Hat jemand eine Lösung dafür?

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Meillo » 05.10.2016 23:47:34

Dass die mysql-Extension deprecated ist, ist erstmal nicht schlimm. Sie funktioniert trotzdem noch. (Die deprecated-Meldung kannst du irgendwie abschalten.)

Du musst dir nur im Klaren sein, dass die Extension zukuenftig entfernt werden wird (naemlich in PHP 7). Bis dahin musst du deine Scripte konvertiert haben. Dazu gibt's aber viele Anleitungen und sogar Scripte, die einen Grossteil der Aufgabe automatisch erledigen.
Use ed once in a while!

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 06.10.2016 08:02:16

Meillo hat geschrieben:Dass die mysql-Extension deprecated ist, ist erstmal nicht schlimm. Sie funktioniert trotzdem noch. (Die deprecated-Meldung kannst du irgendwie abschalten.)

Du musst dir nur im Klaren sein, dass die Extension zukuenftig entfernt werden wird (naemlich in PHP 7). Bis dahin musst du deine Scripte konvertiert haben. Dazu gibt's aber viele Anleitungen und sogar Scripte, die einen Grossteil der Aufgabe automatisch erledigen.
Das ist mir bewußt. Das sind nur viele Scripte, die von Ammoa Gemeinschaft schlecht, eigentlich gar nicht, dokumentiert wurden. Ich kenne mich mit Java aus, aber nicht mit PHP. Somit wäre es mir eine Hilfe, wenn ich weiß, welche Funktionen ich wie mit sed ersetzen muss.

Wie gesagt die Fehler sind mit der alten Version zwar verschwunden und die Scripte laufen durch, aber die Darstellung ist keine mehr.

Besten Dank,

Wambui

Benutzeravatar
heisenberg
Beiträge: 3532
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von heisenberg » 06.10.2016 08:17:00

welche Funktionen ich wie mit sed ersetzen muss.
Mit sed ersetzen ist da nicht. mysqli / PDO haben wahrscheinlich nicht nur andere Parameter, sondern auch andere Befehlsabfolgen(So genau habe ich das jetzt nicht im Kopf).

Ich würde vermuten, Du Gemeinschaft noch problemlos mit PHP 5.6 betreiben. Die Version, bei der dann die alten Funktionen rausfliegen ist - wie Meillo bereits angemerkt hat - PHP 7.

Dass bei Dir der PHP-Quellcode angezeigt wird, hängt vermutlich daran, dass Du da versehentlich irgendwelche PHP-Module für den Apache deinstalliert hast, oder die PHP-Apache Konfiguration jetzt kaputt ist.

Die Funktionen zu finden, die bei PHP jeweils entfernt werden, dabei wird Dir google nützlich sein:

Google: php+incompatible+changes
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Meillo » 06.10.2016 08:57:24

heisenberg hat geschrieben:
welche Funktionen ich wie mit sed ersetzen muss.
Mit sed ersetzen ist da nicht. mysqli / PDO haben wahrscheinlich nicht nur andere Parameter, sondern auch andere Befehlsabfolgen(So genau habe ich das jetzt nicht im Kopf).
Mysqli ist schon sehr aehnlich, aber es reicht auch nicht aus, bloss die Funktionsnamen zu ersetzen. Z.T. ist die Parameterreihenfolge anders, z.T. gibt es fuer manche Funktionen keine 1:1-Entsprechung. Such mal nach ``php mysql mysqli converter'' im Web. Da findest du eine Menge.

PDO scheint mir ganz anders strukturiert zu sein, aber damit habe ich keine Erfahrungen.
Use ed once in a while!

Benutzeravatar
beLI3VeR
Beiträge: 535
Registriert: 30.08.2005 16:56:43
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von beLI3VeR » 06.10.2016 10:17:53

PDO basiert auf OPP.
Das tut MySQL in dem Sinne erstmal nicht.

Um die helfen zu können, benötige ich einfach ein paar mehr Infos, welche Funktionen du zum Beispiel bis jetzt nutzt?
Lieben Gruß
beLI3VeR

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 06.10.2016 10:33:28

Ich habe das jetzt rückgängig gemacht. Problem war libapache2-mod-php5 (5.4.45-0+deb7u5), die ließ sich nicht installieren ohne tiefgreifende Änderungen vorzunehmen.
heisenberg hat geschrieben:
welche Funktionen ich wie mit sed ersetzen muss.
Ich würde vermuten, Du Gemeinschaft noch problemlos mit PHP 5.6 betreiben. Die Version, bei der dann die alten Funktionen rausfliegen ist - wie Meillo bereits angemerkt hat - PHP 7.
So läuft zwar wieder die GUI, dafür kriege ich dauerhaft

Code: Alles auswählen

2016-10-06 10:12:13 [ERROR] sbin/gs-queuelog-to-db:  76: PHP: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in lib/yadb/drv/mysql.php on line 144
Die angemahnte Stelle ist:

Code: Alles auswählen

if (YADB_PHPVER >= 40300) {
                        $clientFlags = 0;
                        // no connection compression for localhost:
                        /*
                        if (
                                $this->_host !== null &&
                                $this->_host !== '' &&
                                $this->_host !== 'localhost'
                        ) $clientFlags += MYSQL_CLIENT_COMPRESS;
                        */

                        if (! @$this->_drvOpts['reuse']) {
                                [b]$this->_conn = @ mysql_connect( $host, $this->_user, $this->_pwd, true, $clientFlags );[/b]
                                // always force a new connection because we might
                                // experience unexpected behaviour if we re-used
                                // an existing one - especially with transactions
                                // or different character sets
                        } else {
                                $this->_conn = @ mysql_pConnect( $host, $this->_user, $this->_pwd, $clientFlags );
                        }

                } elseif (YADB_PHPVER >= 40200) {
                        if (! @$this->_drvOpts['reuse'])
                                $this->_conn = @ mysql_connect( $host, $this->_user, $this->_pwd, true );
                        else
                                $this->_conn = @ mysql_pConnect( $host, $this->_user, $this->_pwd );

                } else {
                        if (! @$this->_drvOpts['reuse'])
                                $this->_conn = @ mysql_connect( $host, $this->_user, $this->_pwd );
                        else
                                $this->_conn = @ mysql_pConnect( $host, $this->_user, $this->_pwd );
                }
So macht GS irgendwie nicht weiter.
Ich muss das jetzt alles mal sortieren, wie gesagt, ich kenne mich mit PHP nicht aus. Der Entwickler Sascha Daniels schwört auf Wheezy weil Haylafax mit Jessie nicht funktioniere. Und ich müßte erstmal ausprobieren ob raspbain-Wheezy überhaupt noch auf Raspberry Pi 3 lauffähig ist.
Da kriege ich schon eine Wut auf die Telekom mit ihrer ISDN-IP-Migration. Vorher lief alles wunderbar mit ISDN-Gemeinschaft/Asterisk und OpenStage40-Sip. Und weil ich offengesagt das Autoprovioning und das problemlose An- und Abmelden des Telefons an unterschiedliche Rufnummern schätze, wollte ich zumindest übergangsweise das Ganze mit Gemeinschaft wieder realisieren, bis ich diese Features auch mit einem reinen Asterisk hinbekomme.

Jedenfalls besten Dank für die ausführlichen Informationen

Wambui

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 06.10.2016 10:38:14

beLI3VeR hat geschrieben:PDO basiert auf OPP.
Das tut MySQL in dem Sinne erstmal nicht.

Um die helfen zu können, benötige ich einfach ein paar mehr Infos, welche Funktionen du zum Beispiel bis jetzt nutzt?
Das habe ich gerade in der vorherigen Antwort auszugsweise gepostet. Das wird aber sicherlich mehr sein, sobald diese Stelle verarztet wurde.Das komplete Script ist hier
https://github.com/amooma/GS3/blob/mast ... /mysql.php zu finden.

Grüße
Wambui

Benutzeravatar
beLI3VeR
Beiträge: 535
Registriert: 30.08.2005 16:56:43
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von beLI3VeR » 06.10.2016 11:33:00

Das @ zeichen muss direkt dran sein, also @mysql_connect.
Lieben Gruß
beLI3VeR

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 06.10.2016 12:03:12

beLI3VeR hat geschrieben:Das @ zeichen muss direkt dran sein, also @mysql_connect.
Danke für den Hinweis.
Das ist ja schon ein Schlamperladen bei dem Gemeinschaft-Entwickler. Das dem das nicht auffällt, denn dort habe ich die selbe Frage gestellt, aber nur Rechtfertigungen gehört.

Deswegen schätze dieses Forum, hier sitzen immer noch Leute, die mit Herzblut dabei sind und gute Feedbacks anbieten. Dieser Dopamin-Schub muss einfach mal sein.

Grüße
Wambui

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Meillo » 06.10.2016 12:03:59

beLI3VeR hat geschrieben:Das @ zeichen muss direkt dran sein, also @mysql_connect.
Das @-Zeichen sollte gar nicht dran sein. ;-)

Wenn man deprecated-Warnings unterdruecken will, dann loest man das besser mit error_reporting() und E_DEPRECATED.
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 3532
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von heisenberg » 06.10.2016 12:12:23

Wambui hat geschrieben:Das ist ja schon ein Schlamperladen bei dem Gemeinschaft-Entwickler. Das dem das nicht auffällt, denn dort habe ich die selbe Frage gestellt, aber nur Rechtfertigungen gehört.
Genau! Dass muss man einfach mal ganz deutlich sagen! Wo bleibt denn da das Recht auf beste, kostenfreie, hochqualitative Software mit bester Dokumentation und persönlicher unbezahlter Unterstützung vor Ort? Eine Frechheit ist das aber auch.

Wenn Du das Projekt unterstützen willst, dann kannst Du das Projekt ja mal auf mysqli umstellen und einen Patch einreichen. Gemeinschaft ist nämlich eine Software die von einer Firma(amooma) entwickelt und als Open Source zur Verfügung gestellt wurde. Nachdem sich die Firma jetzt anderen Tätigkeitsfeldern zugewandt hat, hat sich Sascha Daniels(https://www.alternative-solution.de) bereit erklärt, die Software weiterhin in seiner Freizeit ohne Bezahlung aufrecht zu erhalten. Das ist schon mal eine ganze Menge. Dafür wird er jetzt von Dir als Schlamperladen beschimpft? Na vielen Dank!
Jede Rohheit hat ihren Ursprung in einer Schwäche.

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 06.10.2016 12:19:59

heisenberg hat geschrieben:Wenn Du das Projekt unterstützen willst, dann kannst Du das Projekt ja mal auf mysqli umstellen und einen Patch einreichen.
Würde ich liebend gerne. Allerdings kann ich kein PHP programmieren. Zweitens ist das schlecht dokumentiert, bzw. alles Andere als nach "Clean Code" programmiert. Der Code liest sich alles Andere als angenehm (keine aussagekräftigen Variablen, etc.).

Benutzeravatar
sys_op
Beiträge: 672
Registriert: 17.09.2007 19:10:47
Lizenz eigener Beiträge: GNU General Public License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von sys_op » 07.10.2016 12:34:39

Zunächts ist das, wie oben schon erwähnt, über das error_reporting zu lösen, dann kommen diese Warnungen nicht mehr.
Dein Script mal eben auf mysqli oder PDO umzustellen kannst du knicken, das funktioniert nicht im Vorbeigehen.

Ich habe mir einen wrapper gebaut, der, wenn die mysql Extension nicht mehr da ist, die Extension automatisch durch Funktionen ersetzt und auf mysqli verbiegt. Das einfügen einer Zeile in den entsprechenden Scripten müsste normalerweise ausreichen. Allerdings habe ich das nur für jene Aufrufe gemacht, die ich in meinen Scripten auch brauche, kann daher nicht sagen, ob das mit deinem Script 100% funktionieren würde.

Bei Bedarf kannst du mir ja eine PM schicken.
gruss sys;-)

Benutzeravatar
Wambui
Beiträge: 120
Registriert: 03.08.2014 10:06:10
Lizenz eigener Beiträge: GNU Free Documentation License

Re: PHP 5.4 für PHP 5.6 lauffähig machen

Beitrag von Wambui » 07.10.2016 12:58:19

sys_op hat geschrieben:Zunächts ist das, wie oben schon erwähnt, über das error_reporting zu lösen, dann kommen diese Warnungen nicht mehr.
Dein Script mal eben auf mysqli oder PDO umzustellen kannst du knicken, das funktioniert nicht im Vorbeigehen.

Ich habe mir einen wrapper gebaut, der, wenn die mysql Extension nicht mehr da ist, die Extension automatisch durch Funktionen ersetzt und auf mysqli verbiegt. Das einfügen einer Zeile in den entsprechenden Scripten müsste normalerweise ausreichen. Allerdings habe ich das nur für jene Aufrufe gemacht, die ich in meinen Scripten auch brauche, kann daher nicht sagen, ob das mit deinem Script 100% funktionieren würde.

Bei Bedarf kannst du mir ja eine PM schicken.
Habe ich getan, interessieren würde mich das schon. Vielleicht wage ich mich an den Gemeinschaft-Code heran und baue den mal als CleanCode komplett nach. PHP dürfte ja leichter als Java sein.

Antworten