Я считаю, что это общая проблема, когда вы получаете предупреждение
Предупреждение. Ваша папка 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, так что это было мое единственное решение.
Это не будет вашей настройкой 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'))));
}
Ответ должен быть: не используйте Magento Connect. Используйте правильную систему контроля версий, такую как git, отделяйте основные файлы от настроек через modman или composer. Это правильный и технически чистый подход, который не позволяет использовать Magento Connect.