PHP: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: 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 wi...)
 
 
(56 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 herunterladen'''
== Session Verzeichnis ==
: cd /usr/local/src
 
: wget <nowiki>http://de2.php.net/get/php-5.1.2.tar.gz/from/de3.php.net/mirror</nowiki>
  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. Entpacken'''
: tar -xzf php-5.1.2.tar.gz
: rm php-5.1.2.tar.gz


'''4. Per Yast nachinstallieren''' (je nachdem, ob benötigt)
  session.save_path = C:/Programme/Apache Group/Apache/Sess
flex (2.5.4.a installiert)
 
openssl-devel (0.9.7d installiert)
  abändern.
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)
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-2.6.11-1.i386.rpm</nowiki>
: yast -i libxml2-2.6.11-1.i386.rpm
: wget <nowiki>ftp://xmlsoft.org/libxml2-devel-2.6.11-1.i386.rpm</nowiki>
: yast -i libxml2-devel-2.6.11-1.i386.rpm


'''5. Konfigurieren'''
== PHP7 ==


./configure-Befehl von php_info() übernehmen oder unten kopieren.
ich habe PHP7 RC6 folgendermasen zum Laufen gebracht.
: cd /usr/local/src/php-5.1.2/
: ./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'''
* openSUSE 13.1 64 Bit installiert (als VM unter VirtualBox, Host ist openSUSE 42.1)
: rcapache2 stop
* 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, ...


'''7. Kompilieren'''
=== php7-interbase ===
: make clean    // Nicht vergessen! Sonst gehts nicht !
: make


'''8. Installieren'''
die interbase Erweiterung war nicht dabei, also per Hand
: make install


'''9. php.ini-dist kopieren'''
* den interbase-classic Server installiert, ev. auch "-devel" Pakete nötig weis nicht mehr
: cd /usr/local/src/php-5.1.2/
* das Quelltext-Paket 'php-7.0.0RC7.tar.gz' von php.net geladen
: cp php.ini-dist /etc/php.ini
* 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


'''10. NUR BEI UPDATE PHP4 AUF PHP5: httpd.conf editieren'''
die interbase.so steht jetzt zur VErfügung, wird aber noch nicht geladen


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.
* joe /etc/php7/conf.d/interbase.ini
: cd /etc/sysconfig
: joe apache2


'''11. NUR BEI UPDATE PHP4 AUF PHP5: DirectoryIndex bearbeiten'''
  extension=interbase.so
 
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
  $ phpize
  $ ./configure && make install
 
This executes without error and the extension is built and installed
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:
 
  --enable-soap


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


=== php7-memcached ===


== PHP installieren ==
* 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


*PHP ist von der Seite "www.php.net" zu beziehen.
  extension=memcached.so
    -> http://www.php.net/downloads.php  -> Downloadadresse Stand: 18.02.06
*Am besten die neuste Version (in unserem Fall 5.1.2) als <u>.zip Datei</u> herunterladen (auch falls eine .exe Datei vorliegen sollte).
*Nach dem Download die Datei nach "C:\Programme\Php" entpacken.  


Die Datei "C:\Programme\Php\php.ini-dist" oder besser "C:\Programme\Php\php.ini-recommended"
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.


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


*Weitere Informationen zur Installation von PHP stehen in der Datei "C:\Programme\Php\install.txt".
=== php7-xdebug ===


== PHP konfigurieren ==
* 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!


Damit PHP auf Interbase/Firebird Datenbanken zugreifen kann, müssen die Routinen, die das ermöglichen, beim
zend_extension=xdebug.so
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>
[xdebug]
  extension_dir = "C:\Programme\Php\ext"
xdebug.remote_enable=On
  <u>Linux</u>
xdebug.remote_host=khao
  extension_dir = "/usr/lib/php/extension"
xdebug.idekey=netbeans-xdebug


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.


  <u>Win32</u>
* Meine IDE läuft auf dem Rechner KHAO (Windows) und mein 13.1er hat den Hostname Virt42
  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 23.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.
* Shop läuft bei mäsiger Performance
 
* Riessen Bug in ibase.php gefunden, es wurden zig Interbase Connections pro Seitenaufruf neu geöffnet
<u>Achtung</u>: Nach einer Änderung muss der Apache-Webserver mit "Startmenü\Alle Programme\Apache HTTP Server\Control Apache Server\Restart" neu gestartet werden.
* Der Player sollte in das Header-Template des WebShops dort wäre er passender
 
* Die Static-Klassen sollten durchgängig programmiert 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 ==
=== Status vom 25.11.2015 ===


* Beispiel 1 (i386)
* Modul "memcached" lässt sich nun compilieren


<code>
=== Status vom 03.12.2015 ===
'./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