2010-09-03 6 views
7

Ich habe eine PHP-Klasse, die ich in eine PHP-Erweiterung konvertieren möchte. Ich habe einige Tutorials (tuxradar's writing extensions, php.net's extending php und zend's extension writing) überprüft und es ist ein bisschen kompliziert.Konvertieren einer Klasse in eine Erweiterung

ich den Artikel "How to write PHP extensions" gefunden (Ed note: Seite ist nicht mehr existierenden) und ich wollte wissen, ob es möglich ist, diese zu verwenden, um es von einem bestimmten Pfad eine PHP-Klasse zu machen greifen (sagen wir /home/website1/public_html/api/class.php) ausführen es und die Klasseninstanz zurückgeben.

Auf diese Weise wird es in anderen Websites, die auf demselben Server gehostet werden, verwendbar sein - jeder kann einfach die Funktion aufrufen und es wird eine eigene Instanz erhalten.

Ist das möglich?

+0

Möchten Sie anderen erlauben, Ihre Klasse zu verwenden, ohne dass sie die Quelle anzeigen können? Wenn nicht, kopiere einfach die class.php in das Dateisystem wo die anderen Seiten es bekommen können. Wenn das nicht klappt, mache einfach viele Kopien. Normalerweise würden Sie Ihre PHP-Klasse nicht zu einer Erweiterung machen, es sei denn, Sie machen das aus Leistungsgründen. – bramp

+0

Ja, ich muss andere die Klasse nutzen lassen, ohne die Quelle zu vergessen, danke für die Antwort – Wiika

Antwort

0

In einem Satz: Ich glaube nicht, ich denke es ist viel mehr Arbeit als das.

4

Die Frage, wie ich es jetzt verstehe, ist, der Benutzer hat eine PHP-Klasse, die sie mit mehreren Personen teilen möchten, aber den Quellcode nicht teilen möchten.

Es gibt viele Lösungen zu diesem Thema, die den PHP-Code in eine Art Bytecode umwandeln und eine PHP-Erweiterung verwenden, um den Bytecode auszuführen. Ich habe noch nie eine dieser Lösungen verwendet, aber ich bin mir dessen bewusst wie folgt zusammen:

Ich bin sicher, dass es andere gibt. Nur Google für PHP Compiler oder PHP Accelerator.

0

Nein, es gibt kein Tool, das das kann.

Wie auch immer, was Sie wollen, rufen Sie einfach mit auto_prepend_file. Machen Sie diese ini-Anweisung einfach auf eine PHP-Datei mit der Klassendefinition, die dann für alle Anwendungen verfügbar ist.

Wenn Sie nicht möchten, dass die Benutzer die Quelle verwenden können, können Sie eine der mehreren Zend-Erweiterungen verwenden, mit denen Sie die Datei vorkompilieren und in diesem Formular verwenden können.

+0

Ich habe auto_prepend_file verwendet, aber ich hatte ein Problem mit der Einschränkung von open_basedir, gibt es etwas, was ich tun kann, um es zu umgehen? – Wiika

+0

@Wikka Ja, Sie können den Pfad, in dem die Datei zu open_basedir ist. – Artefacto

+0

können Sie bitte mehr Informationen darüber geben? – Wiika

0

Sie können die zugrunde liegenden C-Bibliotheksfunktionen in PHP-Raum erweitern, indem Sie PHP extensions schreiben. Aber ich denke, in Ihrem Fall brauchen Sie keins zu schreiben.

0

Ich bin mir bewusst, dass dies eine alte Frage ist (seit 2012) aber die Antwort hat sich geändert und es gibt jetzt ein Werkzeug, das dies tun kann. Jim Thunderbirds PHP-to-C Extension-Toolset bietet die Möglichkeit, eine einfache Klasse in einer Datei bis hin zu einem komplizierten multi-level namespaced Framework mit mehreren Dateien zu erstellen und in eine C-Erweiterung zu konvertieren, die dann in PHP installiert werden kann Server.

Während dies in vielen Anwendungsfällen nicht erforderlich ist, wird der normale PHP-Code genauso gut funktionieren. In einigen Fällen können erhebliche Leistungsverbesserungen auftreten. Die Informationsseite zeigt, dass eine gewöhnliche Klasse (absichtlich so entworfen, dass sie lange dauert) 16.802139997482 Sekunden als Plain-Vanilla-PHP und 3.9628620147705 als PHP-Erweiterung benötigte, die mit dem Tool erstellt wurde.

Als zusätzlichen Vorteil bietet das Tool auch eine zusätzliche Funktion. Die Möglichkeit, PHP-Code (in C zu konvertieren) und nativen C-Code innerhalb der gleichen Erweiterung zu kombinieren, was zu noch größeren Leistungsverbesserungen führen kann. Das gleiche Beispiel, das oben nur Tool 0.14397192001343 Sekunden verwendet, wenn viel von dem intensiven Code zu einem Bubble-Sort-C-Code verschoben wurde und einfach aus dem PHP-Code aufgerufen wurde.

Als eine Randnotiz funktional zu Ende Entwickler die Verwendung des Codes mit der Erweiterung ist sehr ähnlich wie die Dateien manuell in der PHP-Datei zu entwickeln, außer es muss nicht speziell enthalten sein, wie es durch getan wird die PHP-Erweiterungskomponente.

(Haftungsausschluss: Ich bin nicht mit diesem Entwickler verbunden, aber bin froh, dass ich darauf gestoßen bin, da es bis jetzt funktioniert, einige meiner Intensivklassen in PHP-Erweiterungen zu konvertieren, ohne C zu kennen).

Verwandte Themen