PHP hostname bağlamaları

3 Cevap php

: Ben bir SMTP sunucusuna bağlanmak için bir PHP komut dosyası yazarsanız ve bir e-posta göndermek (benim durumumda, bu Postfix yerel olarak yüklü olan), ilk olarak çıkıyor e-posta başlığı "aldı"

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 komut dosyası tarayıcısı üzerinden erişilen ediliyor ve Apache SERVER_IP bağlı olmasıdır.

Ben PHP CLI aynı komut dosyası çalıştırmak Ancak, o ilk "aldı" başlığı onun yerine:

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 (a cron üzerinden) normal bir Linux kullanıcı tarafından çağrıldığını olmasıdır.

Nasıl ben cron vasıtasıyla kullanıcı tarafından çağrıldığında, başlık localhost.localdomain yerine sunucu hostname / IP gösteriyor "aldı", böylece PHP CLI hostname / IP bağlı neden olabilir?

Note 1: hostname doğru hostname ayarlanır - fqnd, / etc / hosts, / etc / sysconfig / network ve / proc / sys / kernel / hostname

Bu muhtemelen alakasız olmasına rağmen Note 2: Ben, PHP Swift Mailer kullanıyorum.

3 Cevap

Swift Mailer adlı "NativeMail" hatta "Sendmail" arabirimini kullanarak ciddi düşünün.

Bu seçeneklerin her ikisi de ağ trafiğini, iç IP adresini, ve-söz Zamanı başlığını önlemek olacaktır. Onlar da sizin için önemli olabilir, önemli ölçüde daha hızlı olacak.

Eğer SMTP kullanarak ısrar ederse, unutmayın Swift "Autodetects" yerel ana bilgisayar adı CLI tarafından belirlenen olmayacak $_SERVER["SERVER_ADDR"] değişkeni kullanarak (yani SMTP iletişim sağlanır).

Eğer daha iyi bir değer için bu için düzenlemek değil eğer, gibi, ikinci argüman olarak Swift kurucusuna iletebilirsiniz:

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

Ben localhost adresi ile sunucuya bağlanmak ve bunun yerine atanan gerçek ip adresini veya tam etki alanı adı ile bağlantı yoksa daha iyi çalışacağına inanıyoruz.

İşte benim Crons içine hostname değerini almak için kullanılan bazı php kodu:

//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