PHP: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
 
(33 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.2.1.tar.gz
    
cd php-5.2.1
   abändern.
 
'''4. Per Yast nachinstallieren''' (je nachdem, ob benötigt) oder von '''ftp://ftp.suse.com/pub/suse'''
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'''
 
./configure-Befehl von php_info() übernehmen oder unten kopieren.
: cd /usr/local/src/php-5.2.1/
: ./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 --disable-cli --without-pear --with-openssl --with-apxs2=/usr/sbin/apxs2-prefork i586-suse-linux
 
'''6. Apache stopppen'''
: rcapache2 stop
 
'''7. Kompilieren'''
: make clean    // Nicht vergessen! Sonst gehts nicht !
: make


'''8. Installieren'''
== PHP7 ==
: make install


'''9. php.ini-dist kopieren'''
ich habe PHP7 RC6 folgendermasen zum Laufen gebracht.
: cd /usr/local/src/php-5.2.1/
: cp php.ini-dist /etc/php.ini


'''10. NUR BEI UPDATE PHP4 AUF PHP5: httpd.conf editieren'''
* openSUSE 13.1 64 Bit installiert (als VM unter VirtualBox, Host ist openSUSE 42.1)
* incl. Commando-Zeilen Tools, C++ Entwicklung, Webserver
* Mich über PHP7 beim OpenSUSE Build Serivce Informiert
** https://build.opensuse.org/package/show/devel:languages:php:php7/php7
* im yast folgendes Repository hinzugefügt
** <code>http://download.opensuse.org/repositories/devel:/languages:/php:/php7/openSUSE_13.1</code>
* im yast php7 nun installiert
* phpinfo(); lieferte eigentlich direkt den Erfolg
* weitere Module installiert, mcrypt, soap, ...


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.
=== php7-interbase ===
: cd /etc/sysconfig
: joe apache2


'''11. NUR BEI UPDATE PHP4 AUF PHP5: DirectoryIndex bearbeiten'''
die interbase Erweiterung war nicht dabei, also per Hand


In Zeile 163 "index.php index.php5" hinzufügen.
* den interbase-classic Server installiert, ev. auch "-devel" Pakete nötig weis nicht mehr
: cd /etc/apache2/
* das Quelltext-Paket 'php-7.0.0RC7.tar.gz' von php.net geladen
: joe httpd.conf
* 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


'''12. Apache wieder starten'''
die interbase.so steht jetzt zur VErfügung, wird aber noch nicht geladen
: 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 5.1.0 ergeben
 
wget http://museum.php.net/php4/php-5.1.0.tar.gz
gzip -d php-5.1.0.tar.gz
tar -xf php-5.1.0.tar
cd php-5.1.0
 
* 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/php5/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ügen
extension=interbase.so
->gaaanz unten folgendes hinzufügen
[Interbase]
ibase.timestampformat=%m-%d-%Y %H:%M:%S


* joe /etc/php7/conf.d/interbase.ini


# openSuSE 11.0
Hier reicht es im Verzeichnis <code>/etc/php5/conf.d</code> die Datei <code>interbase.ini</code> anzulegen:
  extension=interbase.so
  extension=interbase.so
   
   
  [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
 
Diagnose, ob jetzt das interbase Module geladen ist:
 
php -modules
 
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
!!Fertig!!
xdebug.remote_host=khao
 
xdebug.idekey=netbeans-xdebug
*Weitere Informationen zur Installation von PHP stehen in der Datei "C:\Programme\Php\install.txt".


== PHP konfigurieren ==


Damit PHP auf Interbase/Firebird Datenbanken zugreifen kann, müssen die Routinen, die das ermöglichen, beim
* Meine IDE läuft auf dem Rechner KHAO (Windows) und mein 13.1er hat den Hostname Virt42
Start von PHP als Erweiterung geladen werden. Dies geschieht mit Hilfe zweier Einträge in der "php.ini".
Erstens muss der Eintrag "extension_dir= " auf das Verzeichnis mit den Extension-Dlls gesetzt werden. Diese
befinden sich standardmäßig im Verzeichnis "extensions". Falls PHP zum Beispiel in "C:\Programme\Php" installiert
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 23.11.2015 ===


  <u>Win32</u>
* Shop läuft bei mäsiger Performance
  extension=php_interbase.dll
* Riessen Bug in ibase.php gefunden, es wurden zig Interbase Connections pro Seitenaufruf neu geöffnet
  extension=php_gd2.dll
* Der Player sollte in das Header-Template des WebShops dort wäre er passender
  <u>Linux</u>
* Die Static-Klassen sollten durchgängig programmiert werden
  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 25.11.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.
* Modul "memcached" lässt sich nun compilieren


<u>Achtung</u>: Nach einer Änderung muss der Apache-Webserver mit "Startmenü\Alle Programme\Apache HTTP Server\Control Apache Server\Restart" neu gestartet werden.
=== Status vom 03.12.2015 ===
 
== 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.
 
== PHP compilieren ==
 
mehr Info unter [[PHP]]
 
* 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