我在macOS上使用php和MySQL。 我想从数据库中选择大量的电子邮件,并使用来自终端/ shell的dig命令对我选择的每封电子邮件执行dns查找,例如:“dig gmail.com”。 当然,我可以通过php循环这个选择,但与在MySQL上循环游标相比,它会非常慢。 如何将终端命令从mysql发送到终端并在macOS上检索答案?
答案 0 :(得分:0)
你不能在SQL查询中执行shell命令(感谢上帝),否则它将是一个可怕的安全漏洞......你必须从php中执行它。
P.S。但是,可以从MySQL命令行实用程序
执行shell命令\! ls
...但如果我理解你的问题,它将无助于解决你当前的问题。
答案 1 :(得分:0)
(我假设您在谈论电子邮件地址时确实是指ADDR_SPEC)
但与mysql上的循环游标相比,它会非常慢
不,不是真的。唯一的区别是取决于你如何实现这个 PHP方法要求你在开始迭代之前检索整个结果集。然而,将其分解为较小的结果集是微不足道的。
此外,对算法性能的限制是DNS查找的速度 - 而这一切都与延迟有关 - 如果你的目标是让它更快,那么你应该并行运行多个请求。
您应该考虑的下一件事是,您可能为每个MX提供了多个邮箱,例如user1 @ gmail.com,user2 @ gmail.com ....如果你有正确的DNS缓存设置,那么每次进入源时,如果你正在处理一个非常大的数据集或将不止一次这样做,只使用独特的MX主机值更有意义,例如
SELECT DISTINCT SUBSTR(addr_spec FROM LOCATE('@', addr_spec)) AS mx2chk
FROM yourtable
WHERE addr_spec LIKE '%@%'
AND (email_checked IS NULL
OR email_checked<NOW() - INTERVAL 300 DAY )
;
实际上,如果您标记数据,那么您可以使用自己的数据库来验证MX。
使用来自terminal / shell的dig命令
请不要告诉我您正在从PHP控制进程运行shell来进行DNS查找?