Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 2.0.1.1 bugfix: OC2 extension installer

Просмотров: 4057 RSS 1
Howto » Web development » E-commerce » OpenCart
,

Подарок тем пользователям OC2, которые ловят ошибки JSON Error при попытках использовать стандартный установщик расширений в OC2 (при правильно прописанных параметрах в настройках магазина на вкладке FTP).

Ошибок оказалось целых три. Причём не у всех хостеров проявлялось: где-то работает инсталл, где-то нет. Повезло исследовать ситуацию на проблемном хостинге - в результате вылечили опенкартовский инсталлятор расширений.

  • Исправлена ошибка "PHP Warning: Invalid argument supplied for foreach() ... on line 333";
  • Подавление вывода предупреждений "PHP Warning: ftp_mkdir(): Create directory operation failed ... on line 338" (возникает всегда - при попытках создания существующих каталогов, таких как catalog, admin, admin/controller и т.д.);
  • включение пассивного режима FTP для устранения ошибки "PHP Warning: ftp_put(): Illegal PORT command ... on line 345"

Также описано на OpencartJazz: OCJ :: OC2 extension installer bugfix. Там прикреплён изменённый файл, но пока его можно скачать только после регистрации и "покупки" за 0.00. Будет время - починю это неудобство.

Для параноиков: мне даром не нужны ваши регистрации и личная информация. Просто мне удобно обслуживать и обновлять файлы в одном месте. И это место на данный момент -- там.
commit a60015450b6516406dcbf15f5e978b43eeee693f
Author: Ruslan Brest <rb@labtodo.com>
Date:   Thu Dec 25 20:43:39 2014 +0200
    [!] bugfix OC2 extension installer:
    
    - fix "PHP Warning:  Invalid argument supplied for foreach() ... on line 333";
    - prevent "PHP Warning:  ftp_mkdir(): Create directory operation failed ... on line 338"
      (when existing directories created: catalog, admin, admin/controller, etc.);
    - prevent "PHP Warning:  ftp_put(): Illegal PORT command ... on line 345"
diff --git a/public_html/admin/controller/extension/installer.php b/public_html/admin/controller/extension/installer.php
index 55f4517..1755cca 100644
--- a/public_html/admin/controller/extension/installer.php
+++ b/public_html/admin/controller/extension/installer.php
@@ -295,6 +295,10 @@ class ControllerExtensionInstaller extends Controller {
 				$login = ftp_login($connection, $this->config->get('config_ftp_username'), $this->config->get('config_ftp_password'));
 
 				if ($login) {
+
+					// Prevent "PHP Warning:  ftp_put(): Illegal PORT command"
+					ftp_pasv($connection, true);
+
 					if ($this->config->get('config_ftp_root')) {
 						$root = ftp_chdir($connection, $this->config->get('config_ftp_root'));
 					} else {
@@ -330,12 +334,16 @@ class ControllerExtensionInstaller extends Controller {
 								// Basename all the directories because on some servers they don't return the fulll paths.
 								$list_data = array();
 								
-								foreach ($list as $list) {
-									$list_data[] = basename($list);
+								if (FALSE !== $list) {
+									foreach ($list as $list_item) {
+										$list_data[] = basename($list_item);
+									}
 								}
 																
 								if (!in_array(basename($destination), $list_data)) {
-									if (!ftp_mkdir($connection, $destination)) {
+									// Prevent "PHP Warning:  ftp_mkdir(): Create directory operation failed" when
+									// existing directories created
+									if (!@ftp_mkdir($connection, $destination)) {
 										$json['error'] = sprintf($this->language->get('error_ftp_directory'), $destination);
 									}
 								}
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Комментариев: 1
  1. 2015-09-29 в 10:48:13 | Опарин Павел

    Решил вопрос с пассивным режимом по другому немного:

    http://oparin.info/web/opencart/oshibka-pri-ustanovke-rasshirenij-opencart-2-0

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)