PHP Ausführung über Console beschleunigen – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 14:35:23 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740394#m1740394 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740394#m1740394 <p>Hallo,</p> <p>ich habe ein kleines PHP Script geschrieben welches mir auf 16 Zeichen länge jegliche Kombination in ein Array schreibt:</p> <pre><code class="block language-php"><span class="token variable">$erlaubte_zeichen</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token string double-quoted-string">" "</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"a"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"b"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"c"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"d"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"e"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"f"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"g"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"h"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"i"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"j"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"k"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"l"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"m"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"n"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"o"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"p"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"q"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"r"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"s"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"t"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"u"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"v"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"w"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"x"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"y"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"z"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"ä"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"ö"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"ü"</span><span class="token punctuation">,</span><span class="token string double-quoted-string">"ß"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$zusatz_array</span> <span class="token operator">=</span> <span class="token keyword">array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe2</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe3</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe4</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe5</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe6</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe7</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe8</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe9</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe10</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe11</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe12</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe13</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe14</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe15</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">foreach</span><span class="token punctuation">(</span><span class="token variable">$erlaubte_zeichen</span> <span class="token keyword">AS</span> <span class="token variable">$buchstabe16</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$data</span> <span class="token operator">=</span> <span class="token function">trim</span><span class="token punctuation">(</span><span class="token variable">$buchstabe1</span><span class="token operator">.</span><span class="token variable">$buchstabe2</span><span class="token operator">.</span><span class="token variable">$buchstabe3</span><span class="token operator">.</span><span class="token variable">$buchstabe4</span><span class="token operator">.</span><span class="token variable">$buchstabe5</span><span class="token operator">.</span><span class="token variable">$buchstabe6</span><span class="token operator">.</span><span class="token variable">$buchstabe7</span><span class="token operator">.</span><span class="token variable">$buchstabe8</span><span class="token operator">.</span><span class="token variable">$buchstabe9</span><span class="token operator">.</span><span class="token variable">$buchstabe10</span><span class="token operator">.</span><span class="token variable">$buchstabe11</span><span class="token operator">.</span><span class="token variable">$buchstabe12</span><span class="token operator">.</span><span class="token variable">$buchstabe13</span><span class="token operator">.</span><span class="token variable">$buchstabe14</span><span class="token operator">.</span><span class="token variable">$buchstabe15</span><span class="token operator">.</span><span class="token variable">$buchstabe16</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token variable">$zusatz_array</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token operator">=</span><span class="token variable">$data</span><span class="token punctuation">;</span> <span class="token keyword">echo</span> <span class="token variable">$data</span><span class="token operator">.</span><span class="token string double-quoted-string">"\r\n"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <p>Das es wirklich ettliche Stunden/Tage laufen muss um alle Inhalte zu generieren machte ich mich auf die Suche nach optimierungen. Idee</p> <ol> <li>Aktuelle PHP Version nutzen</li> <li>Über die Windows Console Starten damit kein Timeout entsteht</li> <li>Memmorylimit auf 25G angehoben</li> <li>Über Windows Taskmanager auf "Echtzeit" umgestellt.</li> </ol> <p>Aber weder CPU (AMD 1920X) noch RAM (32 GB) noch Datenträger (M2 SSD) haben irgendwelche Auslastungszeichen.</p> <p>Da muss doch mehr gehen?!</p> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 15:00:02 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740395#m1740395 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740395#m1740395 <p>@@rekneh</p> <blockquote> <p>ich habe ein kleines PHP Script geschrieben welches mir auf 16 Zeichen länge jegliche Kombination in ein Array schreibt</p> </blockquote> <p>Bei einem Zeichenvorrat von 30 Zeichen sind das 30¹⁶ ≈ 4.3 · 10²³ Kombinationen. In Worten: vierhundertdreißig Trilliarden. (Auf Englisch wären’s <em lang="en">430 sextillion</em>.)</p> <p>Was zum Geier willst du mit einem solchen riesigen Array anstellen?</p> <p>Und wo zum Geier willst du das ablegen?</p> <p>Bei einem Byte pro Zeichen, also 16 Bytes pro Arrayelement, wäre das ein Speicherplatzbedarf von 6.88 · 10²⁴ Bytes. Das sind 6.88 · 10¹² Terabyte. In Worten: schlappe sieben Billionen Terabyte. Hast du die im Schrank?</p> <blockquote> <p>Da muss doch mehr gehen?!</p> </blockquote> <p>Was immer du tust: Da muss doch weniger gehen‽</p> <p>LLAP </p> <div class="signature">-- <br> <em>„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“</em> —Kurt Weidemann </div> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 15:01:22 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740396#m1740396 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740396#m1740396 <blockquote> <p>Aber weder CPU (AMD 1920X) noch RAM (32 GB) noch Datenträger (M2 SSD) haben irgendwelche Auslastungszeichen.</p> </blockquote> <p>Das kann man so nicht behaupten:</p> <p><a href="/images/3287b748-60ac-4baf-ba9f-af7be7ff56dd.png" rel="noopener noreferrer"><img src="/images/3287b748-60ac-4baf-ba9f-af7be7ff56dd.png?size=medium" alt="" loading="lazy"></a></p> <p>Das durch <code>echo</code> erfolgende, oft widerholte Öffnen eines Ausgabepuffers ist eine 'teure' Operation, die insbesondere mit Wartezeiten verknüpft ist.</p> <p>Also alle Ausgaben sammeln und auf einmal ausgeben:</p> <p>Erste Zeile:</p> <pre><code class="block language-php"><span class="token php language-php"><span class="token delimiter important"><?php</span> <span class="token function">ob_start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </span></code></pre> <p>Für die Lauzeitmessungen hab ich Dein Skript mal gehörig verkürzt (Nur 4 verschachtelte Schleifen):</p> <p>Mit ob_start:</p> <pre><code class="block">real 0m2,174s user 0m0,395s sys 0m0,526s </code></pre> <p>Ohne ob_start:</p> <pre><code class="block">real 0m4,037s user 0m0,733s sys 0m2,188s </code></pre> <p>Vergleiche insbesondere die Zeiten hinter sys</p> <p>Warum Du für die Speicherung Google, Microsoft, Cloudflare, Amazon und Alibaba um Hilfe bitten (und ein paar Technologiesprünge abwarten) musst hat Gunnar beschrieben.</p> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 15:21:14 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740397#m1740397 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740397#m1740397 <p>Die Aufgabenstellung ist offenkundiger Unfug. Ein denkbarer Zweck wäre ein brute-force Angriff auf Passworte, aber das funktioniert so einfach eh nicht.</p> <p>Zwei Möglichkeiten: Der Fragesteller ist unerfahren oder ein Troll.</p> <p>Der Name des Fragestellers ist <code>strrev("henker")</code>.</p> <p>Ich rieche einen Troll.</p> <p>/close thread, no archive/</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 16:31:14 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740404#m1740404 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740404#m1740404 <p>Hallo rekneh,</p> <p>ich bitte um Entschuldigung für die schnelle Schließung. Und danke an Gunnar für die Reaktion.</p> <p>Um alle Falsch-Schreibungen eines Wortes zu finden, ist ein brute-force Ansatz nach meiner Meinung nicht hilfreich. Um eine "meinten Sie"-Unterstützung zu bauen, muss man anders vorgehen. Man braucht ein Wort und muss dann in einem Referenzwörterbuch nach Begriffen suchen, die diesem Wort "ähnlich" sind. Dazu ist eine Wortdistanz-Logik erforderlich. Sowas ist sprachspezifisch und auch nicht einfach zu programmieren.</p> <p>Wichtiges Werkzeug ist hier zum einen die <a href="https://de.wikipedia.org/wiki/Levenshtein-Distanz" rel="nofollow noopener noreferrer">Levenshtein-Distanz</a>, die zwischen dem eingegebenen Wort und dem Begriff im Wörterbuch zu bestimmen ist. Das ist aber nicht performant für alle Wörterbucheinträge machbar. Eine Vorab-Auswahl der Kandidaten könnte der <a href="https://de.wikipedia.org/wiki/Soundex#Soundex_f%C3%BCr_die_deutsche_Sprache" rel="nofollow noopener noreferrer">Soundex</a> Algorithmus liefern. Und natürlich fängst Du nur an zu suchen, wenn das eingegebene Wort nicht als "korrekt" im Wörterbuch steht. Was natürlich nicht wasserdicht ist; wenn im Wörterbuch "Seite" drinsteht und Du "Seite" tippst, aber die Gitarren-Saite meinst, dann hilft alles nichts.</p> <p>Und wenn dein System dann herausgefunden hat, dass "Fohrumm" eine Falschschreibung von "Forum" ist, dann kann man DAS auch als "bekannte Falschschreibung" speichern und so das Gesamtsystem beschleunigen. Ich nehme an, dass Google genau so was macht. Und wenn "Seite" als Falschschreibung von "Saite" in dieser Liste steht, dann könnte sogar bei Eingabe von "Seite" ein Popup "meinten Sie vielleicht..." kommen.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - clusi </div> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 20:01:25 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740419#m1740419 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740419#m1740419 <p>Hallo Rolf,</p> <p>vielen Dank für die Analyse. Google hatte eine Publikation in den 90zigern in welcher das Problem legastenie mal Besprochen worden ist. Ich finde Sie leider nicht wieder und versuche es mal wiederzugeben. Der Lösungsansazt war folgender</p> <ul> <li>Phase 1 alle Falschschreibweisen mitloggen</li> <li>Phase 2 vermutliche zusammenhänge berechnen (Levenshtein könnte gut passen)</li> <li>Phase 3 Ergebnis für Falschschreibweise ausliefern mit "meinten Sie" ausliefern und auf Klick warten</li> <li>Phase 4 Wenn Klick erfolgt gabt es im Verhältnis zur anzahl an Suchen einen Zusammenhang.</li> <li>Phase 5 Index zum vermutlich korrekten Wort anzeigen alternativ Unserangabe einblenden (alternativ suche nach...)</li> <li>Phase 6 Wenn Klick erfolgt erneute Prüfung duch Phase 3.</li> </ul> <p>Ich habe mir gedacht, wenn ich einen Index [falsch - richtig] hätte, könnte ich daraus einen Trainingsdatensatz für eine PhytonKI basteln. Er (der Trainingsdatensatz) müsste halt nur groß genug sein…</p> <p>rekneh</p> PHP Ausführung über Console beschleunigen Thu, 10 Jan 19 21:43:13 Z https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740423#m1740423 https://forum.selfhtml.org/self/2019/jan/10/php-ausfuehrung-ueber-console-beschleunigen/1740423#m1740423 <blockquote> <p>wenn ich einen Index [falsch - richtig] hätte,</p> </blockquote> <p>Gewichteten Index. Ich vermute mal, dass Google in irgendeiner Weise mitzählt, was nach der Eingabe ausgewählt wurde, und eine Wichtung vornimmt.</p> <p>Merksatz:</p> <p><em>„Längst nicht alles, was nach künstlicher Intelligenz aussieht, ist in Wirklichkeit keine Statistik.“</em></p>