- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Cài đặt OpenCart extension và themes, sửa đổi các đoạn code và có thể học các thành phần phát triển mở rộng. Tuy nhiên, hầu hết người dùng OpenCart họ đang gặp phải những lỗi không mong đợi và không tìm được giải pháp sử lý.
Nhưng các lỗi OpenCart đều có thể được sử lý. Nếu bạn gặp lỗi, cũng đừng lo lắng vì những lỗi bạn gặp phải không phải mới mà đã được người dùng opencart tìm ra và sửa trước đó. Trong bài viết này mình sẽ liệt kê toàn bộ những lỗi thường gặp đối với người phát triển website bằng OpenCart. Đôi khi, một lỗi cơ bản nhưng sẽ có nội dung thông báo khác nhau.
Trước khi tiếp tục, bạn cần biết rằng một lỗi có thể kéo theo một lỗi khác. Điều này dễ hiểu khi code của bạn bị lỗi thì phần code còn lại sẽ không làm việc và phát sinh ra lỗi khác bởi không sử dụng code phía trên. Vì Nguyên tắc hoạt động mã lệnh là như vậy, nhưng chúng ta hãy chỉ xem xét lỗi phát sinh đầu tiên đó là mấu chốt của chuỗi các lỗi xẩy ra.
1. Lỗi trắng trang hoặc 500 Internal Server Error
Lỗi trắng trang là lỗi php do một vài lý do mà không hiển thị lỗi trên trang bởi vì server của bạn không cấu hình để hiển thị lỗi. Trong khi đó lỗi “500 Internal Server Error” nghĩa là cấu hình sai nhưng bạn không biết cụ thể chính xác là lỗi gì, do đâu hoặc file nào xuất lỗi. Mặc nhiên bạn không có manh mối gì.
Trước hết bạn cần cho lỗi hiển thị lên web để phân tích nguyên nhân và tìm cách sửa. Sử dụng những cách gợi ý sau để giúp bạn hiển thị lỗi:
- Thiết lập “Output Compression Level”=0 trong tab System > Settings > Server
- Mở php.ini và thêm vào code sau:
display_errors = 1; error_reporting = E_ALL; log_errors = 1;
-
Nếu server của không thông qua được file php.ini thì có giải pháp thay thế khác. Bạn mở index.php và thêm đoạn code dưới đây ở trên dòng 2.
ini_set('display_errors', 1); ini_set('log_errors', 1); error_reporting(E_ALL);
- Khi bạn đã nhìn thấy lỗi thì có thể xóa đoạn code trên đi, để tắt lỗi tránh trường hợp khách truy cập vào thấy sẽ không hay.
Biến không tồn tại
Lỗi xẩy ra khi bạn truy cập sử dụng biến chưa khai báo. Trong lập trình PHP để kiểm tra biến tồn tại chúng ta có hàm isset()
.
Error variant
- PHP Notice: Undefined index: company in /path/public_html/catalog/model/account/customer.php on line 8
- PHP Notice: Undefined variable: order_id in /path/public_html/catalog/controller/account/order.php on line 149
- PHP Notice: Undefined variable: product in /path/public_html/vqmod/vqcache/vq2-catalog_view_theme_default_template_product_product.tpl on line 272
GIải pháp:
1. Nếu bạn gặp lỗi này với bản mới cài đặt OpenCart, thì share lên diễn đàn OpenCart để thành viên kiểm tra. Nếu bạn biết chút tiếng anh thì gửi lên diễn đàn chính của OpenCart điều này sẽ giúp nhà phát triển OpenCart cải thiện sản phẩm của họ.
2. Lỗi có thể gặp phải khi bạn cài đặt extension, như vậy bạn cần tắt extension và thông báo cho tác giả.
3. Nếu lỗi xẩy ra trong thư mục “/vqmod/vqcache”, thì lỗi này do vQmod file. Tắt file vQmod bằng cách có thể đổi tên thành vqmod_file.xml_
Hàm/phương thức không tồn tại
Nếu bạn thấy lỗi này “Fatal error: Call to undefined function” hoặc “Fatal error: Call to undefined method” nghĩa là bạn đang gọi hàm hoặc phương thức chưa được định nghĩa. Lý do có thể file chưa được upload đúng hoặc extension không tương thích với phiên bản OpenCart của bạn. Dưới đây mình phân loại dựa trên từng lỗi cụ thể.
Error variant
Liên quan đến file hệ thống OpenCart
- Fatal error: Call to undefined function utf8_strlen() in /path/public_html/system/helper/utf8.php on line 39
- Fatal error: Call to undefined method Customer::isLogged() in /path/public_html/catalog/model/catalog/product.php on line 8
- Warning: require_once(/path/public_html/system/library/customer.php) [function.require-once]: failed to open stream: No such file or directory in /path/public_html/index.php on line 22
- Fatal error: require_once() [function.require]: Failed opening required ‘/path/public_html/system/library/customer.php’ (include_path=’.:/usr/lib/php’) in /path/public_html/index.php on line 22
Liên quan tới vQmod files
- Fatal error: Call to undefined method ModelAccountCustomer::getPaymentAddress() in /path/public_html/vqmod/vqcache/vq2-catalog_controller_checkout_confirm.php on line 38
Liên quan hàm PHP trong OpenCart
- Fatal error: Call to undefined function imagecreatefromjpeg() in /path/public_html/system/library/image.php on line 34
- Fatal error: Call to undefined function mysql_connect() in /path/public_html/system/database/mysql.php on line 6
Giải thích
Lỗi do files hệ thống OpenCart
1. Một vài files không được upload hoặc bị sửa đổi trong quá trình upload. Có thể upload lại files lên server sử dụng chế độ ASCII mà không phải binary.
2. Trong trường hợp lỗi xuất hiện bởi vì đường dẫn trên server chưa cấu hình đúng ở file config.php. Do vậy, hãy kiểm tra lại server path ở 2 file config.php và admin/config.php
3. “Warning/ Fatal error: require_once” lỗi này thông báo file không tồn tại. Bạn cần upload file đó theo lỗi thông báo hoặc sửa lại đường dẫn trong file config.php như trên.
Lỗi do vQmod files
1. Vì vQmod không thể tạo cache mới từ file vQmode. Lúc này bạn kiểm tra permission của folder vqmod/cache
, hãy đảm bảo có thể viết được vào thư mục này và xóa toàn bộ files cache cũ đi để test.
2. Kích hoạt/tắt từng file vQmod bạn có. Nếu bạn gặp lỗi với file nào thì liên hệ người tạo ra file đó.
3. Do extensions không tương thích với phiên bản OpenCart hiện tại của bạn hoặc do lỗi chính từ extension, bạn cùng cần hỏi lại người phát triển.
Liên quan đến hàm PHP
1. PHP có hàng tá các hàm có sẵn, bạn có thể tìm hàm ở đây. Nếu gặp lỗi tức là hosting server không hỗ trợ hàm đó, bạn liên hệ với nhà cung cấp hosting.
Headers Already Sent
Bạn gặp lỗi “headers already sent” sau khi cài đặt OpenCart, cập nhât phiên bản mới hoặc file vQmod. Xem chi tiết nguyên nhân ở đây.
Error variant
- Warning: Cannot modify header information – headers already sent by (output started at /path/public_html/config.php:31) in /path/public_html/index.php on line 175.
- Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /path/public_html/config.php:31) in /path/public_html/system/library/session.php on line 11.
- Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /path/public_html/config.php:31) in /path/public_html/system/library/session.php on line 11.
Giải pháp
Tải file đã xẩy ra lỗi và áp dụng các cách sửa sau đây:
1. Xóa khoảng trắng ở đầu và cuối file.
<?php //contain space echo "remove all space or line-break before <?php and after ?>"; ?>
2. Lưu file với notepad+, lưu ý đặt encode ANSI or UTF-8 without BOM.
3. Upload lại file lên server bằng phần mềm FTP.
Vấn đề Session
PHP session lưu thông tin user trên server một khi người dùng đăng nhập hay quản lý giỏ hàng..và session sẽ bị xóa sau khi user thoát khỏi website. OpenCart sử dụng session trong nhiều tính năng như trạng thái login, giỏ hàng, so sánh..Trong nhiều trường hợp nếu session gặp vấn đề sẽ hiển thị lỗi, nhưng có lúc không hiển thị lỗi ra màn hình. Để phát hiện ra lỗi session, dưới đây là một số cách giúp bạn tìm ra lỗi:
- Sản phẩm trong giỏ hàng tự động xóa
- Sản phẩm trong cart bị xóa sau khi đăng nhập
- Không có sản phẩm lưu lại để so sánh
- Khi đăng nhập vào OpenCart admin và gặp lỗi “Invalid token session. Please login again”
Error variant:
- Warning: session_start () [function.session-start]: open (/tmp/sess_41abirkdiesf9efwej46wtib2, O_RDWR) failed: No such file or directory (2) in /path/public_html/system /library /session.php on line 11
- Warning: session_start () [function.session-start]: open (/tmp/sess_41abirkdiesf9efwej46wtib2, O_RDWR) failed: Permission denied (13) in /path/public_html/system /library /session.php on line 11
- Warning: session_start() [function.session-start]: open(/tmp/sess_41abirkdiesf9efwej46wtib2, O_RDWR) failed: No space left on device (28) in /path/public_html/upload/system/library/session.php on line 11
Solution
Không tồn tại file hoặc thư mục
1. Mở php.ini và thêm dòng code sau:
session.save_path = /tmp;
2. Nếu giải pháp trên vẫn không giải quyết vấn đề, liên lạc nhà cung cấp host và hỏi họ làm sao để thiết lập session.save_path
cho đúng.
Lỗi khác
1. “Permission denied”, liên lạc người cung cấp hosting để kiểm tra thư mục session có quyền truy cập và viết vào không.
2. “No space left on device” đây là vấn đề của hosting và bạn cần nâng cấp lên dung lượng lưu trữ lớn hơn.
Bộ nhớ cho phép
Lỗi này sẩy ra vì bộ nhớ của bạn không đủ để thực thi code PHP (upload ảnh kích thước lớn, xóa nhiều sản phẩm, gửi email tới nhiều người). Tăng bộ nhớ cho phép PHP thực thi code:
Error variant
- Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 47200 bytes) in /path/public_html/system/library/image.php on line 34
- Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 13069817 bytes) in /path/public_html/system/library/mail.php on line 144
- Fatal error: Out of memory (allocated 33554432) (tried to allocate 14024 bytes) in /path/public_html/library/image.php on line 34
GIải pháp
Áp dụng một trong các cách sau đây để tăng bộ nhớ PHP lên đến 64MB, 128MB, 256MB or 512MB tùy thuộc vào host của bạn.
1. Sửa file php.ini memory_limit = 128M;
2. Hoặc đặt code sau vào .htaccess
php_value memory_limit 128M
3. Nếu bạn thường xuyên mắc phải lỗi này và sử dụng giải pháp trên không hoạt động hãy liên lạc người quản trị hosting. Nếu bạn dùng share-host thì đây là mức giới hạn. Bạn không thể thiết lập memory-limit đến 64Mb
Lỗi Giới hạn
Nếu bạn bị lỗi “SAFE MODE Restriction in effect”. Là do PHP restriction , bạn gọi hàm PHP có sẵn nhưng server apache không cho phép truy cập. Do vậy không liên quan đến mã nguồn OpenCart là do cấu hình server của bạn.
Error variant:
- Warning: session_start() [function.session-start]: SAFE MODE Restriction in effect. The script whose uid is 10025 is not allowed to access /path/public_html/system/library/session.php on line 11
- Warning: imagejpeg() [function.imagejpeg]: SAFE MODE Restriction in effect. The script whose uid is 10305 is not allowed to access /path/public_html/image/cache/data owned by uid 48 in /path/public_html/system/library/image.php on line 44
- Warning: is_dir(): open_basedir restriction in effect. File(/path/public_html/image/87cngmlc22pe96fof5fhmq9c290phri7) is not within the allowed path(s): (/path/server/) in /path/public_html/catalog/controller/checkout/confirm.php on line 248
Giải pháp
1. Safe Mode và open_basedir luôn bị giới hạn hãy yêu cầu người quản trị hosting tắt chúng đi là cách tốt nhất để fix lỗi.
2. Đặt đoạn code sau trong php.ini
// Put code bellow at php.ini safe_mode = Off; --- or --- // Put code bellow at .htaccess php_value safe_mode off
Các công cụ hữu ích
Thông tin hệ thống
THông tin hệ thống bao gồm server, các hàm PHP và files/folders permission được yêu cầu để cho phép sử dụng OpenCart. Extension sau sẽ giúp bạn kiểm tra server có đáp ứng được nhu cầu chạy OpenCart hay không. Bạn có thể download trên OpenCart Marketplace.
vQmod Manager
vQmod Manager cho phép user quản lý các files vQmod. Extension này sẽ hiển thị thông tin của file vQmod và giúp bạn quản lý các tác vụ (upload, xóa, cài đặt, gỡ cài đặt và sao lưu).
Để nhận được bài viết mới vui lòng đăng ký kênh kiến thức WordPress từ A-Z ở Form bên dưới. Bạn cũng có thể nhận được sự trợ giúp trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
trung says
chào anh . e đang bị một vấn đề nghiêm trọng . khi đổi sang web sang server mới web e hiển thị bình thường , nhưng khi e cài 1 theme mới vào thì lúc e load lại trang hoàn toàn mất hết trắng xóa luôn
SEO says
Mình đang gặp lỗi này: có thể hướng dẫn mình cụ thể không?
Khi đăng nhập vào OpenCart admin và gặp lỗi “Invalid token session. Please login again”
Hoàng Quách says
bạn xem cách sửa lỗi ở đây https://stackoverflow.com/questions/16506897/opencart-admin-access-invalid-token-session-please-login-again
SEO says
Mình có thử theo link đó những vẫn không được