PHP: Unterschied zwischen den Versionen

Aus OrgaMon Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(31 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 18: Zeile 18:
  zypper install php5-soap
  zypper install php5-soap


== PHP Extension "interbase" bereitstellen ==
== 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


* Ermittle die PHP Versionsnummer, damit du weist welchen Source-Tar-Ball du ziehen must
  session.save_path = C:/Programme/Apache Group/Apache/Sess
 
  abändern.


php -v
== PHP7 ==


* Lade vom Museum die Source-Code Distribution des PHP, in diesem Beispiel hat die Versionsprüfung 5.1.0 ergeben
ich habe PHP7 RC6 folgendermasen zum Laufen gebracht.


wget http://museum.php.net/php4/php-5.1.0.tar.gz
* openSUSE 13.1 64 Bit installiert (als VM unter VirtualBox, Host ist openSUSE 42.1)
gzip -d php-5.1.0.tar.gz
* incl. Commando-Zeilen Tools, C++ Entwicklung, Webserver
tar -xf php-5.1.0.tar
* Mich über PHP7 beim OpenSUSE Build Serivce Informiert
cd php-5.1.0
** 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, ...


* Compiliere Dir selbst die Extension "interbase"
=== php7-interbase ===


./configure --with-interbase=shared,/opt/firebird
die interbase Erweiterung war nicht dabei, also per Hand
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
* 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


# SuSe 9.x
die interbase.so steht jetzt zur VErfügung, wird aber noch nicht geladen
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
* Jetzt muss apache2 noch merken das ein neues Modul gewünscht ist
** systemctl restart apache2


rcapache2 restart
=== php7-memcached ===


Diagnose, ob jetzt das interbase Module geladen ist:
* 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 -modules
  extension=memcached.so


auf Fehler in der folgenden Datei achten:


/var/log/apache2/error_log
* 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 ==
* Meine IDE läuft auf dem Rechner KHAO (Windows) und mein 13.1er hat den Hostname Virt42


Damit PHP auf Interbase/Firebird Datenbanken zugreifen kann, müssen die Routinen, die das ermöglichen, beim
=== Status vom 23.11.2015 ===
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.
* 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


  <u>Win32</u>
=== Status vom 25.11.2015 ===
  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:
* Modul "memcached" lässt sich nun compilieren
 
  [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.
=== Status vom 03.12.2015 ===
 
<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ä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, 16: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