Tom: PHP-Funktion zum Aufruf einer URL

Beitrag lesen

Hello,

Ich glaube, ich habe ein logisches Problem. Wenn ich die Header-Funktion an den Anfang des Scriptes schreibe, klappt es. Aber, wenn ich sie nach der If-Abfrage schreibe - und da macht es ja erst Sinn, weil sich da erst entscheidet, ob ich die Danke-Seite oder eine der Fehlerseiten ausgeben will - klappt es nicht...

Wenn Du mit header() arbeiten willst, darfst du einfach keine Ausgaben "freilassen", bevor alles entschieden ist. Das erreicht nman am besten dadurch, dass man sich für die eigentliche Ausgabe ein HTML-Template baut, in dem alle Ausgaben drinstehen:

<?php  ### scriptaufbau.php ###

#-----------------------------------------------

Include & Declaration Ssection

#-----------------------------------------------

$title = '';
$keywords = '';
$description = '';
$bodyclass = '';
$pagecontent = '';

#-----------------------------------------------

Process Section

#-----------------------------------------------

$title = 'logischer Scriptaufbau';
$bodyclass = 'green';
$pagecontent .= '<p>klarer geht es nicht</p>';

#-----------------------------------------------

Last Decision Section

#-----------------------------------------------

if(isset($_GET['url']) and !headers_sent())
{
  header("Location: http://".$_GET['url']);
  exit;               ## keine weiteren Ausgaben
}

################################################

HTML Output Section

################################################
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
  <TITLE><?php echo $title; ?></TITLE>
  <META NAME="Keywords" CONTENT="<?php echo $keywords; ?>">
  <META NAME="Description" CONTENT="<?php echo $description; ?>">

<style type="text/css">
  <!--
  .green
  {
    background-color:#CCFFCC;
    margin:10px;
    color:#008000;
    font-family:Century Gothic, Arial, sans-serif;
    font-size:150%;
  }
  -->
  </style>

</HEAD>

<BODY class="<?php echo $bodyclass; ?>">

<?php echo $pagecontent; ?>

</BODY>
</HTML>

Vor der HTML-Output-Section darf es kein echo() oder print() geben.
Wenn man sich konsequent an diesen Aufbaunhält, kann nichts mehr schief gehen.

Ruf das Script mal normal auf mit

scriptaufbau.php

und dann mal mit dem Paramter

scriptaufbau.php?url=bitworks.de

Dann siehst Du den Unterschied.

Wichtig ist noch, dass VOR dem '<?php' weder irgend ein Zeichen noch ein Zeilumbruch stehen darf.
Wenn Du Dateien mit include() oder require() einbindest, dürfe diese keinerlei Zichen VOR dem '<?php' und NACH dem '?>' mehr haben.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau