当我尝试使用我正在开发的magento商店的电子邮件注册时,我遇到了以前没见过的错误 那说:
"Email" is not a valid hostname
does not appear to be a valid local network name
appears to be a DNS hostname but cannot match TLD against known list magento
当我进行研究时,我发现这些错误是由Zend主机名验证引起的。
是否有可能解决这些或根本没有解决方案
答案 0 :(得分:1)
我遇到了相同的错误:
"Email" is not a valid hostname.
'example.example' appears to be a DNS hostname but cannot match TLD against known list
'example.example' appears to be a local network name but local network names are not allowed
从Magento 1开始,Zend似乎正在使用Tld的硬编码列表:
/**
* Array of valid top-level-domains
*
* @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt List of all TLDs by domain
* @see http://www.iana.org/domains/root/db/ Official list of supported TLDs
* @var array
*/
protected $_validTlds = array(
'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'arpa',
[...]
'ye', 'yt', 'yu', 'za', 'zm', 'zw'
);
因此,有一些选择:
对于选项2 ,我们可以对以下文件进行安全升级,或参见选项3 添加$validator->getHostnameValidator()->setValidateTld(false);
,并从中复制:>
/lib/Zend/Validate/Hostname.php
至:
/app/code/local/Zend/Validate/Hostname.php
然后查找此代码块,并注释以下三行:
if (!in_array($this->_tld, $this->_validTlds)) {
// $this->_error(self::UNKNOWN_TLD);
// $status = false;
// break;
}
对于选项3 ,我们可以对以下文件进行安全升级,并从进行复制:
app/code/core/Mage/Eav/Model/Attribute/Data/Abstract.php
至:
/app/code/local/Mage/Eav/Model/Attribute/Data/Abstract.php
然后替换此代码:
$validator = new Zend_Validate_EmailAddress();
作者:
// 1. we check mx record
$validator = new Zend_Validate_EmailAddress(
array(
'allow' => Zend_Validate_Hostname::ALLOW_DNS,
'mx' => true
)
);
// 2. we remove TLD validation :
$validator->getHostnameValidator()->setValidateTld(false);
不要忘记查找可以在社区扩展或自定义扩展中使用的Zend_Validate_EmailAddress
类的每个调用(例如:onestepcheckout)。
答案 1 :(得分:0)
有新的通用顶级域名扩展(gTLD)。这些是 会导致Zend Validator出现问题。
最好的解决方法是在Magento中禁用主机名验证 让最终用户正确输入域名:
找到Mage_Eav_Model_Attribute_Data_Abstract
和
变化
$validator = new Zend_Validate_EmailAddress();
到
$validator = new Zend_Validate_EmailAddress(array('domain'=>false));
或者你可以简单地install patch via composer。