PHP Cronjob und Servervariablen

baserider

Well-known member
ID: 174417
L
10 März 2007
682
23
Hi,

per Cronjob wird eine Textmail verschickt. In dieser Mail gib es einen Link.
Da ich einen Testserver und Liveserver habe brauchte ich jeweils den Inhalt der Variablen $_SERVER['HTTP_HOST']
Diese Variable habe ich bei einem Cronjob ja nicht zur Verfügung. Zum testen des Cronskriptes will ich ja nicht jedesmal den link ändern

https://[B]testserver.local[/B]/datei.html -> https://[B]example.org[/B]/datei.html

Kann ich das irgendwie lösen, das das auch dynamisch passiert, wie durch die o.g. Servervariable?
 
Mir gehts ja darum, das ich nicht immer die Werte ändern muss wenn ich auf dem Test bzw. Liveserver bin.

Schreibe ich es mir in ne Config-Datei habe ich immer noch das gleiche Problem wie ich entscheiden kann wo ich mich grade befinde. Klar kann ich die Datei hernehmen und jeweils den einen oder anderen Wert eintragen, aber das ja nicht der sinn
 
Diese Variable habe ich bei einem Cronjob ja nicht zur Verfügung.
Sagt wer?
Wenn du per Cronjob das Script via HTTP anstößt, gibts auch n Host-Headerfeld und somit auch n $_SERVER['HTTP_HOST'].

Du musst halt auf dem Testserver die Testserver-URL in die Crontab eintragen und auf dem Liveserver die Liveserver-URL.

edit:
Is aber ja auch Quark. Da kannst du ja auch gleich die Config-Datei nehmen. Irgendwie seh ich das Problem grad nicht :think:
 
Hi,

und wie stoße ich das per HTTP an?
Ich habe jedoch auf dem Liveserver keine Möglichkeit viel einzutragen. Da gibts nur ein Eingabefeld im Backend und dort kommt die URL zur Datei rein, mit absolutem Pfad
 
Ich versteh grad nicht den Sinn der Config- Datei. Ich trage dort 2 Werte ein. Im Cron muss ich doch anhand irgend eines Merkmals unterscheiden wann ich welche Variable benutze
 
Machst z.B. ne config.php (oder ini oder was weiß ich)
und schreibt da die Url rein.

config.php
PHP:
<?php
$url = 'https://www.example.com';
?>

Die Datei speicherste online ab und includiert die im Cronjob. Lokal schreibste in die Datei aber folgendes

PHP:
<?php
$url = 'https://localhost';
?>
 
Dann habe ich aber lokal und online 2 unterschiedliche Dateien und muss immer aufpassen das man sich nix überschreibt
 
Das stimmt schon, aber wenn ich ne anwendung habe ohne cronjob, gibts ja auch nur 1 config, und die ist lokal genauso wie online, da hab ich keine unterschiedlichen werte drin stehen.

Dann wird es aber nicht anders gehen. Eine Config-Datei hochladen und nie wieder anfassen :) bzw. überschreiben mit der lokalen Version
 
Das stimmt schon, aber wenn ich ne anwendung habe ohne cronjob, gibts ja auch nur 1 config, und die ist lokal genauso wie online, da hab ich keine unterschiedlichen werte drin stehen.
Was hat das mit nem Cronjob zu tun?
Ich hab auch ohne Cronjob lokal andere Bedingungen wie auf dem Echtsystem. z.B. is bei mir die Entwicklungsumgebung unter Windows und das Echtsystem is ein UNIX-System - um nur mal einen Unterschied zu nennen.

Auch dass man nur 1 Config-File hat, stimmt nicht. Stell dir vor, wenn ein Projekt auf mehrere Server verteilt is, dann hat natürlich jedes n eigenes Config-File, weil ja da (fast) der komplette Server gespiegelt is.
 
Ich meinte nur, das deine angesprochenen 2 Verhaltensweisen ohne einen Cronjob, also Aufruf über Browser, z.B. in der Variablen $_SERVER['HTTP_HOST'] gespeichert sind. Da is es egal wo ich mich befinde.

Habe mir auch paar Frameworks angesehen, dort trage ich in die config-Datei(en) was ein und kann die Datei so wie sie is online kopieren. da stehen keine unterschiedlichen Werte drin
 
Ich meinte nur, das deine angesprochenen 2 Verhaltensweisen ohne einen Cronjob, also Aufruf über Browser, z.B. in der Variablen $_SERVER['HTTP_HOST'] gespeichert sind. Da is es egal wo ich mich befinde.
Ich blicks immer noch ned.

Cronjob A ruft URL auf System A mit Konfiguration A auf.
Cronjob B ruft URL auf System B mit Konfiguration B auf.
Wo is jetzt das Problem? :hö:

Wenns dir nur um den Host-HTTP-Header geht:
Cronjob A ruft URL auf System A auf.
Cronjob B ruft URL auf System B auf.
Eine Konfiguationsvariable ist nicht erforderlich, weil System A einen anderen Host-Header gesendet kriegst, wie System B.
 
Dann speicherst du den Wert hatl in einer Datenbank :roll:
Oder du legst mehrere Config-Dateien an, so dass du diese eine Datei halt immer ignorierst beim hochladen.

Ich versteh sowieso nich, wieso und online- und development-Version bei dir 1:1 übereinstimmen müssen? Ich hab z.B. für development noch Fehlerausgaben, die ich online alle abgeschaltet habe.
 
Nein mir gehts nich um den Aufruf. Hatte ich doch oben geschrieben.

Der Cron schickt ne mail raus und in der Mail ist ein Link drin.

lokal:
...Mailtext... https://testserver.local/datei

online:
... Mailtext... https://www.example.org/datei

Wenn ich das Cronskript vom Testserver online kopiere, steht dort immer noch https://testserver.local/datei in der email, obwohl das ja falsch ist. Daher benötige ich ja laut diesem thread 2 unterschiedliche Konfigurationsdateien auf den beiden systemen
 
Zuletzt bearbeitet:
Ich versteh sowieso nich, wieso und online- und development-Version bei dir 1:1 übereinstimmen müssen? Ich hab z.B. für development noch Fehlerausgaben, die ich online alle abgeschaltet habe.

aber in deinem Skript steht bestimmt sowas wie
PHP:
if ($_SERVER['REMOTE_ADDR'] = 127.0.0.1) // zeige Fehlerausgabe
else // unterdrücke Fehler
// oder wie auch immer du die unterscheidung machst
 
Nö. Ich hab ne Konstante APPLICATION_ENV in der entweder development oder production steht.

PHP:
if(APPLICATION_ENV == 'development')
{
   // mach was
}
else
{
  // mach was anderes
}

So kannst du es natürlich auch machen. Musst nur irgendwo die Konstante definieren...