2011-08-19 41 views
8

PHP thường được biên dịch để mã hóa bởi công cụ Zend vào thời gian thực thi.Biên dịch mã PHP thành mã hóa và mã hóa được thực thi

Để bỏ qua việc biên dịch mỗi lần người ta có thể sử dụng bộ nhớ cache opcode như APC để lưu opcode trong bộ nhớ dùng chung và sử dụng lại nó.

Ok, bây giờ có vẻ như có không có giải pháp nào để biên dịch PHP thành mã opcode và sử dụng nó. Tương tự như cách bạn sử dụng Java.

Nhưng tại sao? Tôi tự hỏi về b/c đây là một ý tưởng khá rõ ràng, vì vậy tôi đoán có một lý do cho việc này.

EDIT:

câu hỏi cốt lõi là:

sẽ không làm cho PHP-biên soạn làm cho opcode-bộ nhớ đệm không cần thiết?

"Lý do" duy nhất chống lại điều đó là bạn không thể chỉ sửa chữa điều gì đó trên hệ thống trực tiếp ... mà dù sao thì cũng không tốt xấu.

+3

thậm chí còn có một aproach tốt hơn bằng facebook ... xem Hip Hop cho PHP https://github.com/facebook/hiphop-php –

+0

[Zend Guard] (http://www.zend.com/en/ sản phẩm/bảo vệ /) đã có điều này để hỗ trợ các dự án cảm thấy nguồn đóng? –

+1

dễ dàng ... câu hỏi của tôi không phải là về chuyển đổi PHP sang C++. Đó là về opcode. – Raffael

Trả lời

2

Bạn đã đưa ra một lý do chống lại nó. Một điều rất quan trọng là nếu bạn tách biên dịch khỏi thời gian chạy cả về thời gian xảy ra mà cả về phần cứng nơi nó chạy, bạn nhanh chóng chạy vào các vấn đề phụ thuộc phức tạp - điều gì xảy ra khi bạn cố gắng chạy opcode được tạo ra bởi PHP 5.1 trên một thời gian chạy PHP 5.3?

Nó cũng làm cho việc gỡ lỗi mã khó hơn - vì trình gỡ lỗi phải ánh xạ mã opcode quay lại mã nguồn.

Nhưng một câu hỏi rất quan trọng mà bạn dường như không hỏi đã trả lời là lợi ích của việc tạo ra mã opcode là gì?

Việc biên dịch mã opcode trước khi thời gian chạy có lợi ích đáng kể so với bộ nhớ đệm mã opcode không? Sự khác biệt sẽ là không thể đo lường nhỏ.

Chắc chắn raison d'être cho HipHopnatively biên dịch mã PHP runs faster hơn PHP với opcode cache tại các chi phí của một số chức năng. Nhưng đó là một cái gì đó khá khác nhau.

Bạn có nghĩ rằng chỉ có các opcodes trên máy chủ mới cải thiện tính bảo mật (do tối nghĩa)?

+0

okay, tốt, nó có vẻ như biến động của định nghĩa opcode mà không có khả năng tương thích xuống là trở ngại chính. Mặc dù gỡ lỗi là không có lý do, gây ra bạn gỡ lỗi trên môi trường dev, mà không cần biên dịch trước đó. Tôi không nói về an ninh. – Raffael

+0

Vì vậy, bạn đang đề xuất việc kiểm tra/gỡ lỗi bằng phần mềm khác với việc sử dụng trong sản xuất là OK? – symcbean

+1

tốt, một nhà phát triển C++ - cũng sẽ không gỡ lỗi mã máy ... tôi có đúng hay tôi đúng không? – Raffael