你是否在使用共享主机?如果是,这可能会对你有所帮助。
我花了大部分时间来解决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函数并让您在管理员中指定临时文件夹,那将会非常有帮助,可以省去很多麻烦。唉。
downloader\lib\Mage\Connect\Config.php,第207行:
// $tempFile = tempnam(sys_get_temp_dir(),'config');
$tempFile = tempnam($this->magento_root. '/var/tmp/' ,'config');
downloader\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');
downloader\lib\Mage\Connect\Loader\Ftp.php,第107行:
// $tmpDir = sys_get_temp_dir();
$magento_root = dirname(dirname(__FILE__)) . '/../../../..';
$tmpDir = $magento_root . '/var/tmp/';
downloader\Maged\Controller.php, 869**:
//$tempFile = tempnam(sys_get_temp_dir(),'maintenance');
$tempFile = tempnam($config->__get('magento_root') . '/var/tmp/' ,'maintenance');
为了保存您的配置更改,需要这个文件:
downloader\Maged\Model\Connect.php,404:
//$tempFile = tempnam(sys_get_temp_dir(),'config');
$tempFile = tempnam($configObj->magento_root. '/var/tmp/' ,'config');
downloader\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行:
$magento_root = dirname(dirname(__FILE__)) . '/../../..';
$tempCacheFile = tempnam($magento_root . '/var/tmp/' ,'cache');
在 if 语句之前的大约 135 行处:
$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_');