PHP: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(44 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 8: Zeile 8:


devPHP wird sichlich in Kürze die PHP für Eclipse abgelöst werden (Stand 2006).
devPHP wird sichlich in Kürze die PHP für Eclipse abgelöst werden (Stand 2006).
== PHP auf einer OrgaMon Client-Installation ==
Der Geoarbeitsplatz verwendet php um die Webservices der Firma Map&Guide zur Geolokalisierung anzusprechen.<br>
# Von php.net ein Windows Binary einer aktuellen Version herunterladen.
# nach C:\Programme\OrgaMon\ entpacken.
# WICHTIG: die gds32.dll in C:\Programme\OrgaMon wieder löschen, diese veraltete Version wird bei php mitgeliefert.


== PHP auf dem OrgaMon Server ==
== PHP auf dem OrgaMon Server ==


Der WebShop des OrgaMons läuft auf dem OrgaMon - Server. Er ist in PHP 5.x implementiert. Auch die Internet-Ablagen verwenden ein PHP Script, um die abgelegten ZIP-Dateien aufzulisten. Dazu muss auf dem Server Apache2 und PHP installiert sein.
Der TWebShop des OrgaMons läuft auf dem OrgaMon - Server. Er ist in PHP 5.x implementiert. Auch die Internet-Ablagen verwenden ein PHP Script, um die abgelegten ZIP-Dateien aufzulisten. Dazu muss auf dem Server Apache2 und PHP5 installiert sein.


Installierte php Version muss nicht deinstalliert werden!
== zusätzliche PHP-Extensions ==


'''1. php.ini sichern'''
  zypper install php5-mcrypt
  : cd /etc
  zypper install php5-soap
  : cp php.ini php.alt.ini


'''2. PHP downloaden'''
== Session Verzeichnis ==
cd /usr/local/src/
 
wget http://de3.php.net/get/php-5.2.1.tar.gz/from/this/mirror
  Verzeichnis namens "Sess" in C:\Programme\Apache Group\Apache\" oder im selben Verzeichnis wie "DocumentRoot" anlegen.
  In der Datei "php.ini" den Eintrag "session.save_path = " auf im ersten Falle


'''3. PHP auspacken'''
  session.save_path = C:/Programme/Apache Group/Apache/Sess
tar -xzf php-5.1.2.tar.gz
 
cd php-5.1.2
  abändern.


'''4. Per Yast nachinstallieren''' (je nachdem, ob benötigt) oder von '''ftp://ftp.suse.com/pub/suse'''
== PHP7 ==
flex (2.5.4.a installiert)
openssl-devel (0.9.7d installiert)
Apache2-devel (2.0.49 installiert)
Bison (1.875 installiert)
zlib-devel (1.2.1 installiert)
libxml2-devel (2.4.23 2.6.7 installiert)
libpng-devel (1.2.5 installiert)
t1lib-devel (1.3.1 installiert)
openldap2-devel (2.2.6 installiert)
libmcrypt-devel (2.5.7 installiert)
curl-devel (7.11.0 installiert)
freetype2-devel (2.17 installiert)
imap-devel (2002e installiert)
postgresql-devel (7.4.7 installiert)
ypbind (1.17.2 installiert)
mysql-devel (4.0.18 installiert)
Libjpeg (6b installiert)
Quellen:
<nowiki>ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/openssl-devel-0.9.7d-15.13.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/i386/9.2/suse/i586/openssl-0.9.7d-25.1.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/i386/9.2/suse/i586/openssl-devel-0.9.7d-25.1.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/cyrus-sasl-2.1.18-29.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/cyrus-sasl-devel-2.1.18-29.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/openldap2-devel-2.2.6-34.i586.rpm</nowiki>
<nowiki>ftp://ftp.suse.com/pub/suse/discontinued/i386/9.1/suse/i586/curl-devel-7.11.0-39.i586.rpm</nowiki>
Ab der Version 5.1.0 wird noch libxml2 und libxml2-devel ab Version 2.6.11 benötigt:
: wget <nowiki>ftp://xmlsoft.org/libxml2/libxml2-2.6.11-1.i386.rpm</nowiki>
: yast -i libxml2-2.6.11-1.i386.rpm
: wget <nowiki>ftp://xmlsoft.org/libxml2/libxml2-devel-2.6.11-1.i386.rpm</nowiki>
: yast -i libxml2-devel-2.6.11-1.i386.rpm


'''5. Konfigurieren'''
ich habe PHP7 RC6 folgendermasen zum Laufen gebracht.


./configure-Befehl von php_info() übernehmen oder unten kopieren.
* openSUSE 13.1 64 Bit installiert (als VM unter VirtualBox, Host ist openSUSE 42.1)
: cd /usr/local/src/php-5.1.2/
* incl. Commando-Zeilen Tools, C++ Entwicklung, Webserver
: ./configure --prefix=/usr --datadir=/usr/share/php --mandir=/usr/share/man --bindir=/usr/bin --libdir=/usr/share
* Mich über PHP7 beim OpenSUSE Build Serivce Informiert
  --includedir=/usr/include --sysconfdir=/etc --with-_lib=lib --with-config-file-path=/etc --with-exec-dir=/usr/lib/php/bin
** https://build.opensuse.org/package/show/devel:languages:php:php7/php7
  --disable-debug --enable-inline-optimization --enable-memory-limit --enable-magic-quotes --enable-safe-mode --disable-sigchild
* im yast folgendes Repository hinzugefügt
  --disable-ctype --enable-session --with-mysql --with-gd --with-jpeg-dir=/usr/lib --with-freetype-dir=/usr/lib --with-zlib
** <code>http://download.opensuse.org/repositories/devel:/languages:/php:/php7/openSUSE_13.1</code>
  --enable-ftp --disable-cli --without-pear --with-openssl --with-apxs2=/usr/sbin/apxs2-prefork i586-suse-linux
* im yast php7 nun installiert
* phpinfo(); lieferte eigentlich direkt den Erfolg
* weitere Module installiert, mcrypt, soap, ...


'''6. Apache stopppen'''
=== php7-interbase ===
: rcapache2 stop


'''7. Kompilieren'''
die interbase Erweiterung war nicht dabei, also per Hand
: make clean    // Nicht vergessen! Sonst gehts nicht !
: make


'''8. Installieren'''
* den interbase-classic Server installiert, ev. auch "-devel" Pakete nötig weis nicht mehr
: make install
* das Quelltext-Paket 'php-7.0.0RC7.tar.gz' von php.net geladen
* irgendwie den php das firebird in /opt/firebird installiert ist. Die Header-Dateien werden dort im ./include Verzeichnis gesucht.
* Diese waren aber bei mir im /urs/include/firebird, ok also einen Link erstellt:
** md /opt/firebird
** ln -s /usr/include/firebird /opt/firebird/include
* Nun ins ./ext/interbase Verzeichnis wechseln und dort
** phpize
** ./configure
** make
** make install


'''9. php.ini-dist kopieren'''
die interbase.so steht jetzt zur VErfügung, wird aber noch nicht geladen
: cd /usr/local/src/php-5.1.2/
: cp php.ini-dist /etc/php.ini


'''10. NUR BEI UPDATE PHP4 AUF PHP5: httpd.conf editieren'''
* joe /etc/php7/conf.d/interbase.ini


Die httpd.conf soll das PHP5-Modul laden, nicht mehr das PHP4-Modul. Diese Einstellung muss hier gemacht werden. Da stehen alle Module aufgelistet. Einfach in Zeile 133 aus PHP4 ein PHP5 machen.
  extension=interbase.so
: cd /etc/sysconfig
: joe apache2
 
'''11. NUR BEI UPDATE PHP4 AUF PHP5: DirectoryIndex bearbeiten'''
 
In Zeile 163 "index.php index.php5" hinzufügen.
: cd /etc/apache2/
: joe httpd.conf
 
'''12. Apache wieder starten'''
: rcapache2 start
 
 
'''13. php Commandozeile (cli)'''
 
Sollte unter Apache alles laufen, aber in der Shell ergibt <code>php --version</code> immer noch eine alte Version, so sollte die Kommandozeilen Version noch überschrieben werden: <code>raib90:~/php-5.0.4/sapi/cli # cp php /usr/bin/php</code>
 
'''14. Prüfen, welche Module da sind'''
 
* Im Apache: php_info ausführen und die Liste durchsehen
* In der Kommando-Zeile: <code>php -m</code> listet alle Module der cli VErsion von PHP auf. Es kann aber sein, dass Apache2 einen andere PHP benutzt.
 
== PHP Extension "interbase" bereitstellen ==
 
* Ermittle die PHP Versionsnummer, damit du weist welchen Source-Tar-Ball du ziehen must
 
php -v
 
* Lade vom Museum die Source-Code Distribution des PHP, in diesem Beispiel hat die Versionsprüfung 4.3.4 ergeben
 
wget http://museum.php.net/php4/php-4.3.4.tar.gz
gzip -d php-4.3.4.tar.gz
tar -xf php-4.3.4.tar
cd php-4.3.4
 
* Compiliere Dir selbst die Extension "interbase"
 
  ./configure --with-interbase=shared,/opt/firebird
make
 
# 32-bit: interbase.so m?jetzt in ./modules enststanden sein
cp modules/interbase.so /usr/lib/php/extensions
   
   
# 64-bit:
cp modules/interbase.so /usr/lib64/php5/extensions
* Nun interbase.so in das Extensions - Verzeichnis von PHP hochladen. Wo das ist steht in der /etc/php.ini
# SuSe 9.x
joe /etc/php.ini
# SuSE 10.2
joe /etc/php5/apache2/php.ini
Zeile im extensions Bereich zu den ganzen anderen Extensions hinzuf?
extension=interbase.so
Folgendes von "Off" auf "On" ab䮤ern:
register_globals = On
gaaanz unten folgendes hinzuf?
  [Interbase]
  [Interbase]
  ibase.timestampformat=%m-%d-%Y %H:%M:%S
ibase.dateformat=%m.%d.%Y
 
  ibase.timestampformat=%m.%d.%Y %H:%M:%S
den Apache 2 neu starten
 
rcapache2 restart
 
auf Fehler in der folgenden Datei achten:
 
/var/log/apache2/error_log
 
== PHP Extension "soap" bereitstellen ==


  $ cd /usr/src/php-5.0.5/ext/soap
* Jetzt muss apache2 noch merken das ein neues Modul gewünscht ist
  $ phpize
** systemctl restart apache2
  $ ./configure && make install


This executes without error and the extension is built and installed
=== php7-memcached ===
properly to my extensions directory[1]. I enable the module in an
extensions.ini file found in the config-file-scan-dir:


Alternativ dazu (siehe weiter unten) ist das PHP mit dem Modul soap zu compilieren:
* wget https://github.com/php-memcached-dev/php-memcached/archive/php7.zip
* ... in ein neues Verzeichnis auspacken ...
* phpize
* ./configure
* make
* make install
* joe /etc/php7/conf.d/memcached.ini


  --enable-soap
extension=memcached.so




* Jetzt muss apache2 noch merken das ein neues Modul gewünscht ist
** systemctl restart apache2


== PHP installieren ==
=== php7-xdebug ===


*PHP ist von der Seite "www.php.net" zu beziehen.  
* xdebug habe ich direkt von der xdebug Homepage geladen, da es in PHP 7.0.1 nicht mit dabei war
    -> http://www.php.net/downloads.php -> Downloadadresse Stand: 18.02.06
* ich habe es ins ./ext Verzeichnis eines kompletten php-7.0.1.tar.gz entpackt als wäre es eine mitgelieferte Extension
*Am besten  die neuste Version (in unserem Fall 5.1.2) als <u>.zip Datei</u> herunterladen (auch falls eine .exe Datei vorliegen sollte).
* phpize, ./configure, make, make install hat auch funktioniert
*Nach dem Download die Datei nach "C:\Programme\Php" entpacken.
* Im /etc/php7/conf.d habe ich xdebug.ini angelegt. Es hat nicht so den Standard-Inhalt da es eine "Zend" Extension ist!


Die Datei "C:\Programme\Php\php.ini-dist" oder besser "C:\Programme\Php\php.ini-recommended"
zend_extension=xdebug.so
wird ins "Windows"-Verzeichnis kopiert und <u>in "php.ini" umbenannt</u>.
->Wird ein Apache 2.0.x Server benutzt, müssen keine Dateien kopiert werden, sondern der Pfad  zur ini-Datei kann dem Apache in dessen conf-Datei angegeben werden,-> siehe nächstes Kapitel
   
   
<u>Fraglich, BITTE PRÜFEN</u>: Ausserdem muss "register_argc_argv = On" gesetzt werden. Dies ist in der "php.ini-recommended" auf "Off" gesetzt, um die Performance zu verbessern.
[xdebug]
xdebug.remote_enable=On
xdebug.remote_host=khao
xdebug.idekey=netbeans-xdebug


!!Fertig!!


*Weitere Informationen zur Installation von PHP stehen in der Datei "C:\Programme\Php\install.txt".
* Meine IDE läuft auf dem Rechner KHAO (Windows) und mein 13.1er hat den Hostname Virt42


== PHP konfigurieren ==
=== Status vom 23.11.2015 ===


Damit PHP auf Interbase/Firebird Datenbanken zugreifen kann, müssen die Routinen, die das ermöglichen, beim
* Shop läuft bei mäsiger Performance
Start von PHP als Erweiterung geladen werden. Dies geschieht mit Hilfe zweier Einträge in der "php.ini".
* Riessen Bug in ibase.php gefunden, es wurden zig Interbase Connections pro Seitenaufruf neu geöffnet
Erstens muss der Eintrag "extension_dir= " auf das Verzeichnis mit den Extension-Dlls gesetzt werden. Diese
* Der Player sollte in das Header-Template des WebShops dort wäre er passender
befinden sich standardmäßig im Verzeichnis "extensions". Falls PHP zum Beispiel in "C:\Programme\Php" installiert
* Die Static-Klassen sollten durchgängig programmiert werden
wurde, liegen die Erweiterungs-Dlls im Verzeichnis "C:\Programme\Php\extensions".
Der Eintrag in der "php.ini" lautet dann:
  <u>Win32</u>
  extension_dir = "C:\Programme\Php\ext"
  <u>Linux</u>
  extension_dir = "/usr/lib/php/extension"


Zweitens gibt es in der "php.ini" einen Abschnitt, der sich "Dynamic Extensions" nennt. Dort sind alle Erweiterungen in der Form ";extension=php_....dll" aufgeführt. Da ein Semikolon am Anfang steht, beachtet PHP diese Zeile nicht als Eintrag sondern als Kommentar. In der Zeile ";extension=php_interbase.dll" muss dieses Semikolon nun entfernt werden.
=== Status vom 25.11.2015 ===


  <u>Win32</u>
* Modul "memcached" lässt sich nun compilieren
  extension=php_interbase.dll
  extension=php_gd2.dll
  <u>Linux</u>
  extension=interbase.so


Der WebShop erfordert, dass Timestamps im richtigen Format übernommen werden. Dies geschieht durch folgende zwei Zeilen, die am besten ans Ende der "php.ini" gestellt werden:
=== Status vom 03.12.2015 ===
 
  [Interbase]
  ibase.timestampformat=%m-%d-%Y %H:%M:%S
 
Jetzt sollten die PHP-Routinen für die Interbase-Anbindung zur Verfügung stehen. Falls dies nicht so ist, liegt es vielleicht daran, das die "php.ini" im falschen Verzeichnis liegt  (siehe Ende vorletztes Kapitel) oder der Pfad im Eintrag "extension_dir=" falsch gesetzt ist.
 
<u>Achtung</u>: Nach einer Änderung muss der Apache-Webserver mit "Startmenü\Alle Programme\Apache HTTP Server\Control Apache Server\Restart" neu gestartet werden.
 
== Session Verzeichnis ==
 
  Verzeichnis namens "Sess" in C:\Programme\Apache Group\Apache\" oder im selben Verzeichnis wie "DocumentRoot" anlegen.
  In der Datei "php.ini" den Eintrag "session.save_path = " auf im ersten Falle
 
  session.save_path = C:/Programme/Apache Group/Apache/Sess
 
  ab䮤ern.
 
== PHP compilieren ==
 
* PHP runterladen, compilieren, installieren
 
###
### PHP downloaden
###
wget <nowiki>http://de3.php.net/get/php-5.2.1.tar.gz/from/this/mirror</nowiki>
###
### PHP auspacken
###
tar -xzf php-5.1.2.tar.gz
cd php-5.1.2
###
### PHP konfigurieren
###
<code>'./configure' '--prefix=/usr' '--datadir=/usr/share/php' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--libdir=/usr/share' '--includedir=/usr/include' '--sysconfdir=/etc' '--with-_lib=lib' '--with-config-file-path=/etc' '--with-exec-dir=/usr/lib/php/bin' '--disable-debug' '--enable-inline-optimization' '--enable-memory-limit' '--enable-magic-quotes' '--enable-safe-mode' '--disable-sigchild' '--disable-ctype' '--enable-session' '--with-mysql' '--with-gd' '--with-jpeg-dir=/usr/lib' '--with-freetype-dir=/usr/lib' '--with-zlib' '--enable-ftp' '--without-pear' '--with-openssl' '--with-apxs2=/usr/sbin/apxs2-prefork' 'i586-suse-linux' '--with-interbase' '--with-mcrypt' '--enable-soap'</code>


* Beispiel 2 (64 Bit)
* keine offenen Punkte mehr
* Optimierungen an der CodeBasis vorgenommen


<code>
=== Status vom 07.12.2015 ===
'./configure' '--prefix=/usr' '--datadir=/usr/share/php5' '--mandir=/usr/share/man' '--bindir=/usr/bin' '--with-libdir=lib64' '--includedir=/usr/include' '--sysconfdir=/etc/php5/apache2' '--with-config-file-path=/etc/php5/apache2' '--with-config-file-scan-dir=/etc/php5/conf.d' '--with-exec-dir=/usr/lib64/php5/bin' '--enable-libxml' '--enable-filter' '--enable-session' '--with-mm' '--with-pcre-regex=/usr' '--enable-xml' '--enable-simplexml' '--enable-spl' '--disable-debug' '--enable-memory-limit' '--with-interbase' '--with-mcrypt' '--with-zlib' '--enable-inline-optimization' '--enable-zend-multibyte' '--disable-rpath' '--with-apxs2=/usr/sbin/apxs2' '--disable-all'
</code>


-> geht nicht, mal wieder wegen apxs2
* PHP 7.0.0 installiert

Aktuelle Version vom 5. Januar 2016, 15:09 Uhr

PHP ist eine Scriptsprache und läuft auf dem gleichen Host wie der Apache Webserver ab. PHP ist eine Entwicklung der PHP Open Source Bewegung (http://php.net/). Sie wird vor allem im InterNet eingesetzt sobald statischer HTML-Inhalt nicht mehr ausreicht, und Ablauflogik benötigt wird. Dabei bittet der Apache das PHP Modul das entsprechende PHP Script (=Textdatei) mit den übertragenen Parametern auszuführen. Das Ergebnis des PHP Moduls wird an den Client rückübertragen.

PHP IDE

Zur Ansicht der PHP - Scripte (=Text Dateien) eignet sich DevPHP der Open Source Bewegung:

http://sourceforge.net/projects/devphp

devPHP wird sichlich in Kürze die PHP für Eclipse abgelöst werden (Stand 2006).

PHP auf dem OrgaMon Server

Der TWebShop des OrgaMons läuft auf dem OrgaMon - Server. Er ist in PHP 5.x implementiert. Auch die Internet-Ablagen verwenden ein PHP Script, um die abgelegten ZIP-Dateien aufzulisten. Dazu muss auf dem Server Apache2 und PHP5 installiert sein.

zusätzliche PHP-Extensions

zypper install php5-mcrypt
zypper install php5-soap

Session Verzeichnis

  Verzeichnis namens "Sess" in C:\Programme\Apache Group\Apache\" oder im selben Verzeichnis wie "DocumentRoot" anlegen.
  In der Datei "php.ini" den Eintrag "session.save_path = " auf im ersten Falle
  session.save_path = C:/Programme/Apache Group/Apache/Sess
  
  abändern.

PHP7

ich habe PHP7 RC6 folgendermasen zum Laufen gebracht.

php7-interbase

die interbase Erweiterung war nicht dabei, also per Hand

  • den interbase-classic Server installiert, ev. auch "-devel" Pakete nötig weis nicht mehr
  • das Quelltext-Paket 'php-7.0.0RC7.tar.gz' von php.net geladen
  • irgendwie den php das firebird in /opt/firebird installiert ist. Die Header-Dateien werden dort im ./include Verzeichnis gesucht.
  • Diese waren aber bei mir im /urs/include/firebird, ok also einen Link erstellt:
    • md /opt/firebird
    • ln -s /usr/include/firebird /opt/firebird/include
  • Nun ins ./ext/interbase Verzeichnis wechseln und dort
    • phpize
    • ./configure
    • make
    • make install

die interbase.so steht jetzt zur VErfügung, wird aber noch nicht geladen

  • joe /etc/php7/conf.d/interbase.ini
extension=interbase.so

[Interbase]
ibase.dateformat=%m.%d.%Y
ibase.timestampformat=%m.%d.%Y %H:%M:%S
  • Jetzt muss apache2 noch merken das ein neues Modul gewünscht ist
    • systemctl restart apache2

php7-memcached

extension=memcached.so


  • Jetzt muss apache2 noch merken das ein neues Modul gewünscht ist
    • systemctl restart apache2

php7-xdebug

  • xdebug habe ich direkt von der xdebug Homepage geladen, da es in PHP 7.0.1 nicht mit dabei war
  • ich habe es ins ./ext Verzeichnis eines kompletten php-7.0.1.tar.gz entpackt als wäre es eine mitgelieferte Extension
  • phpize, ./configure, make, make install hat auch funktioniert
  • Im /etc/php7/conf.d habe ich xdebug.ini angelegt. Es hat nicht so den Standard-Inhalt da es eine "Zend" Extension ist!
zend_extension=xdebug.so

[xdebug]
xdebug.remote_enable=On
xdebug.remote_host=khao
xdebug.idekey=netbeans-xdebug


  • Meine IDE läuft auf dem Rechner KHAO (Windows) und mein 13.1er hat den Hostname Virt42

Status vom 23.11.2015

  • Shop läuft bei mäsiger Performance
  • Riessen Bug in ibase.php gefunden, es wurden zig Interbase Connections pro Seitenaufruf neu geöffnet
  • Der Player sollte in das Header-Template des WebShops dort wäre er passender
  • Die Static-Klassen sollten durchgängig programmiert werden

Status vom 25.11.2015

  • Modul "memcached" lässt sich nun compilieren

Status vom 03.12.2015

  • keine offenen Punkte mehr
  • Optimierungen an der CodeBasis vorgenommen

Status vom 07.12.2015

  • PHP 7.0.0 installiert