Вы случайно находитесь на виртуальном хостинге? Если это так, это может помочь вам.
Я только что провел большую часть дня, балуясь с Magento Connect Manager 2.0, пытаясь заставить его работать с опцией FTP. Я даже не смог заставить его сохранить какие-либо свои настройки на вкладке настроек, он просто возвращался к настройкам по умолчанию.
Я в конечном итоге отследил проблему до настойчивости Magento при использовании sys_get_temp_dir для определения временного каталога. Обычно это не работает на виртуальном хостинге, так как у вас не будет доступа на запись в / tmp. К сожалению, при сбое не возникает никаких ошибок, и Magento просто продолжает работу, но не сохраняет и не загружает настройки Magento Connect FTP. У меня была похожая проблема в другом месте в коде ядра раньше.
Я создал временную папку под своей основной установкой в / var / tmp и сделал ее доступной для записи всем пользователям.
В / downloader и / lib / Mage есть 11 мест, которые используют эту функцию для определения временной папки. Их нужно будет изменить, чтобы они указывали на то место, куда вы решили поместить временную папку. Я не уверен, что все они должны быть изменены, или точно, что они все делают, но я изменил их, чтобы быть на безопасной стороне. Подробности в конце поста. Номера строк являются приблизительными, но просто найдите sys_get_temp_dir в каждом файле.
После внесения изменений вам необходимо убедиться, что следующие папки доступны для записи во всем мире, рекурсивно:
/var/package/tmp/
/downloader/.cache
/media
Плюсом опции FTP является то, что корень Magento больше не нуждается в записи.
Любые изменения, приведенные ниже, могут привести к поломке Magento Connect, особенно те, которые отмечены **. Я сделал их и запустил одну установку модуля, которая вроде бы прошла нормально, но я не даю на них никаких гарантий. В некоторых местах они также немного беспорядочные, я уверен, что их можно улучшить - в некоторых случаях может быть лучший способ получить magento_root. Будьте осторожны, файлы с одинаковыми именами находятся в разных подпапках.
Тем не менее, надеюсь, что они могут спасти кого-то, преодолев неприятности, которые у меня были сегодня. Было бы очень полезно, если бы Varien просто написал свою собственную функцию tmpDir и позволил бы вам указать временную папку в админке, сэкономив массу хлопот. Ах, хорошо.
загрузчик \ lib \ Mage \ Connect \ Config.php , строка 207:
// $tempFile = tempnam(sys_get_temp_dir(),'config');
$tempFile = tempnam($this->magento_root. '/var/tmp/' ,'config');
Загрузчик \ lib \ Mage \ Connect \ Command \ Registry.php , строка 315:
//$localXml = tempnam(sys_get_temp_dir(),'package');
$magento_root = dirname(dirname(__FILE__)) . '/../../../..';
$localXml = tempnam($magento_root. '/var/tmp/' ,'package');
Загрузчик \ lib \ Mage \ Connect \ Loader \ Ftp.php , строка 107:
// $tmpDir = sys_get_temp_dir();
$magento_root = dirname(dirname(__FILE__)) . '/../../../..';
$tmpDir = $magento_root . '/var/tmp/';
загрузчик \ Maged \ Controller.php , 869 **:
//$tempFile = tempnam(sys_get_temp_dir(),'maintenance');
$tempFile = tempnam($config->__get('magento_root') . '/var/tmp/' ,'maintenance');
Это необходимо для сохранения изменений конфигурации:
Загрузчик \ Maged \ Model \ Connect.php , 404:
//$tempFile = tempnam(sys_get_temp_dir(),'config');
$tempFile = tempnam($configObj->magento_root. '/var/tmp/' ,'config');
Загрузчик \ Maged \ Model \ Config \ Abstract.php , 88 **:
// $tempFile = tempnam(sys_get_temp_dir(),'configini');
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
$tempFile = tempnam($magento_root. '/var/tmp/' ,'configini');
downloader \ lib \ Mage \ Connect \ Packager.php - остальные 5 изменений находятся в этом файле.
Строка 96 - Я полагаю, что это было то, что нужно для загрузки изменений конфигурации на экран настроек:
// $tempConfigFile = tempnam(sys_get_temp_dir(),'conf');
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
$tempConfigFile = tempnam($magento_root . '/var/tmp/' ,'conf');
строка 111:
// $tempCacheFile = tempnam(sys_get_temp_dir(),'cache');
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
$tempCacheFile = tempnam($magento_root . '/var/tmp/' ,'cache');
Около 135, перед оператором if:
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
затем в частях if и else:
// $configFile=tempnam(sys_get_temp_dir(),'conf');
$configFile = tempnam($magento_root. '/var/tmp/' ,'conf');
158
//$tempConfigFile = tempnam(sys_get_temp_dir(),'conf_');
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
$tempConfigFile = tempnam($magento_root. '/var/tmp/' ,'conf_');