Файл не может быть загружен по неизвестным причинам opencart
Содержание статьи
OpenCart-Гид
03.04.2018 14:30 (17016 просмотров)
Мы понимаем, что неподготовленному человеку довольно сложно устанавливать модули в OpenCart. Еще сложнее понять, по какой причине происходит ошибка при установке. И читать полотна текстов, а также разбираться в технических нюансах с незнакомыми терминами, когда у тебя работа остановилась, как-то не комильфо.
Мы хорошо знаем и любим свою работу. И делаем ее хорошо. И с радостью готовы помочь Вам пофиксить ошибку в Вашем интернет-магазине под управлением OpenCart.
Если Вы хотите решить вопрос как можно быстрее, поручите эту работу нам.
В то же время мы понимаем реальное положение дел: и не все магазины имеют коммерческий успех. Иногда владельцу приходится становиться еще и технарем. В таком случае, примите нашу помощь в виде подробной информации.
Содержание статьи
- Ошибки при установке модуля через менеджер расширений
- Internal Server Error (Ошибка 500)
- Ошибка «Неверный тип файла»
- Кракозябры при установке модуля
- Ошибки, содержащие слово ftp_…()
- Call to undefined zip_open()
- copy(filename): failed to open stream
- mkdir(): No such file or directory in …
- Модификатору необходим уникальный id код!
- invalid argument supplied for foreach() in …/system/storage/modification/admin/controller/extension/installer on line 247
- После установки модуль не отображается в списке модулей
- Ошибка в списке модулей при нажатии кнопку «Установить»
- Site error: the ionCube PHP Loader needs to be installed
Ошибки при установке модуля через менеджер расширений
Internal Server Error (Ошибка 500)
Внимание! Описание данной ошибки читать обязательно всем!
Ошибка Internal Server Error — проявляется тогда, когда в настройках сервера выключен показ ошибок.
Чтобы убедиться, что у Вас отключен показ ошибок в настройках сервера, проверьте настройки с помощью функции php(). На рисунке показан скрин, как быть НЕ ДОЛЖНО на следующем снимке экрана.
Что делать?
Необходимо включить показ ошибок в настройках хостинга (сервера). Если не знаете как, обращайтесь в их службу поддержки.
Что будет в результате?
После включения ошибок Вы по факту не устраните проблему, но зато вместо абстрактной надписи Internal Server Error (что следует читать как «что-то не так с настройками сервера»), Вы увидите реальную причину сбоя. То есть, там будет описание ошибки на английском языке, с которой уже можно работать.
А если не помогло?
Кроме глобальных настроек показа ошибок на хостинге, в OpenCart также есть подобная настройка (см Система — Настройка магазина — Сервер — Пункт «Показывать ошибки»). Почем же я говорю об этом в последнюю очередь? Потому что частенько при глобальном запрете на показ ошибок данная функция OpenCart не срабатывает. Это, конечно, зависит от настроек конкретного хостинга, тем не менее, это весьма распространенное явление.
Внимание!
Проблемы, которые возникают исключительно при установке расширений (модулей) в OpenCart 3 (ocStore 3), вынесены на отдельную страницу — https://opencart-guide.com/administration/extensions/problemy-s-ustanovkoj-modulej-v-opencart-3.html.
К содержанию ↑
Ошибка «Неверный тип файла»
На английском языке эта ошибка называется «Invalid file type!». Появляется тогда, когда в качестве расширения загружается не тот файл, который нужно. Чаще всего такая ошибка случается при попытке установить модуль по старинке. То есть, на этапе установки пользователь распаковывает установочный архива some-name.ocmod.zip, загружает файлы модуля по FTP и затем пытается установить файл install.xml через менеджер расширений. Однако, чтобы модификатор соответствовал формату, необходимо переименовать файл install.xml на install.ocmod.xml
Есть еще один вариант возникновения такой ошибки.
При скачивании модуля иногда предлагается скачать под конкретную версию, а иногда — одним архивом. Когда для скачивание предоставляется только один архив, это означает, что, скорее всего, в нем находятся установочные архивы для отдельных версий + файлы readme.txt с описание установки.
В общем, пригодные установочный пакет должен иметь расширение *.ocmod.zip (для архивов) или *.ocmod.xml (для отдельных модификаторов).
К содержанию ↑
Кракозябры при установке модуля
При установке модуля через менеджер расширений Вы увидели кракозябры, вместо описания ошибки. Выглядит это примерно вот так:
- Во-первых, там все-таки различаются ключевые слова. К примеру, ftp_login(), что уже намекает на то, в чем именно состоит ошибка.
- Во-вторых, чтобы прочитать это закодированное json-сообщение, можно декодировать его через json_decode().
- В-третьих, можно переключить язык админки на английский, и тогда описание ошибки будет на английском языке, что будет иметь читаемый вид.
К содержанию ↑
Ошибки, содержащие слово ftp_…()
ftp_login()
Такая ошибка значит, что php-скрипт не смог залогиниться по ФТП с теми данными, что Вы прописали в Система — Настройки — Настройки магазина — Вкладка «FTP».
ftp_chdir()
<b>Warning</b>: ftp_chdir(): Can’t change directory to ftp.server… : failed: No such file or directory in <b>…/admin/controller/extension/installer.php</b> on line <b>298</b>…
Зачастую ошибка связана с тем, что в настройках ФТП не правильно указан путь к корневой папке сайта, относительно той папки, которая является корневой для данного ФТП-пользователя. Причем к этим папкам нет прав доступа.
ftp_nlist() SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data OK <b>Warning</b>: ftp_nlist(): listen() failed: Operation not permitted (1) in <b>/…/public_html/admin/controller/extension/installer.php</b> on line <b>327</b> Зачастую ошибка связана с тем, что в настройках ФТП вообще не указан путь к корневой папке сайта. Причем к этим папкам нет прав доступа.
Call to undefined zip_open()
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data <b>Fatal error</b>: Call to undefined zip_open() in <b>/var/www/html/system/storage/modification/admin/controller/extension/installer.php</b> on line <b>120</b><br /> Такая ошибка появляет и в том случае, когда для загрузки модулей через менеджер расширений используется FTP, и в том, когда установлен модификатор localcopy.ocmod.xml . Ошибка состоит в том, что настройках сервера не включена функция для распаковки zip-архива. С такой ошибокй нужно обращаться в службу поддержки хостинга
К содержанию ↑
copy(filename): failed to open stream
OK
<b>Warning</b>: copy(/var/www/sites/opencart-2102.loc/admin//view/javascript/sortable/CONTRIBUTING.md): failed to open stream: Permission denied in <b>/var/www/sites/opencart-2102.loc/system/storage/modification/admin/controller/extension/installer.php</b> on line <b>284</b>…
Ошибка связаны с ограничениями прав доступа и чаще всего может случаться на выделенных серверах.
К содержанию ↑
mkdir(): No such file or directory in …
<b>Warning</b>: mkdir(): No such file or directory in …
Могут быть 2 причины:
- Не настроенные права доступа на папку /system/ — https://forum.opencart.com/viewtopic.php?t=155122
- Отсутствие папки /system/storage/upload/ (может быть «потеряна» при манипуляциях с сайтом (переход с версии 1.5.x на версию 2.x или подобное)
К содержанию ↑
Модификатору необходим уникальный id код!
Ошибка случается при установке некорректного установочного модификатора (xml-файла). Есть вариант, когда разработчики действительно забывают внести секцию <code>. Этот случай обсуждался вот здесь. Но, кроме этого, точно такая же ошибка выдавалась мне, когда тег <code> присуствовал, а вот вот закрывающий тег </operation> случайно был удален. В этом случае, по идее xml-файл должен был быть перестать валидным, но вместо этого OpenCart ругался на уникальный id-код.
К содержанию ↑
invalid argument supplied for foreach() in …/system/storage/modification/admin/controller/extension/installer on line 247
В редких случаях, когда на сайте установлен localcopy.ocmod.xml + еще какой-то модуль «лезет» в установку модулей, бывает новая ошибка invalid supliment argument supliment for foreach() in …/system/storage/modification/admin/controller/extension/installer.php on line 247 Честно говоря, сам я ее еще никогда не решал. И ко мне обращались с ней всего 2-3 раза и я сказал, что это ошибка точно не в моем модуле. Возможно (хотя это не факт), данная ошибка уже была пофиксина в русскоязычном сообществе:
- Официальная страница для скачивания модификатора — https://www.opencart.com/index.php?route=marketplace/extension/&extension_id=18892&filter_=QuickFix
- Страница на скачивание поправленного файла на русскомязычном форуме, где устранен какой-то баг, но какой именно я точно не проверял — https://opencartforum.com/topic/91379-baga-v-localcopyocmodxml/
К содержанию ↑
Не отображается модуль
В момент установки все прошло гладко (без ошибок), но в списке модулей новый модуль не появился.
Такое происходит, если для установки модулей в системе включен ФТП. При этом неверно указан путь к корневой папке сайта.
Зачастую FTP-пользователь создается с правом доступа к корневой папке хостинга, а не конкретного сайта. В итоге файлы загружаются на уровень выше, чем находится папка с сайтом. Проверить, куда загрузились папки модуля, можно через ФТП-менеджер.
Конкретный пример такой ошибки обсуждался здесь — https://opencartforum.com/topic/81003-ne-otobrazhaetsya-modul/
Панацеей от проблем с ошибками, начинающимися на ftp_…, является модификатор localcopy.ocmod.xml. Установите его, и больше не «парьтесь» о правильных настройках ФТП.
Еще одна возможная причина, почему модуля нет в списке модулей — это нетипичная папка с языком админки. При загрузке расширений на OpenCartForum требуется только русский и английский языки. И если у Вас другой язык, то надо просто зайти в папку с языковыми файлами и скопировать файл модуля из папки русского языка в любой другой язык, который у Вас используется.
К содержанию ↑
Ошибка в списке модулей при нажатии кнопку «Установить»
Site error: the ionCube PHP Loader needs to be installed
Полный текст ошибки: Site error: the ionCube PHP Loader needs to be installed. This is a widely used PHP extension for running ionCube protected PHP code, website security and malware blocking. Please visit get-loader.ioncube.com for install assistance. Также это может выглядеть следующим образом:
Не все модули выдают эту ошибку на этапе ативации в списке модулей. Иногда она вскрывается на этапе захода в настройки модуля или при обращении к какому-то отдельному функционалу.
Данная ошибка связана с тем, что на сервере (хостинге) не установлен IonCube Loader.Что делать? Необходимо включить IonCube Loader в настройках хостинга или установить этот модуль в случае с выделенным сервером. Если Вы не знаете, как это сделать, то обратитесь в поддержку хостинга.
Если в описании ошибки встречается фраза «corrupted file» — значит, при загрузке по FTP не была использована кодировка utf-8
Если даже при загрузке по FTP в режиме кодировки utf-8 (или модуль был установлен через Установка расширений), но ошибка все равно остается, тогда и только тогда это однозначно говорит о поврежденности файлов в модуле. Лишь в таком случае имеет смысл писать об этой ошибке автору модуля
К содержанию ↑
Источник
Ошибки при установке модулей на Opencart 2
1. Скачайте и установите фикс Localcopy
2. Обновите модификации в админке
3. Загрузите модуль наново
Ошибка 500 после установки модуля означает, что случилась какая-то критическая ошибка в php.
Для определение проблемы можно:
1. Открыть файл logs/error.log на вашем сервере. В конце этого файла будут все последние критические ошибки.
2. Открыть в админке Инструменты > Логи ошибок — в этом месте отображаются ошибки, но не всегда.
3. Включить вывод ошибок php на экран — добавить следующий код в конец файла .htaccess:
php_value display_errors 1
php_value display_startup_errors 1
php_value error_reporting E_ALL
Возможные причины:
1. Если вы раньше не загружали модули в архиве через админку — вам нужно установить бесплатную модификацию localcopy.ocmod.xml согласно инструкции и после этого переустановить модуль
2. Возможно в устанавливаемого модуля нет собственной страницы настроек и соответственно его не будет в списке Модулей
Два варианта решения:
1. Если при установке модуля из админки вылетает эта ошибка — вам нужно установить бесплатную FTP QuickFix модификацию localcopy.ocmod.xml. Она установиться без проблем через тот же установщик дополнений, только после установки не забудьте обновить модификации и затем можете приступать к установке любых модулей на Opencart 2.
2. Также решить эту ошибку можно по другому: прописать доступы к FTP в админке Система > Настройки > Магазин > вкладка FTP.
Если вы видите сообщение «Доступ запрещен! У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору.» — нужно дать права администраторам на управление модулем или страницей.
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем «Выделить все» ниже обоих блоков, затем Сохранить.
Еще одной причиной появления этой ошибки может быть не правильная установка модуля — файлы не загрузились на свои места. Загрузите файлы модуля вручную на сервер или установите фикс localcopy и переустановите модуль.
Если модуль — это один XML файл, то его расширение должно быть .ocmod.xml
Если модуль — это ocmod.zip архив, то его не нужно распаковывать, а устанавливать как есть. В таком архиве обязательно должна быть папка upload (может быть пустой), а также могут быть файлы модификаций: install.xml, install.php, install.sql. Никаких других файлов в корне архива быть не должно.
Читайте подробнее как устанавливать модули в Opencart 2
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем «Выделить все» ниже обоих блоков, затем Сохранить.
Эта ошибка означает, что в загружаемом архиве отсутсвует папка upload. Даже если у модуля нет файлов, кроме модификаций — эта папка должна присутствовать в архиве модуля .ocmod.zip, тогда она должна оставаться пустой.
Эта ошибка означает, что вы пытаетесь установить модификатор, который уже установлен или, возможно, у какого-то вашего модуля такой же ID.
Для решения этой ошибки вам нужно перед установкой удалить старую версию модификации в разделе Модули > Модификации.
Если такого модуля у вас нет, но совпадает ID, тогда нужно поменять значение параметра <code> в устанавливаемом модификаторе XML, сделать этот параметр уникальным дописав несколько символов.
Эта ошибка означает, что вы пытаетесь установить слишком объемный xml-модификатор.
Количество символов в ocmod.xml файле не должно превышать 65535.
Для решения ошибки нужно разбить xml-файл модификации на несколько частей, главное — не забыть задавать каждой уникальное значение в <code>, можно добавлять к текущему значению цифры 1,2,3… как идентификаторы части.
Еще одним способом решения есть изменения типа в поля, где храняться модификации, в таблице ‘oc_modification’ базы данных. Нужно выполнить следующий SQL-запрос:
ALTER TABLE oc_modification CHANGE xml xml MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
Похоже, вы установили на Opencart 2.3.x.x модуль для более старых версий этой системы, то есть не совместимый модуль. Нужно удалить все файлы этого модуля, иначе ошибка не исчезнет.
Для удаления файлов модулей из админкм в один клик можно использовать модуль
Также данная ошибка может возникать, если скрипт обращается к несуществующей таблице в базе данных. То есть, таблица модуля не создалась при установке. Читайте инструкцию по установке и переустановите модуль.
Если модуль не реагирует на ваши действия, будь-то нажатие на кнопку или загрузка карты или выбор даты или на любое другое действие которое есть в функционале модуля — скорее всего произошел конфликт в JS-скриптах.
Нажмите F12 на проблемной странице в браузере — откроется панель вебмастера, где на вкладке Console можно увидеть конфликты в скриптах, если они есть. Данное действие доступно в браузерах Chrome, Opera, Firefox.
Источник
[Решено] Загрузки — Неправильный тип файла!
Ну… если не проходит, то выведите причину — типа тип такого-то нет в списке
if (!in_array($this->request->files[‘file’][‘type’], $allowed)) {
$json[‘error’] = $this->language->get(‘error_filetype’) . $this->request->files[‘file’][‘type’];
}
Изменено 20 августа, 2015 пользователем chukcha
Ну… если не проходит, то выведите причину — типа тип такого-то нет в списке
if (!in_array($this->request->files[‘file’][‘type’], $allowed)) {
$json[‘error’] = $this->language->get(‘error_filetype’) . $this->request->files[‘file’][‘type’];
}
Подскажите пожалуйста куда это вставлять?
Просто я не очень опытен..
Так что с этим делать то?
Проверил на локальном сервере, та же проблема.
На др. хостинге, так же..
Ставил старые движки, все работает..
Неужели у кого то с этой версией движка работает?
- 2 weeks later…
Так что с этим делать то?
Проверил на локальном сервере, та же проблема.
На др. хостинге, так же..
Ставил старые движки, все работает..
Неужели у кого то с этой версией движка работает?
Проблему решил заменив функцию upload на код, взятый из opencart 1.5.4 ))
public upload() { $this->language->load(‘sale/order’); $json = array(); if (!empty($this->request->files[‘file’][‘name’])) { $filename = basename(html_entity_decode($this->request->files[‘file’][‘name’], ENT_QUOTES, ‘UTF-8’)); if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) { $json[‘error’] = $this->language->get(‘error_filename’); } if ($this->request->files[‘file’][‘error’] != UPLOAD_ERR_OK) { $json[‘error’] = $this->language->get(‘error_upload_’ . $this->request->files[‘file’][‘error’]); } } else { $json[‘error’] = $this->language->get(‘error_upload’); } if (!isset($json[‘error’])) { if (is_uploaded_file($this->request->files[‘file’][‘tmp_name’]) && file_exists($this->request->files[‘file’][‘tmp_name’])) { $ext = md5(mt_rand()); $json[‘filename’] = $filename . ‘.’ . $ext; $json[‘mask’] = $filename; move_uploaded_file($this->request->files[‘file’][‘tmp_name’], DIR_DOWNLOAD . $filename . ‘.’ . $ext); } $json[‘success’] = $this->language->get(‘text_upload’); } $this->response->setOutput(json_encode($json)); }
- 3 weeks later…
Так что с этим делать то?
Проверил на локальном сервере, та же проблема.
На др. хостинге, так же..
Ставил старые движки, все работает..
Неужели у кого то с этой версией движка работает?
Проблему решил заменив функцию upload на код, взятый из opencart 1.5.4 ))
public upload() { $this->language->load(‘sale/order’); $json = array(); if (!empty($this->request->files[‘file’][‘name’])) { $filename = basename(html_entity_decode($this->request->files[‘file’][‘name’], ENT_QUOTES, ‘UTF-8’)); if ((utf8_strlen($filename) < 3) || (utf8_strlen($filename) > 128)) { $json[‘error’] = $this->language->get(‘error_filename’); } if ($this->request->files[‘file’][‘error’] != UPLOAD_ERR_OK) { $json[‘error’] = $this->language->get(‘error_upload_’ . $this->request->files[‘file’][‘error’]); } } else { $json[‘error’] = $this->language->get(‘error_upload’); } if (!isset($json[‘error’])) { if (is_uploaded_file($this->request->files[‘file’][‘tmp_name’]) && file_exists($this->request->files[‘file’][‘tmp_name’])) { $ext = md5(mt_rand()); $json[‘filename’] = $filename . ‘.’ . $ext; $json[‘mask’] = $filename; move_uploaded_file($this->request->files[‘file’][‘tmp_name’], DIR_DOWNLOAD . $filename . ‘.’ . $ext); } $json[‘success’] = $this->language->get(‘text_upload’); } $this->response->setOutput(json_encode($json)); }
Спасибо, подскажите пожалуйста, в каком файле менять эту функцию?
Спасибо, подскажите пожалуйста, в каком файле менять эту функцию?
/admin/controller/catalog/download.php
Если не сможете разобраться, напишите в ЛС ваши данные FTP. Изменено 24 сентября, 2015 пользователем efremovxp
efremovxp
Вроде получилось, заработало, буду тестировать, если что, напишу..
Спасибо за помощь, очень выручил.
Изменено 25 сентября, 2015 пользователем sweb27
- 1 year later…
Аналогичная проблема, версия движка OpencartPro Версия 2.1.0.2.1
Только стоит ещё модуль»Файлы для скачивания ПЛЮС»
Некоторые zip архивы норм закачивает а некоторые ни в какую не хочет. При этом вес у них почти идентичный.
уже советовали, выведите тип файла в сообщение об ошибке
// Allowed file extension types $allowed = array(); $extension_allowed = preg_replace(‘~r?n~’, «n», $this->config->get(‘config_file_ext_allowed’)); $filetypes = explode(«n», $extension_allowed); foreach ($filetypes as $filetype) { $allowed[] = trim($filetype); } if (!in_array(strtolower(substr(strrchr($filename, ‘.’), 1)), $allowed)) { $json[‘error’] = $this->language->get(‘error_filetype’) . strtolower(substr(strrchr($filename, ‘.’), 1)); } // Allowed file mime types $allowed = array(); $mime_allowed = preg_replace(‘~r?n~’, «n», $this->config->get(‘config_file_mime_allowed’)); $filetypes = explode(«n», $mime_allowed); foreach ($filetypes as $filetype) { $allowed[] = trim($filetype); } if (!in_array($this->request->files[‘file’][‘type’], $allowed)) { $json[‘error’] = $this->language->get(‘error_filetype’) . $this->request->files[‘file’][‘type’] ; }
файл /admin/controller/catalog/download.php
Источник