Ich hatte einen kurzen Blick auf den Code für die saubere Erweiterung, und es gibt eine Möglichkeit, die Konfiguration für den Ausgabepuffer-Handler zu ändern.
Das heißt, es ist kein netter Weg. Es nutzt eine Eigenschaft des Codes, die sich in zukünftigen Versionen offensichtlich ändern kann.
Die Funktion, die die Pufferverarbeitung verarbeitet, ist php_tidy_output_handler
und line 1191 ruft das Makro TIDY_SET_DEFAULT_CONFIG
auf.
Wenn tidy.default_config
nicht festgelegt ist, dann führt das Makro nichts aus. Wenn es gesetzt ist, wird die Konfigurationsdatei von der Festplatte gelesen und die Optionen werden analysiert.
Da die Konfigurationsdatei während die Analyse des Ausgangspuffers geladen wird, ist es möglich, die Konfigurationsdatei von PHP-Skript vor Parsen beginnen zu ändern.
Das bedeutet, Sie müssen tidy.default_config = /file/writable/by/php
vornehmen und diese Datei dynamisch aktualisieren, damit sie die gewünschten Optionen enthält. (Ich sagte dir, es war kein netter Weg).
Ich kann sofort ein Problem damit sehen. Es gibt eine mögliche Race-Bedingung.
Wenn zwei Skripts unterschiedliche Optionen erfordern und beide gleichzeitig ausgeführt werden, besteht die Möglichkeit, dass eines der Skripts die falsche Konfiguration erhält.
Die Datei ist offensichtlich nicht dafür gedacht, ad-hoc geändert zu werden - und wie Sie wahrscheinlich aus dem Erweiterungscode folgen können, gibt es keinen anderen Pfad zum Eingeben von Konfigurationsoptionen, da die Optionen spezifisch für das Dokument sind.
- Ein neuer TidyDoc wird erstellt.
- Paar Konfigurationsfahnen gesetzt + default_config geladen.
- Puffer wird analysiert.
Entschuldigung, es fühlt sich an, als würde ich am Ende nur schlechte Nachrichten liefern.
Ihre beste Lösung könnte sein, mit einem benutzerdefinierten ob_start Callback zu gehen, wo Sie die volle Kontrolle über die Dokumentoptionen haben.
Edit:
Hatte ein bisschen ein Brainstorming und versucht, ein paar Dinge, dies zu umgehen. Alles ist gescheitert.
Ich versuchte registering a custom stream wrapper, per-Skript-Werte zurückzugeben, und tidy.default_config = tidy://config
festlegen. Es stellt sich heraus, dass Stream-Wrapper nicht vom Config Loader aufgelöst werden und dies funktioniert nicht.
Eine Sache, die ich nicht richtig testen konnte, ist die pro-Verzeichnis-Konfiguration .user.ini
oder [PATH=]
ini Abschnitt. Diese sind beide nur mit dem CGI/FastCGI SAPI (nicht FPM) verfügbar. Ich vermute, das hilft dir wahrscheinlich auch nicht.
Nun, schlechte Nachrichten liefern, ist es nicht so. Aus der Dokumentation, die ich bereits erwartet hatte, geht nicht, und ich habe auch eine zweite Meinung eingeholt, die Sie weitgehend gemacht haben. Vielen Dank, dass Sie sich die Zeit genommen haben. Es ist wahrscheinlich sinnvoll, darüber nachzudenken, ob eine neue Einstellung/ein neuer Kontext/eine neue Option für diese Callbacks als Feature-Anforderung gewünscht wird, damit diese zur Laufzeit besser kontrolliert werden kann. – hakre
X-Ref: https://github.com/leight/php-src/commit/42ba66ff4e427a28e2e652692a4a10cec8b79df2 – hakre