Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Создание сайтов Харьков

Установка OCMOD модулей на Opencart 2.x на localhost (denwer) без FTP

22 июня 2015 в 11:40 Автор: Nikita_Sp в категории Статьи о php 8 комментариев

Работая с интернет магазином на Opencart 2 на локальном хосте (я использую, например, Denwer), вы можете столкнутся со сложностью установки OCMOD модулей, т.к. установщик требует настроенного FTP доступа, а в пакете Denwer’a отсутствует FTP server.

Opencart extension installer ошибка ftp

Таким образом, разработчик не может установить модификации на Opencart 2 используя стандартный Extension Installer. Но для решения этой проблемы существует решение, достаточно простое и красивое. Достаточно лишь модифицировать несколько строк кода!

Итак, для изменения алгоритма работы установщика дополнений в Opencart 2.x необходимо модифицировать файл admin/controller/extension/installer.php

Далее необходимо найти строку, где указан шаг с использование FTP соединения для копирования файлов дополнения на сервер (~133 line):

'url'  => str_replace('&', '&', $this->url->link('extension/installer/ftp', 'token=' . $this->session->data['token'], 'SSL')),

Как видим в троке идет обращение к функции FTP, соответственно, для обхода данного шага нам необходимо изменить имя вызываемой функции на имя нашей функции, которую мы добавим в файл далее. Для этого заменим вышеупомянутую строку на следующую:

'url'  => str_replace('&', '&', $this->url->link('extension/installer/localcopy', 'token=' . $this->session->data['token'], 'SSL')),

После этого нам необходимо добавить собственно саму функцию localcopy(), код которой расположен ниже, в любое удобное место, например, перед строкой (~535 line):

public function clear() {

Размещаем код функции localcopy() и установщик расширений OpenCart 2.x будет работать без настроек FTP!

public function localcopy() {
	$this->load->language('extension/installer');
	$json = array();

	if (!$this->user->hasPermission('modify', 'extension/installer')) {
		$json['error'] = $this->language->get('error_permission');
	}

	$directory = DIR_UPLOAD . str_replace(array('../', '..\\', '..'), '', $this->request->post['path']) . '/upload/';
	if (!is_dir($directory)) {
		$json['error'] = $this->language->get('error_directory');
	}

	if (!$json) {
	// Get a list of files ready to upload
	$files = array();
	$path = array($directory . '*');

		while (count($path) != 0) {
			$next = array_shift($path);
			foreach (glob($next) as $file) {
				if (is_dir($file)) {
					$path[] = $file . '/*';
				}
				$files[] = $file;
			}
		}

	$root = dirname(DIR_APPLICATION).'/';

		foreach ($files as $file) {
		// Upload everything in the upload directory
		$destination = $root.substr($file, strlen($directory));

			if (is_dir($file)) {
			$list = glob(rtrim($destination, '/').'/*');

				if (!file_exists($destination)) {
					if (!mkdir($destination)) {
						$json['error'] = sprintf($this->language->get('error_ftp_directory'), $destination);
					}
				}
			}

			if (is_file($file)) {
				if (!copy($file, $destination)) {
					$json['error'] = sprintf($this->language->get('error_ftp_file'), $file);
				}
			}
		}
	}

	$this->response->addHeader('Content-Type: application/json');
	$this->response->setOutput(json_encode($json));
}

Надеюсь данная статья была полезной и вы нашли ответ, который искали. Ставте like, подписывайтесь, впереди еще много интересного!

8 комментариев

    • Варианты где может быть ошибка:
      1) допустили ошибку при изменении файла по данной инструкции;
      2) Файл модифицируется через vqmod и возможно там конфликт возникает (нужно смотреть файл кеша vqmod/cache/файл.php);
      3) Неверные параметры доступа к папкам (chmod)

      Начните проверку с п.3.

      • Параметры доступа верные. Все перепроверил. По первому пункту перепроверил. Вроде тоже все верно. Можете конкретно рассказать по второму пункту. Не совсем понял. Также могу сказать на сервере не работает функция ftp_conect. Поэтому Ваш метод очень сильно заинтиресовал. Могу прислать сам файл.

        • Дело в том что сам файл не особо поможет.
          В разделе контактов вы можете найти форму отправки мне письма. Отправьте доступ FTP и ссылку на сайт и я посмотрю в чем проблема.

Добавить комментарий для Роман Щербань Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вверх!

Меню блога

Категории блога

Облако тегов