From ulf.wendel_(at)_phpdoc.de Mon, 19 Feb 2001 08:48:52 +0100 Date: Mon, 19 Feb 2001 08:48:52 +0100 From: Ulf Wendel ulf.wendel_(at)_phpdoc.de Subject: [php] Optimierung durch Verzicht auf OOP war: [php] Ideales System? André Temme wrote: > > Ulf Wendel schrieb: > [...] > > :) Application Server Diskussion. Kannst Du die Applikationen profilen? > > Ist es wirklich der DB Zugriff, der Dich umbringt? Verzichtet die > > Software bereits auf OOP (10-30%)? Nach den Erzählungen von Baerli gehe > > Der Verzicht auf Objektorientierung bringt Geschwindigkeitsvorteile? > Weil der Interpretor weniger zu tun hat? Wie sieht das dann bei > (Zend-)compiliertem Code aus, bleibt da der Geschwindigkeitsnachteil > (proportional?) Es gibt eine ganze Reihe kleiner Tricks und Kniffe, welche die letzten paar Prozent Laufzeit aus einem Code kitzeln. Eine Optimierung lohnt sich aber nur dann, wenn der zugrundelegende Algorithmus bereits die optimale Form erreicht hat. Generell sind keine wesentlichen Gewinne zu beobachten. Alles was da an Zahlen geistert - auch von meiner Seite aus - muß stark in Relation zur Gesamtlaufzeit gesetzt werden. PHP 4 versprach uns den Faktor 100, gemerkt habe ich nur -30% - +80%. PHP hat keinerlei Optimierung für objektorientierten Code. Dieser ist daher grundsätzlich langsamer als prozeduraler Code. Wenn sich nicht viel getan hat, behandelt PHP ein Objekt immer noch wie ein Array - diese Implementierung stammt nicht gerade aus dem Lehrbuch für Compilerbau. Wäre der OO Support in PHP beispielhaft implementiert, würde sich in der Praxis kein Geschwindigkeitsunterschied zeigen. Der Overhead kann bei einer optimalen Implementierung auf wenige Operationen begrenzt werden. Zend hat keinen Compiler im Angebot, es gibt nur einen Encoder und einen Optimizer. Der Optimizer versucht bei jeden Durchlauf kleinste Optimierungen vorzunehmen, wobei ich kaum einen Effekt messen kann. Das Hash-Test-Programm PHPDoc zeigt sich gänzlich unbeeindruckt von den Optimierungsversuchen. Der Zend Encoder überführt den Klartext Programmcode in eine dem internen Zend Byte Code ähnliche Form. Diese kann schneller von der Zend Engine gelesen werden. Natürlich versucht der Encoder noch an der einen oder anderen Stelle zu optimieren, aber das ist nicht seine Hauptaufgabe und Zend verspricht auch keine Leistungen in diesem Bereich. Zumindest die frühen Versionen sollen noch einen Hinweis enthalten haben, das mit Encoder die Ausführungsdauer sogar steigen kann, die Geschwindigkeit sinkt. Wer unbedingt das letzte rausholen will der greift sich PEAR::Benchmark und fangt an zu profilen und Handoptimierungen vorzunehmen. Dabei werden Dinge rauskommen wie: - $string[0] statt substr($string, 0, 1) - strpos("foo") statt "foo" == substr($string, 0, 3) - nie ereg_*, immer preg_* - bei kleinen Hashes: foreach, bei großen reset/while/list/each - nie pass by reference außer bei Objekten - verzichte auf OO, Hashzugriffe sind schneller als Zugriffe auf Objektvariablen - ... Wirklich anraten seinen Code zu verstümmeln, kann ich jedoch nicht. Mit der nächsten Zend-Engine kann sich das Blatt schon komplett geändert haben. Auch wenn die Zimttüten es nicht glauben, auch Zeev hat einen Blick für das, was PHP noch fehlt. Heute sind die üblichen Antworten auf Speed Probleme jedenfalls nicht die Handoptimierung des Codes. Urheber des Threads durfte ich jedoch davon ausgehen, daß: - die DB optimal mit Indizes versorgt ist - die Sktipte klein und effektiv sind - eine Modulversion benutzt wird - nicht für 200 Datensätze ein Oracle benutzt wird - nicht alle 30 Sekunden ein Skript eine Ticker aktualisiert - keine Frames aus einem Request x Prozesse erzeugen - das Netz kein Nadelöhr ist - optimale Hardware vorliegt - die Klassenbiliothek als Extension vorliegt - Load Balancing über DNS gemacht wird - ... Danach darf man langsam anfangen, in die Trickkiste der Verzweiflung zu greifen und den Strohhalm Handoptimierung zu präsentieren. Ulf From ulf.wendel_(at)_phpdoc.de Mon, 19 Feb 2001 08:51:01 +0100 Date: Mon, 19 Feb 2001 08:51:01 +0100 From: Ulf Wendel ulf.wendel_(at)_phpdoc.de Subject: [php] =?iso-8859-1?Q?Pr=FCfung?= ob assoziatives oder eindim. ArrayArray Stephan Nix wrote: > Wie kann ich prüfen, ob ein Array assoziativ oder eindimensional ist, um abhängig von dieser Info sort oder asort anzuwenden? Manuell auslesen und testen. Ulf From Ulf.Unger_(at)_urz.uni-heidelberg.de Mon, 19 Feb 2001 09:37:27 +0100 Date: Mon, 19 Feb 2001 09:37:27 +0100 From: Ulf Unger Ulf.Unger_(at)_urz.uni-heidelberg.de Subject: [php] URL Variablen bei PHP4.04PL1 unter W2K Hallo, Ich hab gerade das PHP 4.04PL1 unter W2K Server installiert. Nun versuche ich gerade meinem PHP-Skript eine URL Variable zu übergeben (formular.php?wert=x) - erfolglos. Die Variable hat keinen Wert innerhalb des PHP Skripts - allerdings gibt mir die phpinfo() die Variable unter HTTP_GET_VARS mit dem richtigen Wert an. Was mache ich falsch? Vielen Dank für Eure Hilfe Ulf P.S.: Ich nutze das ISAPI Modul mit IIS 5.0 From A.Ott_(at)_bau-igel.de Mon, 19 Feb 2001 08:50:58 -0000 Date: Mon, 19 Feb 2001 08:50:58 -0000 From: Alexander Ott A.Ott_(at)_bau-igel.de Subject: [php] ignore_user_abort() Ich habe ein kleines Problem mit der Funktion ignore_user_abort(). Welchen Parameter muss man da übergeben, wenn man will, dass das Script weiterläuft, wenn der User den Browser schliesst, oder eine andere URL aufsucht. Aus dem Handbuch wird man nicht schlau, dort wird nur beschrieben, dass man 0 für normal, 1 für Abort und 2 für Timeout übergeben soll ????? Danke für eine Antwort im Voraus Alexander From atsasid_(at)_gmx.de Mon, 19 Feb 2001 09:56:05 +0100 Date: Mon, 19 Feb 2001 09:56:05 +0100 From: Peter "[DiSAStA]" Petermann atsasid_(at)_gmx.de Subject: [php] endfunction; ? > bin nämlich mittlerweile ganz auf die endif;'s etc. umgestiegen, würde mich > freuen wenns da was gebe. *stöhn* wieso steigst du von sauberer Syntax auf kindergarten syntax um? gruss, Peter "[DiSAStA]" Petermann *ZIMT - where PHP meets needs* -- webmaster_(at)_cyberfly.net www.cyberfly.net From Peaveway_(at)_aol.com Mon, 19 Feb 2001 04:00:00 EST Date: Mon, 19 Feb 2001 04:00:00 EST From: Peaveway_(at)_aol.com Peaveway_(at)_aol.com Subject: [php] URL Variablen bei PHP4.04PL1 unter W2K Moin, In einer eMail vom 19.02.01 09:34:04 (MEZ) Mitteleuropäische Zeit schreibt Ulf.Unger_(at)_urz.uni-heidelberg.de: > Ich hab gerade das PHP 4.04PL1 unter W2K Server installiert. Nun versuche > ich gerade meinem PHP-Skript eine URL Variable zu übergeben > (formular.php?wert=x) - erfolglos. Die Variable hat keinen Wert innerhalb > des PHP Skripts - allerdings gibt mir die phpinfo() die Variable unter > HTTP_GET_VARS mit dem richtigen Wert an. Was mache ich falsch? > > Vielen Dank für Eure Hilfe *Seufz* Na dann greife doch auch richtig darauf zu... $HTTP_GET_VARS["wert"]. Was ist daran denn so schwer? Wenn du sie als globale Var haben moechtest um ueber $wert drauf zuzugreifen solltest du in deiner php.ini register_globals=on einstellen und deinen Server restarten. Ein phpinfo() ziegt dir deine alktuelle Einstellung. Allerdings gibt es Leute die sagen es waere schlechter 'stil' so zuarbeiten und dazu kommt auch noch der Sicherheitsaspekt. Solltest du die Var in einer selbstgeschriebenen Funktion nutzen wollen das 'global $var' nicht vergessen. Gruss Joerg Behrens -- TakeNet GmbH Mobil: 0171/60 57 963 D-97080 Wuerzburg Tel: +49 931 903-2243 Alfred-Nobel-Straße 20 Fax:+49 931 903-3025 From uw_(at)_netuse.de Mon, 19 Feb 2001 09:52:36 +0100 Date: Mon, 19 Feb 2001 09:52:36 +0100 From: Ulf Wendel uw_(at)_netuse.de Subject: [php] URL Variablen bei PHP4.04PL1 unter W2K Ulf Unger schrieb: > ich gerade meinem PHP-Skript eine URL Variable zu übergeben > (formular.php?wert=x) - erfolglos. Die Variable hat keinen Wert innerhalb > des PHP Skripts - allerdings gibt mir die phpinfo() die Variable unter > HTTP_GET_VARS mit dem richtigen Wert an. Was mache ich falsch? Du glaubst PHP sei so konfiguriert wie Windows und erlaube per se alles. php[3].ini checken und besonders auf http://www.php.net/manual/en/configuration.php#ini.register-globals achten. Ulf -- Ulf Wendel, NetUSE AG Siemenswall, D-24107 Kiel Tel: +49 431 386 436 00, Fax: +49 431 386 435 99 From uw_(at)_netuse.de Mon, 19 Feb 2001 09:55:13 +0100 Date: Mon, 19 Feb 2001 09:55:13 +0100 From: Ulf Wendel uw_(at)_netuse.de Subject: [php] endfunction; ? "Peter \"[DiSAStA]\" Petermann" schrieb: > > bin nämlich mittlerweile ganz auf die endif;'s etc. umgestiegen, würde mich > > freuen wenns da was gebe. > *stöhn* > wieso steigst du von sauberer Syntax auf kindergarten syntax um? Weil er im Gegensatz zu Dir die Nützlichkeit der Syntax bei Vermengung von HTML und PHP - Du erinnerst Dich eine der Stärken von PHP - schätzt. Ulf -- Ulf Wendel, NetUSE AG Siemenswall, D-24107 Kiel Tel: +49 431 386 436 00, Fax: +49 431 386 435 99 From eschmid_(at)_php.net Mon, 19 Feb 2001 10:15:39 +0100 Date: Mon, 19 Feb 2001 10:15:39 +0100 From: Egon Schmid (_(at)_vacation) eschmid_(at)_php.net Subject: [php] ignore_user_abort() Alexander Ott wrote: > > Ich habe ein kleines Problem mit der Funktion > ignore_user_abort(). Welchen Parameter muss man da > übergeben, wenn man will, dass das Script weiterläuft, wenn der > User den Browser schliesst, oder eine andere URL aufsucht. Gar keinen, der Parameter settings ist optional. > Aus dem Handbuch wird man nicht schlau, dort wird nur > beschrieben, dass man 0 für normal, 1 für Abort und > 2 für Timeout übergeben soll ????? Optionale Parameter braucht man nicht zu übergeben. Da muß man halt etwas mit connection_aborted() experimentieren um die Funktion ignore_user_abort() zu verstehen. -Egon -- SIX Offene Systeme GmbH · Stuttgart - Berlin Sielminger Straße 63 · D-70771 Leinfelden-Echterdingen Fon +49 711 9909164 · Fax +49 711 9909199 http://www.six.de Besuchen Sie uns auf der CeBIT 2001, Halle 6, Stand F62/4 From uw_(at)_netuse.de Mon, 19 Feb 2001 10:08:45 +0100 Date: Mon, 19 Feb 2001 10:08:45 +0100 From: Ulf Wendel uw_(at)_netuse.de Subject: [php] ignore_user_abort() Alexander Ott schrieb: > Ich habe ein kleines Problem mit der Funktion > ignore_user_abort(). Welchen Parameter muss man da > übergeben, wenn man will, dass das Script weiterläuft, wenn der > User den Browser schliesst, oder eine andere URL aufsucht. > > Aus dem Handbuch wird man nicht schlau, dort wird nur > beschrieben, dass man 0 für normal, 1 für Abort und > 2 für Timeout übergeben soll ????? Generell bei solchen Fragen: [1] http://www.zugeschaut-und-mitgebaut.de/php/i.html [2] http://www.zugeschaut-und-mitgebaut.de/php/function.ignore_user_abort.html [3] http://lxr.php.net/source/php4/ext/standard/basic_functions.c#2159 2170 switch (ZEND_NUM_ARGS()) { 2171 case 0: 2172 break; Keine Daten bekommen - skip it... 2173 case 1: 2174 if (zend_get_parameters_ex(1, &arg) == FAILURE) { 2175 RETURN_FALSE; 2176 } 2177 convert_to_boolean_ex(arg); Ein Übergabewert? convert_to_boolean() 2178 PG(ignore_user_abort) = (zend_bool) Z_LVAL_PP(arg); 2179 break; 2180 default: 2181 WRONG_PARAM_COUNT; 2182 break; ... Die Funktion frißt nichts anderes als einen Boolean. In PHP stehen Dir zur einfachen Arbeit mit Booleans die vordefinierten Konstanten true und false zur Verfügung. http://www.php.net/manual/de/features.connection-handling.php ist vielleicht nicht ohne Kaffe lesbar, aber durchaus verständlich: "Wenn das eingestellte Zeitlimit (siehe set_time_limit()) überschritten wird, wird der Status TIMEOUT gesetzt." + letzter Absatz. Von ignore_user_abort() steht dort nichts in Zusammenhang mit 2 - TIMEOUT. Anyway, der Prototyp ist im Manual schräg: http://www.php.net/manual/en/function.ignore-user-abort.php. Wenn Du jetzt immer noch im Wald stehst, laß Dich von den PHP buildern beraten, die Werbung in den stets zu lesenden "User Contributed Notes" machen. Ulf -- Ulf Wendel, NetUSE AG Siemenswall, D-24107 Kiel Tel: +49 431 386 436 00, Fax: +49 431 386 435 99 From webmaster_(at)_iwos.de Mon, 19 Feb 2001 10:27:33 +0100 Date: Mon, 19 Feb 2001 10:27:33 +0100 From: iwos Internet-Service webmaster_(at)_iwos.de Subject: [php] Re: floor() und so.. Hi kiri, > > ich versuche gerade den Rest einer Division zu ermitteln > > und bilde mir ein mal etwas ueber eine Function aehnlich > > floor() oder ceil() gelesen zu haben die mir aber den Rest > > einer Division zurueck gibt. Kann aber im Manual nichts > > darueber finden. Kann mich bitte jemand was dazu sagen. > > % ist der Moduls, der dir den rest einer div. zurückgibt. > > kiri > Danke für die schnelle Antwort. da hab ich wohl an der falschen Stelle gesucht viele Grüße Wolfgang S. From webmaster_(at)_iwos.de Mon, 19 Feb 2001 10:34:34 +0100 Date: Mon, 19 Feb 2001 10:34:34 +0100 From: iwos Internet-Service webmaster_(at)_iwos.de Subject: [php] Re: floor() und so.. hi nochmal, > Hi kiri, > > > > ich versuche gerade den Rest einer Division zu ermitteln > > > und bilde mir ein mal etwas ueber eine Function aehnlich > > > floor() oder ceil() gelesen zu haben die mir aber den Rest > > > einer Division zurueck gibt. Kann aber im Manual nichts > > > darueber finden. Kann mich bitte jemand was dazu sagen. > > > > % ist der Moduls, der dir den rest einer div. zurückgibt. > > > > kiri > > > Danke für die schnelle Antwort. > da hab ich wohl an der falschen Stelle gesucht > > viele Grüße > Wolfgang S. > Sorry, hab schon wieder geschlafen :-( wollt doch noch fragen wie ich das % für diesem Fall anwenden kann ,muß ? Wolfgang S. From caefer_(at)_yahoo.com Mon, 19 Feb 2001 10:35:57 +0100 Date: Mon, 19 Feb 2001 10:35:57 +0100 From: =?iso-8859-1?Q?Christian_Sch=E4fer?= caefer_(at)_yahoo.com Subject: [php] AW: generierung von .htaccess W(AR: [php] htaccess funzt nicht...) hallo liste, mein problem ist immer noch dasselbe. ich erstelle mit angehängtem script auf meinem apache ein htaccess im subdirectory 'protect'. nach ausführung des scriptes ist dieses dann auch geschützt, aber mit den verwendeten zugangsdaten nicht zu betreten. hat das eventuell was mit der crypt-funktion oder dem path zu tun? ich kann den fehler nicht finden, wenn das mal einer testen könnte, wäre cool! danke christian -----Ursprüngliche Nachricht----- habe folgendes script geschrieben (mit hilfe von alexander mielands htaccessgenerator). aber es will nicht funktionieren. das verzeichnis 'protect' wird zwar geschützt, aber nach eingabe von name und passwort wird mir immer noch kein zugang gewährt. findet er die zugangsdaten nicht? ist der pfad dorthin falsch angegeben? kann mir jemand helfen? <--- schnipp --->