PHP主机名绑定

问题描述:

如果我编写一个PHP脚本连接到SMTP服务器(在我的情况下,这是本地安装的Postfix)并发送一封电子邮件,电子邮件中的第一个“收到”标题为:PHP主机名绑定

Received: from [SERVER_IP] (SERVER_HOSTNAME [127.0.0.1]) by SERVER_HOSTNAME (Postfix) with ESMTP id D682A34381 for <TO_EMAIL>; Thu, 5 Mar 2009 17:25:18 +0000 (GMT) 

这是因为PHP脚本正在通过浏览器访问,Apache绑定到SERVER_IP。

但是,如果我从PHP CLI执行相同的脚本,那么第一个“已接收”报头,而不是:

Received: from localhost.localdomain (SERVER_HOSTNAME [127.0.0.1]) by SERVER_HOSTNAME (Postfix) with ESMTP id AB51934381 for <TO_EMAIL>; Thu, 5 Mar 2009 17:18:01 +0000 (GMT) 

这是因为PHP CLI是由一个普通的Linux用户调用(通过一个cron)。

如何让PHP CLI绑定到主机名/ IP,以便当用户通过cron作业调用它时,“received”标题显示服务器主机名/ IP而不是localhost.localdomain?

注1:主机名在主机名--fqnd正确设置,/ etc/hosts中,在/ etc/SYSCONFIG /网络和/ PROC/SYS /内核/主机名

注2:我在PHP中使用Swift Mailer,虽然这可能是不相关的。

请认真考虑使用Swift Mailer的“NativeMail”或甚至是“Sendmail”界面。

这两个选项都将避免网络流量,内部IP地址和收到的问题头。它们也将显着更快,这对您可能很重要。

如果您坚持使用SMTP,请注意,Swift使用$_SERVER["SERVER_ADDR"]变量“自动检测”本地主机名(在SMTP对话框中提供),CLI不会设置该变量。

如果无法安排这有一个更好的价值,你可以将它传递给斯威夫特构造函数的第二个参数,如:

$swift = new Swift(new Swift_Connection_SMTP("localhost"), "my_domain_here"); 
+0

我需要设置第二个Swift构造函数参数,因为如您所说,SERVER_ADDR未在CLI中设置。 – DavidM 2009-03-08 16:28:19

我相信如果您不通过本地主机地址连接到服务器,而是通过连接到其分配的真实IP地址或完全限定的域名,它会更好。

+0

这没有什么区别。 – DavidM 2009-03-05 19:48:04

这里是我用来获取价值的一些PHP代码的主机名到我的克朗:

//get hostname info from /etc/sysconfig/network 
preg_match('/HOSTNAME=(.*)/', file_get_contents('/etc/sysconfig/network'), $network); 
$hostname = split("\=", $network[0]); 
echo $hostname[1]; //this equals the value of your HOSTNAME