Неправильные разрешения Magento Connect (пробовал несколько решений, но ни одна из них не работает). Как мне это исправить?

Я считаю, что это общая проблема, когда вы получаете предупреждение

Предупреждение. Ваша папка Magento не имеет достаточных прав на запись.

я пробовал

find . -type d -exec chmod 777 {} ;

а также

find . -type f -exec chmod 755 {} ;

но это не поможет, я думаю, что я использовал другие разрешения, чем 777 но я бы хотел сохранить его в безопасности …

У меня есть ощущение, что это может быть из-за моей настройки VirtualHost. Мой Magento находится в /var/www/example.com/public_html и часть VirtualHost является функцией, потому что example.com берет вас на мой сайт.

я не уверен ./mage все правильно обрабатывает и это немного больно, но я использую SSH, так что это было мое единственное решение.

1

Решение

Это не будет вашей настройкой Apache — это предупреждение связано со способностью PHP записывать файлы в файловую систему. Вот как Magento Connect выполняет свою работу — когда вы взаимодействуете с интерфейсом GUI, PHP загрузит tgz Подключите пакеты к локальной файловой системе, а затем распакуйте и распакуйте их в вашу установку Magento. PHP нуждается в способности создавать папки. Если вы используете apache как непривилегированный пользователь и ваши папки / файлы принадлежат привилегированному пользователю (обычно вашей учетной записи), это означает, что вы необходимость давать папки 777 если вы хотите использовать графический интерфейс Magento Connect для установки пакетов.

Какие 777 означает, что любая учетная запись пользователя на компьютере имеет право создавать файлы в этом каталоге. Риск безопасности заключается в том, что если хакеру удастся получить доступ к непривилегированной учетной записи пользователя, он сможет создавать в этой папке файлы, которые помогут им в дальнейшем использовать сервер или использовать само веб-приложение. Если вы находитесь на сервере с несколькими учетными записями пользователей (общий хостинг), это также означает, что другие пользователи имеют право создавать файлы в этих папках.

Хорошие компании, предоставляющие общий хостинг, проводят мониторинг, чтобы предотвратить это, но большинство компаний, предоставляющих общий хостинг, не являются хорошими, и эта проблема с разрешениями, вероятно, является наиболее распространенной причиной использования любой Веб-приложение на основе PHP.

Кроме того, графический интерфейс Magento Connect известен тем, что передает ложную информацию о разрешениях. Вы будете часто сталкиваться с ситуациями, когда он сообщает, что что-то успешно установлено, но не имеет. Если вы столкнулись с этой ситуацией, я написал n98-magerun командовать некоторое время назад, что может проверить расширение подключения как правильно установлено или нет.

Таким образом, к вашей конкретной проблеме, лучший способ отследить это — посмотреть на исходный код Magento Connect и определить, какие файлы / папки (файлы) имеют неправильные разрешения.

$ ack 'Your Magento folder does not have sufficient write permissions' downloader

downloader/lib/Mage/Connect/Command/Install.php
105:                    'Your Magento folder does not have sufficient write permissions, which downloader requires.'

downloader/template/install/writable.phtml
32:<p>Your Magento folder does not have sufficient write permissions, which this web based downloader requires.</p>

downloader/template/writable.phtml
28:    <h4>Warning: Your Magento folder does not have sufficient write permissions.</h4>

Первое место — сообщение об исключении

#File: downloader/lib/Mage/Connect/Command/Install.php
if (!$isWritable) {
$this->doError($command, $err);
throw new Exception(
'Your Magento folder does not have sufficient write permissions, which downloader requires.'
);
}

Если вы посмотрите в блоке try, вы увидите два места, где isWritable может быть установлен в false

    $isWritable = is_writable($config->magento_root)
&& is_writable($config->magento_root . DIRECTORY_SEPARATOR . $config->downloader_path)
&& is_writable($config->magento_root . $dirCache)
&& is_writable($config->magento_root . $dirTmp)
&& is_writable($config->magento_root . $dirMedia);

$isWritable = $isWritable && is_writable($config->magento_root . $dirMedia)
&& is_writable($config->magento_root . $dirCache)
&& is_writable($config->magento_root . $dirTmp);

Добавление некоторого временного кода отладки после этих строк может помочь вам отследить, какие каталоги, по мнению Magento, не имеют разрешения на запись.

if(!$isWritable)
{
var_dump($config->magento_root);
var_dump(is_writable($config->magento_root));

var_dump($config->magento_root . $dirCache);
var_dump(is_writable($config->magento_root . $dirCache));
//etc..
}

Далее идут те writable.phtml файлы шаблонов. Magento Connect имеет свою собственную простую систему шаблонов, поэтому мы хотим искать места, где она рендерит эти writable.phtml templates

$ ack 'writable.phtml' downloader
downloader/template/connect/packages.phtml
28:<?php if ($this->get('writable_warning')) echo $this->template('writable.phtml');?>

Это только упоминание в другой шаблон. Если мы будем искать это packages.phtml файл шаблона

$ ack 'packages.phtml' downloader
downloader/Maged/Controller.php
315:        echo $this->view()->template('connect/packages.phtml');

Мы найдем writable_warning переменная установлена isWritable метод

File: downloader/Maged/Controller.php
if (!$this->isWritable() && empty($remoteConfig)) {
$this->view()->set('writable_warning', true);
}

public function isWritable()
{
if (is_null($this->_writable)) {
$this->_writable = is_writable($this->getMageDir() . DIRECTORY_SEPARATOR)
&& is_writable($this->filepath())
&& (!file_exists($this->filepath('config.ini') || is_writable($this->filepath('config.ini'))));
}
return $this->_writable;
}

Опять же, некоторый временный код отладки может помочь нам понять, почему Magento считает, что у него нет правильных разрешений.

    if (is_null($this->_writable)) {
var_dump(is_writable($this->getMageDir() . DIRECTORY_SEPARATOR));
var_dump(is_writable($this->filepath()));
var_dump((!file_exists($this->filepath('config.ini') || is_writable($this->filepath('config.ini'));
//etc...
$this->_writable = is_writable($this->getMageDir() . DIRECTORY_SEPARATOR)
&& is_writable($this->filepath())
&& (!file_exists($this->filepath('config.ini') || is_writable($this->filepath('config.ini'))));
}
5

Другие решения

Ответ должен быть: не используйте Magento Connect. Используйте правильную систему контроля версий, такую ​​как git, отделяйте основные файлы от настроек через modman или composer. Это правильный и технически чистый подход, который не позволяет использовать Magento Connect.

0

По вопросам рекламы [email protected]