用于mysql导入的php读取文件
我有一个网站,允许人们退订到其他网站(邮件列表,或垃圾邮件等…) 我的web应用程序允许客户端和用户上传加密的电子邮件列表以进行批量退订 我有一张桌子:不明嫌犯。该表包含电子邮件和域 文件结构如下所示: jhq232q3hq2yq3yuh2qyuqU/A$Ja324ju3a4jah34u3w$UQ"$Uq4u q34/hRYHSEa34uw34uQ"/YQ/$84?%JHHdfhdFJKAjaRJSErjsrjse W%$?p09-*Y+_)y8p7uYJgADGq2/TYQgSj1qR"3tQ"/gEHseruDUId check email函数检查电子邮件是否在所有列表中取消订阅,如果所有内容都取消订阅,则返回false,如果没有,则返回一个数组(服务列表=域) 现在我的问题是,每当我想检查一封电子邮件是否有效时,它就会返回false。 我的加密工作正常,而且是防弹的用于mysql导入的php读取文件,php,mysql,file,import,Php,Mysql,File,Import,我有一个网站,允许人们退订到其他网站(邮件列表,或垃圾邮件等…) 我的web应用程序允许客户端和用户上传加密的电子邮件列表以进行批量退订 我有一张桌子:不明嫌犯。该表包含电子邮件和域 文件结构如下所示: jhq232q3hq2yq3yuh2qyuqU/A$Ja324ju3a4jah34u3w$UQ"$Uq4u q34/hRYHSEa34uw34uQ"/YQ/$84?%JHHdfhdFJKAjaRJSErjsrjse W%$?p09-*Y+_)y8p7uYJgADGq2/TYQgSj1qR"3tQ
我遗漏了什么?首先,您的脚本使用
\n
导入文件,但是如果有人上载了带有windows字符的文件,如\r\n
,您的脚本将无法工作
其次,您的电子邮件regexp工作不正常。我建议使用
对于您的表,我建议您创建每日表。这样,当查询表时,执行速度会更快。如果只有一个表使用varchar
作为索引,那么经过一段时间后,这可能会很慢(假设人们希望退出坏站点[我认为他们会这样做]),但这只是我的问题
CREATE TABLE `unsub_20111127` (
`email` varchar(255) NOT NULL,
`domain` varchar(255) NOT NULL,
`is_unsubscribed` tinyint(3) NOT NULL DEFAULT 0,
PRIMARY KEY (`email`, `domain`),
KEY is_unsubscribed (`is_unsubscribed`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
这样,每次处理少量数据就更容易了。我添加了一个状态,以防您必须再次重复处理,因此您只处理is_unsubscribed=0
(未处理)的数据
(如果需要创建一个表来读取可以创建的所有表)
PHP:
我喜欢每天创建多个表的想法,到目前为止,我们从客户那里获得了10个文件,每个文件都有5k左右,几年后这会很疯狂,但这是否意味着几年后我们会有1000多个表?每年或每月一次,你可以将它们归档到一个年度或月度表中
CREATE TABLE `unsub_20111127` (
`email` varchar(255) NOT NULL,
`domain` varchar(255) NOT NULL,
`is_unsubscribed` tinyint(3) NOT NULL DEFAULT 0,
PRIMARY KEY (`email`, `domain`),
KEY is_unsubscribed (`is_unsubscribed`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
function insertEmail($db, $service, array $data) {
// logic for insert
$sql = 'INSERT IGNORE INTO table_YYYYMMDD VALUES ' . implode(',', $data);
}
function createTable($date) {
// logic for insert
$sql = 'CREATE TABLE IF NOT EXISTS table_' . $date . ' /* etc...*/';
}
// start
// create the table for the next day if not exists
createTable(date('Ymd', strtotime('tomorrow')));
$file = file('sample.txt', FILE_IGNORE_NEW_LINES ^ FILE_SKIP_EMPTY_LINES);
$emailList = array();
foreach($file as $line) {
$line = decrypt($line);
if(!filter_var($line, FILTER_VALIDATE_EMAIL)) {
$services = checkEmail($line);
if(is_array($services)) {
foreach($services as $service) {
$emailList[] = "('" . $line . "', '" . $service . "', 1)";
}
if(!empty($emailList)) {
insertEmail($db, $service, $emailList);
}
$emailList = array();
}
}
}