【发布时间】:2010-10-17 05:16:42
【问题描述】:
问候溢出者,
我被要求使用 PHP 编写一个电子邮件跟踪器。 电子邮件客户端请求我的 PHP 脚本,认为它是图像(身体的背景)。 但是,客户端(即 Outlook 2007)会挂起(什么也不显示),直到我的 PHP 脚本超时。
<?php
define("DB_FILE", "sqlite:C:\wamp\www\database.sdb");
define("QUERY", "INSERT INTO Receipt (counter_id, reader_id, start_time, end_time) VALUES (%s, \"%s\", %d, %d)");
define("TIME_OUT", "10");
function track() {
global $counter_id;
global $reader_id;
global $start_time;
$end_time = time();
$db = new PDO(DB_FILE);
$db->exec(sprintf(QUERY, $counter_id, $reader_id, $start_time, $end_time));
}
$counter_id = $_GET["counter_id"];
$reader_id = $_SERVER["REMOTE_ADDR"];
$start_time = time();
set_time_limit(TIME_OUT);
register_shutdown_function("track");
while(!connection_aborted()) {
echo "\n";
ob_flush();
}
?>
在客户端阅读跟踪的电子邮件期间,应该保持 HTTP 连接处于活动状态的循环。 关于如何解决这个问题的任何想法?
问候
【问题讨论】:
-
您不太可能做到这一点。当有人查看电子邮件或访问网站时,没有继续连接。有来回,但不是你想要做的。 Outlook 挂起的原因是因为它正在等待您的“图像”出现,这就是它超时的原因。
-
是的,请不要这样做。告诉你的经理或任何其他人,这是一个糟糕透顶的想法,而且确实不正确。
-
谢谢你们,是的,我同意这是一个糟糕的主意!知道商业软件(电子邮件跟踪器)如何跟踪时间吗?
-
我还没有遇到任何可以实际跟踪时间的分析包......而且我确实知道我的竞争对手在该领域的大部分能力。我能想到的唯一方法是使用 Flash 或某种形式的基于客户端的计时器,它可以在服务器运行时向服务器发送“滴答”……但我反对任何尝试过的邮件。
标签: php email outlook tracking