2010-09-03 48 views
7

Tôi có một lớp PHP mà tôi muốn chuyển đổi sang một phần mở rộng PHP. Tôi đã kiểm tra một số hướng dẫn (tuxradar's writing extensions, php.net's extending phpzend's extension writing) và điều đó hơi phức tạp.Chuyển đổi một lớp học thành một phần mở rộng

tôi thấy bài viết "How to write PHP extensions" (ed lưu ý: trang web là không còn tồn tại) và tôi muốn biết nếu nó có thể sử dụng điều này để làm cho nó lấy một lớp học PHP từ một con đường nhất định (chẳng hạn /home/website1/public_html/api/class.php), thực hiện nó và trả về cá thể lớp.

Bằng cách này, nó sẽ có thể sử dụng được trên các trang web khác được lưu trữ trên cùng một máy chủ - mỗi trang có thể chỉ cần gọi hàm và nó sẽ có được cá thể riêng của nó.

Điều đó có khả thi không?

+0

Bạn đang cố gắng cho phép người khác sử dụng lớp học của mình mà không họ có thể xem nguồn không? Nếu không, chỉ cần sao chép class.php vào hệ thống tập tin ở đâu đó, nơi các trang web khác có thể nhận được nó. Không có nhiều bản sao. Bạn thường sẽ không biến lớp PHP của bạn thành một phần mở rộng trừ khi bạn đã làm nó vì lý do hiệu suất. – bramp

+0

vâng tôi cần phải để người khác sử dụng lớp mà không có veiwing nguồn, cảm ơn trả lời – Wiika

Trả lời

0

Trong một câu: Tôi không tin như vậy, tôi nghĩ rằng nó có nhiều công việc hơn thế.

4

Câu hỏi mà tôi hiểu bây giờ là, Người dùng có một lớp PHP mà họ muốn chia sẻ với nhiều người, nhưng không muốn chia sẻ mã nguồn.

Có nhiều giải pháp cho điều này, chúng thường chuyển đổi mã PHP thành một số loại mã byte và sử dụng phần mở rộng PHP để chạy mã byte. Tôi chưa bao giờ sử dụng bất kỳ các giải pháp này, nhưng tôi biết những điều sau đây:

Tôi chắc chắn có những người khác. Chỉ Google cho PHP Compiler hoặc PHP Accelerator.

0

Không, không có công cụ nào có thể làm điều đó.

Dù sao, những gì bạn muốn gọi dễ dàng được thực hiện với auto_prepend_file. Chỉ cần làm cho rằng chỉ thị ini trỏ đến một tập tin PHP có định nghĩa lớp, và sau đó nó sẽ có sẵn cho tất cả các ứng dụng.

Nếu bạn không muốn người dùng có thể sử dụng nguồn, bạn có thể sử dụng một số tiện ích mở rộng zend cho phép bạn biên dịch trước tệp và sử dụng nó trong biểu mẫu đó.

+0

tôi đã sử dụng auto_prepend_file nhưng tôi đã có một vấn đề với hạn chế open_basedir, là có bất cứ điều gì tôi có thể làm để bỏ qua nó? – Wiika

+0

@Wikka Có, bạn có thể đường dẫn nơi tệp là open_basedir. – Artefacto

+0

bạn có thể cung cấp thêm thông tin về nó không? – Wiika

0

Bạn có thể mở rộng các hàm thư viện C bên dưới vào không gian PHP bằng cách viết PHP extensions. Tuy nhiên, tôi nghĩ rằng trong trường hợp của bạn, bạn không cần phải viết một.

0

Tôi biết rằng đây là câu hỏi cũ (từ năm 2012) tuy nhiên câu trả lời đã thay đổi và hiện tại, công cụ có thể thực hiện điều này. Bộ công cụ mở rộng PHP-to-C của Jim Thunderbirds cung cấp các phương tiện để lấy một lớp đơn giản trong một tệp tất cả các cách lên tới một khung công tác đa cấp độ đa tệp phức tạp và chuyển nó thành một phần mở rộng C sau đó có thể được cài đặt vào PHP của bạn máy chủ.

Trong khi trong nhiều trường hợp sử dụng làm như vậy là không cần thiết vì mã PHP bình thường sẽ hoạt động tốt như trong một số trường hợp, cải thiện hiệu suất đáng kể có thể được trải nghiệm. Trang thông tin cho thấy rằng một lớp thông thường (được thiết kế một cách có chủ ý để mất một thời gian dài) mất 16,802139997482 giây dưới dạng vani thuần túy PHP và 3.9628620147705 dưới dạng phần mở rộng PHP được tạo bằng công cụ này.

Là một lợi thế bổ sung, công cụ này cũng cung cấp một tính năng bổ sung. Khả năng kết hợp mã PHP (được chuyển đổi thành C) và mã C gốc trong cùng một phần mở rộng có thể tạo ra các cải tiến hiệu suất lớn hơn nữa. Ví dụ tương tự được sử dụng ở trên chỉ công cụ 0.14397192001343 giây khi phần lớn mã chuyên sâu được chuyển sang mã C sắp xếp bong bóng và chỉ cần gọi nó từ bên trong mã PHP.

Là một lưu ý phụ có chức năng cho các nhà phát triển cuối sử dụng mã bằng cách sử dụng phần mở rộng rất giống với việc các tệp được bao gồm thủ công trong tệp PHP đang được phát triển ngoại trừ nó không được bao gồm cụ thể. thành phần mở rộng PHP.

(Tuyên bố từ chối trách nhiệm: Tôi không liên kết với nhà phát triển này nhưng vui mừng vì đã bắt gặp nó vì nó đang hoạt động để chuyển đổi một số lớp chuyên sâu của tôi thành các phần mở rộng PHP mà không cần biết C).

Các vấn đề liên quan