2010-09-03 18 views
7

Mam klasę PHP, którą chcę przekonwertować na rozszerzenie PHP. Sprawdziłem kilka tutoriali (tuxradar's writing extensions, i zend's extension writing) i jest to nieco skomplikowane.Konwertuj klasę na rozszerzenie

znalazłem artykuł "How to write PHP extensions" (ed note: strona jest Nieistniejący) i chciałem się dowiedzieć, czy możliwe jest, aby to wykorzystać, aby go złapać klasę PHP z pewnej ścieżki (słownie /home/website1/public_html/api/class.php), wykonanie it i zwróć instancję klasy.

W ten sposób będzie można go używać w innych witrynach hostowanych na tym samym serwerze - każdy może po prostu wywołać funkcję i uzyskać własną instancję.

Czy to możliwe?

+0

Czy próbujesz zezwolić innym na korzystanie z zajęć bez wyświetlania źródła? Jeśli nie, po prostu skopiuj plik class.php do systemu plików, gdzie inne strony mogą go pobrać. W przeciwnym razie wystarczy zrobić wiele kopii. Zazwyczaj nie zmienisz swojej klasy PHP na rozszerzenie, chyba że robiłeś to ze względu na wydajność. – bramp

+0

Tak, muszę pozwolić innym używać klasy bez sprawdzania źródła, dzięki za odpowiedź – Wiika

Odpowiedz

0

W jednym zdaniu: Nie wierzę w to, myślę, że to o wiele więcej pracy niż to.

4

Pytanie, które teraz rozumiem, to: Użytkownik ma klasę PHP, którą chciałby udostępnić wielu osobom, ale nie chce udostępniać kodu źródłowego.

Istnieje wiele rozwiązań w tym zakresie, zazwyczaj zmieniają kod PHP w kod bajtowy i używają rozszerzenia PHP do uruchomienia kodu bajtowego. Nigdy nie korzystał z żadnych z tych rozwiązań, ale jestem świadomy, co następuje:

Jestem pewien, że są inni. Tylko Google dla PHP Compiler lub PHP Accelerator.

0

Nie, nie ma narzędzia, które może to zrobić.

W każdym razie, to, co chcesz wywołać, można łatwo zrealizować za pomocą auto_prepend_file. Wystarczy, że dyrektywa ini wskaże plik PHP, który ma definicję klasy, a następnie będzie dostępny dla wszystkich aplikacji.

Jeśli nie chcesz, aby użytkownicy mogli korzystać ze źródła, możesz użyć jednego z kilku rozszerzeń Zend, które umożliwiają wstępną kompilację pliku i użycie go w tym formularzu.

+0

użyłem auto_prepend_file, ale miałem problem z ograniczeniem open_basedir, czy jest coś co mogę zrobić, aby go ominąć? – Wiika

+0

@ Wikka Tak, możesz podać ścieżkę do pliku open_basedir. – Artefacto

+0

czy możesz udzielić więcej informacji na ten temat? – Wiika

0

Możesz rozszerzyć podstawowe funkcje biblioteki C na przestrzeń PHP, pisząc PHP extensions. Jednak myślę, że w twoim przypadku nie musisz tego pisać.

0

Mam świadomość, że jest to stare pytanie (od 2012 r.), Ale odpowiedź uległa zmianie i istnieje teraz narzędzie, które może to zrobić. Zestaw narzędzi PHP-to-C dla programu Jim Thunderbirds zapewnia możliwość przechodzenia prostej klasy w jednym pliku, aż do złożonego wielopoziomowego, wielopoziomowego frameworku opartego na przestrzeni nazw, i przekonwertowania go na rozszerzenie C, które można następnie zainstalować w swoim PHP serwer.

Podczas gdy w wielu przypadkach nie jest to konieczne, ponieważ zwykły kod PHP będzie działał równie dobrze, w niektórych przypadkach można doświadczyć znacznej poprawy wydajności. Strona informacyjna pokazuje, że zwykła klasa (celowo zaprojektowana, aby zajmować dużo czasu) zajęła 16,802139997482 sekund jako zwykły vanilla PHP, a 3.9628620147705 jako rozszerzenie PHP zbudowane przy użyciu tego narzędzia.

Dodatkową zaletą tego narzędzia jest również dodatkowa funkcja. Możliwość łączenia kodu PHP (konwertowanego na C) i natywnego kodu C w ramach tego samego rozszerzenia, co pozwala uzyskać jeszcze lepsze ulepszenia wydajności. Ten sam przykład użyty powyżej to tylko narzędzie 0.14397192001343 sekundy, kiedy znaczna część intensywnego kodu została przeniesiona do kodu C typu bąbelkowego i po prostu wywołanie go z poziomu kodu PHP.

Jako boczna uwaga funkcjonalnie do końca deweloperzy używający kodu używającego rozszerzenia są bardzo podobne do ręcznego uwzględniania plików w rozwijanym pliku PHP, z tym że nie muszą być specjalnie uwzględniane, ponieważ odbywa się to poprzez składnik rozszerzeń PHP.

(Uwaga: nie jestem związany z tym programistą, ale cieszę się, że go spotkałem, ponieważ do tej pory pracowałem nad przekształceniem niektórych z moich intensywnych zajęć w rozszerzenia PHP bez konieczności znajomości C).