2015-02-05 16 views
6

Tôi có một trang web sử dụng Apache đó chỉ là đoạn mã sau:PHP Fatal Error: Class 'MongoClient' không tìm thấy

<?php $m = new MongoClient(); ?> 

và khi tôi cố gắng truy cập vào nó, tôi nhận được lỗi trong error.log

`PHP Fatal Error: Class 'MongoClient' not found` 

Sau đây là các cài đặt có thể sai, nhưng tôi không nghĩ vậy.

php -i | grep 'Configuration' =>Configuration File (php.ini) Path => /etc/php5/cli | Loaded Configuration File => /etc/php5/cli/php.ini

grep 'mongo' /etc/php5/cli/php.ini =>extension=mongo.so

php -i | grep 'extension' => extension_dir => /usr/lib/php5/20121212 => /usr/lib/php5/20121212

ls /usr/lib/php5/20121212/ | grep 'mongo.so' =>mongo.so

tôi đã không thể tìm thấy bất cứ điều gì cho thấy tôi đã cài đặt nó sai hoặc có cấu hình sai. Tôi đã cài đặt ứng dụng này trong vòng hai giờ qua sử dụng peclpear (sudo pear install -f pecl/mongosudo pecl install mongo)

Tôi đã khởi động lại Apache và thậm chí là máy tính của mình nhiều lần.

Vậy tại sao tôi gặp lỗi Class 'MongoClient' not found?

Tôi đang sử dụng Ubuntu. PHP phiên bản 5.5.

Chỉnh sửa: Tôi vừa phát hiện ra rằng MongoClient là hợp lệ khi tôi chạy php ở chế độ tương tác. Có lẽ nó đã làm với một sự cho phép người dùng/vấn đề cài đặt người dùng?

+2

Câu hỏi đó đang sử dụng XAMPP, mà tôi không, và các giải pháp kết thúc lên được một vấn đề với chỉ định một .dll, trong khi tôi đang trên Linux. Ngoài ra, tất cả mọi thứ câu trả lời duy nhất sẽ trả lời được giải quyết trong câu hỏi của tôi. –

+1

Kiểm tra quyền của '/ usr/lib/php5/20121212/mongo.so' - chúng phải giống như quyền của các tệp khác trong thư mục. Ngoài ra, bạn có thể chạy 'strace' để xem chính xác những gì thất bại khi' php' cố mở 'mongo.so'. Ví dụ. 'strace -f php test.php 2> & 1 | grep 20121212' – VolenD

+0

@ user3584460 Cảm ơn bạn đã trả lời. Các điều khoản về cơ bản giống nhau (664 thay vì 644) nhưng tôi đã thay đổi chúng chính xác như nhau và không có vấn đề gì. Đối với phần thứ hai, có vẻ như không có vấn đề bởi vì nó hoạt động khi tôi đang chạy nó như bản thân mình. Tôi nghĩ rằng tôi đã làm cho các câu hỏi loại khó hiểu, như tôi đã không chỉ định rằng đây là một vấn đề khi Apache (người dùng www-dữ liệu) đang chạy PHP, không phải khi tôi. –

Trả lời

5

Vấn đề là tôi đang sử dụng php -i | grep 'Configuration' để tìm tệp .ini. Điều này dẫn đến /etc/php5/cli/php.ini. Nhìn lại, điều này cần phải là một sự giới thiệu rõ ràng: cli có nghĩa là giao diện dòng lệnh, về cơ bản cho trình thông dịch. Những gì tôi cần là tệp ini mà Apache đang sử dụng.

Thật không may, không có cách tuyệt vời để làm điều này như tôi không thể đăng nhập vào người sử dụng www-data, nhưng tôi đã thực hiện một tập tin đó có mã

<?php 
    phpinfo(); 
?> 

và tiết lộ rằng vị trí tập tin .ini thực ra là /etc/php5/apache2/php.ini.

Khi tôi cập nhật rằng tệp ini với extension=mongo.so, mô-đun đã được tải khi khởi động, vì vậy tôi đã khởi động lại và mọi thứ hiện đang hoạt động.

+0

Điều đó đúng 100%. Đối với tôi, đó là: "/etc/php5/fpm/php.ini" – Rav

1

tôi đã làm nó bằng cách sử sau chuỗi

sudo apt-get install mongodb 

sudo service mongodb start 

mongo 

sudo pecl install mongo 

cd /build/buildd/php5-5.5.9+dfsg/pear-build-download 

sudo tar zxvf mongo-1.6.8.tgz 

cd mongo-1.6.8 

sudo phpize 

cd ./configure 

sudo make install 

sudo gedit /etc/php5/apache2/php.ini 

add extension=mongo.ini inphp.ini 

sudo gedit/etc/php5/apache2/conf.d/mongodb.ini 

add extension=mongo.so 

sudo service apache2 restart 

và bởi sự giúp đỡ của sau url

http://www.w3resource.com/mongodb/install-php-driver.php

+0

Điều này có vẻ như bạn đang thực hiện cài đặt hai lần. 1) sử dụng "sudo pecl install mongo". 2) bằng cách sử dụng "định cấu hình, thực hiện cài đặt". Thứ hai, tại sao trước tiên bạn liên kết phần mở rộng từ php.ini với mongodb.ini và sau đó thêm phần mở rộng ở đó? –

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