2012-08-28 26 views
8

Tôi cần một cách để tìm tất cả các phần mở rộng PHP có sẵn cho dù chúng được nạp hay không. Tôi đã xem How do I see the extensions loaded by PHP? nhưng nó chỉ giải thích cách tìm các tiện ích đã tải. Tôi cũng muốn một cách để tìm các phần mở rộng chưa được tải.Tìm các phần mở rộng PHP có sẵn (chưa được nạp)

Biết extension_dir từ php.ini Tôi đã thực hiện một số ls /extension_dir/*.so trả về 26 mục nhập. Khi tôi thử với php -m, tôi nhận được 57 mục nhập. Làm thế nào là nó có thể?

Làm cách nào để biết các tiện ích mở rộng PHP nào có sẵn để tải? Tôi không muốn biết những gì được tải nhưng là có thể tải.

+2

Một số phần mở rộng được xây dựng-in không có tập tin bên ngoài. –

+1

Chỉ cần đặt các thư viện mở rộng trong một thư mục không nhất thiết có nghĩa là chúng được tải bởi php. xem http://docs.php.net/manual/en/ini.core.php#ini.extension – VolkerK

+0

@matteo Tassinari, làm cách nào? là nó được định nghĩa tại thời gian biên dịch hay là nó là một phần của php chính nó? – maazza

Trả lời

2

Nếu bạn muốn danh sách các tiện ích có thể tải, bạn sẽ nhận danh sách các tệp có phần mở rộng bằng giá trị PHP_SHLIB_SUFFIX và nằm trong thư mục PHP kiểm tra các phần mở rộng PHP (<install-dir>/lib/php/extensions/<debug-or-not>-<zts-or-not>-ZEND_MODULE_API_NO). Nếu bạn muốn tránh các tiện ích đó đã được tải, bạn nên chuyển tên của tiện ích mở rộng (không có phần mở rộng tệp) đến extension_loaded().

Hãy nhớ rằng tệp có phần mở rộng tệp phải không thể tải từ PHP dưới dạng tiện ích do tệp không có cấu trúc đúng (ví dụ: vì tệp bị hỏng) hoặc do tiện ích mở rộng PHP phụ thuộc các tệp mà tiện ích không tìm thấy hoặc không thể tải.

+0

cảm ơn câu trả lời đầy đủ này – maazza

4

Hãy nhớ rằng một số tiện ích mở rộng có thể được xây dựng tĩnh vào PHP. Bạn sẽ thấy những phần này được liệt kê dưới dạng phần mở rộng trong php.ini nhưng bạn sẽ không bị có thể vô hiệu hóa chúng và trong hầu hết các trường hợp, bạn sẽ không thấy dòng mở rộng = đề cập đến chúng trong php.ini hoặc .so/.DLL các tập tin. Việc xóa các phần mở rộng được biên dịch tĩnh yêu cầu biên dịch lại chính PHP và trong hầu hết các trường hợp, điều này hầu như không cần thiết vì hầu hết các tiện ích mở rộng được biên dịch tĩnh có xu hướng bao gồm chức năng chính hiếm khi cần được xóa .

http://arr.gr/blog/2012/06/on-php-extensions/

Nhờ đi vào Matteo Tassinari.

+0

+1 để tự trả lời cho mình –

+0

Cách nào câu trả lời cho câu hỏi được hỏi? – kiamlaluno

+0

Các tiện ích xây dựng tĩnh chưa được bật chưa? Nếu câu hỏi là về tiện ích mở rộng vẫn được tải, thì câu hỏi đó sẽ loại trừ các tiện ích mở rộng được liên kết tĩnh. – kiamlaluno

1

Một cách là để kiểm tra 'extension_dir' giá trị:

phpinfo(); 

Sau đó quét các thư mục để xem các tập tin:

$exts = scandir("/usr/lib/php5/extension_dir/"); 
print_r($exts);