{"id":80,"date":"2010-08-09T18:24:48","date_gmt":"2010-08-09T16:24:48","guid":{"rendered":"https:\/\/caipirinha.spdns.org\/wp\/?p=80"},"modified":"2019-09-29T21:04:41","modified_gmt":"2019-09-29T19:04:41","slug":"php","status":"publish","type":"post","link":"https:\/\/caipirinha.spdns.org\/wp\/?p=80","title":{"rendered":"PHP"},"content":{"rendered":"\n<p>PHP ist f\u00fcr das vollst\u00e4ndige Funktionieren eines LAMP-Systems eine der  Grundvoraussetzungen. Auch auf dem Caipirinha-Server ist PHP  installiert, und zwar mit den Paketen: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>apache2-mod_php5<\/li><li>php5<\/li><li>php5-bcmath<\/li><li>php5-bz2<\/li><li>php5-calendar<\/li><li>php5-ctype<\/li><li>php5-curl<\/li><li>php5-dba<\/li><li>php5-dom<\/li><li>php5-exif<\/li><li>php5-fileinfo<\/li><li>php5-gd<\/li><li>php5-gettext<\/li><li>php5-hash<\/li><li>php5-iconv<\/li><li>php5-imap<\/li><li>php5-json<\/li><li>php5-mbstring<\/li><li>php5-mcrypt<\/li><li>php5-mysql<\/li><li>php5-openssl<\/li><li>php5-pdo<\/li><li>php5-pgsql<\/li><li>php5-readline<\/li><li>php5-snmp<\/li><li>php5-sqlite<\/li><li>php5-tokenizer<\/li><li>php5-xmlreader<\/li><li>php5-xmlwriter<\/li><li>php5-xsl<\/li><li>php5-zip<\/li><li>php5-zlib<\/li><\/ul>\n\n\n\n<p>PHP5 kommt inzwischen mit verschiedenen Konfigurationsdateien. Die f\u00fcr ein <a href=\"http:\/\/de.wikipedia.org\/wiki\/LAMP\">LAMP-System<\/a> wichtige Konfigurationsdatei heisst <strong>\/etc\/php5\/apache2\/php.ini<\/strong>\n und ist recht umfangreich. In der Grundkonfiguration ist sie bereits \nvern\u00fcnftig konfiguriert. Deschalb sind hier nur noch diejenigen Passagen\n wieder gegeben, welche von der urspr\u00fcnglichen Konfiguration abweichen \nbzw. welche f\u00fcr das LAMP-System auf dem Caipirinha-Server besonders \nwichtig sind:\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">max_execution_time     = 21600  \u00a0; Maximum execution time of each script, in seconds\nmax_input_time         = 21600  \u00a0; Maximum amount of time each script may spend parsing request data\nmemory_limit           = 1G     \u00a0; Maximum amount of memory a script may consume\nerror_log              = \/var\/log\/php_errors.log\nfile_uploads           = On\nupload_max_filesize    = 1G\npost_max_size          = 1G\ndefault_socket_timeout = 20\nmysql.allow_persistent = On\nmysql.connect_timeout  = 20\nmysql.trace_mode       = On\nsession.gc_maxlifetime = 3600\ndate.timezone          = \"Europe\/Berlin\"<\/pre>\n\n\n\n<p>Um mit der <strong>digitalen Dropbox<\/strong> eine Datei bis zu 1GB \u00fcber maximal 6h lang hochladen zu k\u00f6nnen, werden die Werte der Parameter <strong>max_execution_time<\/strong>, <strong>max_input_time<\/strong>, <strong>memory_limit<\/strong>, <strong>upload_max_filesize<\/strong>, <strong>post_max_size<\/strong> und <strong>file_uploads<\/strong>\n an entsprechende Werte angepasst. Die gro\u00dfz\u00fcgigen Werte k\u00f6nnen \nnat\u00fcrlich nur auf einem wenig benutztem System eingestellt werden. Schon\n auf einem m\u00e4\u00dfig belasteten System m\u00fcsste man die maximale Laufzeit \ndrastisch reduzieren, um zu vermeiden, dass lang laufende PHP-Prozesse \ndas System l\u00e4hmen.\n<\/p>\n\n\n\n<p>Mit dem Parameter <strong>error_log<\/strong> wird <strong>\/var\/log\/php_errors.log<\/strong> als Log-Datei festgelegt. Das Verzeichnis <strong>\/var\/log<\/strong> ist aber nur f\u00fcr den Benutzer <strong>root<\/strong> beschreibbar. Deshalb muss man nun noch als Benutzer <strong>root<\/strong> folgende Kommandos ausf\u00fchren:\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">touch \/var\/log\/php_errors.log\nchown wwwrun:www \/var\/log\/php_errors.log<\/pre>\n\n\n\n<p>Sonst k\u00f6nnen die Fehlermeldungen nicht nach <strong>\/var\/log\/php_errors.log<\/strong> geschrieben werden und erscheinen statt dessen in <strong>var\/log\/apache2\/error_log<\/strong> zusammen mit den Apache-Fehlermeldungen.\n<\/p>\n\n\n\n<p>Der Parameter <strong>default_socket_timeout<\/strong> wird gegen\u00fcber der \nDefault-Einstellung sogar reduziert, weil wir bei einem schwach \nbelasteten System von einer schnellen Reaktion ausgehen k\u00f6nnen.\n<\/p>\n\n\n\n<p>Die Parameter <strong>mysql.allow_persistent<\/strong>, <strong>mysql.connect_timeout<\/strong> und <strong>mysql.trace_mode<\/strong> dienen der Anpassung an <a href=\"http:\/\/localhost\/mediawiki\/index.php\/MySQL\">MySQL<\/a> auf dem Caipirinha-Server.\n<\/p>\n\n\n\n<p>Mit dem Parameter <strong>date.timezone<\/strong> wird die Ortszeit festgelegt. Im Caipirinha-Server l\u00e4uft die Uhr auf UTC-Zeit (siehe <a href=\"http:\/\/localhost\/mediawiki\/index.php\/NTP\">NTP<\/a>), und mit diesem Parameter wird dann bei Verwendung der PHP-Funktion <code>date()<\/code> die korrekte Ortszeit ausgegeben.\n<\/p>\n\n\n\n<p>Mit Session-Cookies kann man eine &#8220;Sitzung&#8221; erzeugen, wie sie \nbeispielsweise f\u00fcr Online-Shops erforderlich ist. Damit k\u00f6nnen dann \nentfernte Benutzer auf einer HTML-Seite Daten &#8220;speichern&#8221; (die in \nWirklichkeit auf dem Server abgelegt werden) und auf diese Daten auf \neiner anderen HTML-Seite zugreifen. Damit die auf dem Server \ngespeicherten Daten eindeutig einer Sitzung zugeordnet werden k\u00f6nnen, \nwird im Browser des Benutzers ein &#8220;Session Cookie&#8221; abgelegt, welches die\n Sitzung eindeutig identifiziert. Mit dem Parameter <strong>session.gc_maxlifetime<\/strong>\n wird die Lebensdauer eines solchen Session Cookies festgelegt, in \ndiesem Fall auf 1h. Dies ist im Allgemeinen mehr als ausreichend, selbst\n f\u00fcr eine zwischengschaltete Mittagspause. Viele kommerzielle Seiten \nhaben aus Sicherheitsgr\u00fcnden viel k\u00fcrzere Lebensdauern.\n<\/p>\n\n\n\n<p>Es ist nicht erforderlich, dass PHP &#8220;gestartet&#8221; wird. Wenn der entsprechend konfigurierte Webserver <a href=\"http:\/\/localhost\/mediawiki\/index.php\/Apache\">Apache<\/a>\n auf eine PHP-Seite st\u00f6\u00dft, dann wird der PHP-Interpreter aktiviert und \narbeitet entsprechend seiner eingestellten Konfiguration. Nach \n\u00c4nderungen an der Datei <strong>\/etc\/php5\/apache2\/php.ini<\/strong> muss allerdings ein <code>\/etc\/init.d\/apache reload<\/code> oder ein <code>\/etc\/init.d\/apache restart<\/code> durchgef\u00fchrt werden.\n<\/p>\n\n\n\n<p>Neben der eben besprochnen Konfigurationsdatei gibt es noch eine entsprechende Datei namens <strong>\/etc\/php5\/cli\/php.ini<\/strong>, welche f\u00fcr die Ausf\u00fchrung von PHP-Skripen in der Shell zust\u00e4ndig ist. Man kann auch in einer Shell mit dem Kommando <code>php skript.php<\/code>\n ausf\u00fchren. Das Skript wird dann ebenfalls vom Apache-Server ausgef\u00fchrt,\n sendet alle seine Ausgaben allerdings an die Shell. Dies macht Sinn f\u00fcr\n Algorithmen, welche Programmpakete aktualisieren oder sonstige \nBerechnungen durchf\u00fchren und deren Ergebnisse nicht im Browser \ndargestellt werden sollen. Da der Anwendungsfall somit anders liegt, \nsollen deswegen auch unterschiedliche Werte eingestellt werden. Deshalb \nkonfigurieren wir in <strong>\/etc\/php5\/cli\/php.ini<\/strong> folgende Werte unterschiedlich zur Standard-Konfiguration:\n<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">max_execution_time     = 600\nmemory_limit           = 1G\nerror_log              = \/var\/log\/php_errors.log\ndefault_socket_timeout = 20\nmysql.connect_timeout  = 20\nmysql.trace_mode       = On\ndate.timezone          = \"Europe\/Berlin\"<\/pre>\n\n\n\n<p>Ich habe den Wert f\u00fcr <strong>memory_limit<\/strong> hier so hoch gew\u00e4hlt, weil \nich f\u00fcr ein Projektmanagement-System manchmal an Skripten arbeite, \nwelche sehr viele Daten verarbeiten und gro\u00dfe Grafiken berechnen. \nAnsonsten braucht man nat\u00fcrlich viel kleinere Werte.\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>PHP ist f\u00fcr das vollst\u00e4ndige Funktionieren eines LAMP-Systems eine der Grundvoraussetzungen.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[62],"class_list":["post-80","post","type-post","status-publish","format-standard","hentry","category-it","tag-php"],"_links":{"self":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/80","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=80"}],"version-history":[{"count":1,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions"}],"predecessor-version":[{"id":81,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=\/wp\/v2\/posts\/80\/revisions\/81"}],"wp:attachment":[{"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=80"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=80"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/caipirinha.spdns.org\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=80"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}