header information
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aussehen
beitrag
besucher
body
command
connection
daten
ernst
error
exit
fehlermeldung
lache
laden
meinst
nutzen
pa
session
status
timeout
variable
-
Ich bekomme diese Fehlermeldung ausgegeben:
Warning: Cannot modify header information - headers already sent by (output started at /home/webpages/lima-city/econline/html/mail_test.php:4) in /home/webpages/lima-city/econline/html/mail_smtp.php on line 190
Das script dazu:
<?
$mail_server = "*****";
$mail_usercode = "*****";
$mail_passwort = "*****";
define('SMTP_STATUS_NOT_CONNECTED', 1, TRUE);
define('SMTP_STATUS_CONNECTED', 2, TRUE);
class smtp{
var $authenticated;
var $connection;
var $recipients;
var $headers;
var $timeout;
var $errors;
var $status;
var $body;
var $from;
var $host;
var $port;
var $helo;
var $auth;
var $user;
var $pass;
function smtp($params = array()){
if(!defined('CRLF'))
define('CRLF', "\r\n", TRUE);
$this->authenticated = FALSE;
$this->timeout = 5;
$this->status = SMTP_STATUS_NOT_CONNECTED;
$this->host = 'localhost';
$this->port = 25;
$this->helo = 'localhost';
$this->auth = FALSE;
$this->user = '';
$this->pass = '';
$this->errors = array();
foreach($params as $key => $value){
$this->$key = $value;
}
}
function &connect($params = array()){
if(!isset($this->status)){
$obj = new smtp($params);
if($obj->connect()){
$obj->status = SMTP_STATUS_CONNECTED;
}
return $obj;
} else{
$this->connection = fsockopen($this->host, $this->port, $errno, $errstr, $this->timeout);
if(function_exists('socket_set_timeout')){
@socket_set_timeout($this->connection, 5, 0);
}
$greeting = $this->get_data();
if(is_resource($this->connection)){
return $this->auth ? $this->ehlo() : $this->helo();
} else{
$this->errors[] = 'Failed to connect to server: '.$errstr;
return FALSE;
}
}
}
function send($params = array()){
foreach($params as $key => $value){
$this->set($key, $value);
}
if($this->is_connected()){
if($this->auth && !$this->authenticated){
if(!$this->auth())
return FALSE;
}
$this->mail($this->from);
if(is_array($this->recipients))
foreach($this->recipients as $value)
$this->rcpt($value);
else
$this->rcpt($this->recipients);
if(!$this->data())
return FALSE;
$headers = str_replace(CRLF.'.', CRLF.'..', trim(implode(CRLF, $this->headers)));
$body = str_replace(CRLF.'.', CRLF.'..', $this->body);
$body = $body[0] == '.' ? '.'.$body : $body;
$this->send_data($headers);
$this->send_data('');
$this->send_data($body);
$this->send_data('.');
$result = (substr(trim($this->get_data()), 0, 3) === '250');
//$this->rset();
return $result;
} else{
$this->errors[] = 'Not connected!';
return FALSE;
}
}
function helo(){
if(is_resource($this->connection) && $this->send_data('HELO '.$this->helo) && substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
} else{
$this->errors[] = 'HELO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function ehlo(){
if(is_resource($this->connection) && $this->send_data('EHLO '.$this->helo) && substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
} else{
$this->errors[] = 'EHLO command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function rset(){
if(is_resource($this->connection) && $this->send_data('RSET') && substr(trim($error = $this->get_data()), 0, 3) === '250' ){
return TRUE;
} else{
$this->errors[] = 'RSET command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function quit(){
if(is_resource($this->connection) && $this->send_data('QUIT') && substr(trim($error = $this->get_data()), 0, 3) === '221' ){
fclose($this->connection);
$this->status = SMTP_STATUS_NOT_CONNECTED;
return TRUE;
} else{
$this->errors[] = 'QUIT command failed, output: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function auth(){
if(is_resource($this->connection) && $this->send_data('AUTH LOGIN') && substr(trim($error = $this->get_data()), 0, 3) === '334' && $this->send_data(base64_encode($this->user)) && substr(trim($error = $this->get_data()),0,3) === '334' && $this->send_data(base64_encode($this->pass)) && substr(trim($error = $this->get_data()),0,3) === '235' ){
$this->authenticated = TRUE;
return TRUE;
} else{
$this->errors[] = 'AUTH command failed: ' . trim(substr(trim($error),3));
return FALSE;
}
}
function mail($from){
if($this->is_connected() && $this->send_data('MAIL FROM:<'.$from.'>') && substr(trim($this->get_data()), 0, 2) === '250' ){
return TRUE;
} else
return FALSE;
}
function rcpt($to){
if($this->is_connected() && $this->send_data('RCPT TO:<'.$to.'>') && substr(trim($error = $this->get_data()), 0, 2) === '25' ){
return TRUE;
} else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
function data(){
if($this->is_connected() && $this->send_data('DATA') && substr(trim($error = $this->get_data()), 0, 3) === '354' ){
return TRUE;
} else{
$this->errors[] = trim(substr(trim($error), 3));
return FALSE;
}
}
function is_connected(){
return (is_resource($this->connection) && ($this->status === SMTP_STATUS_CONNECTED));
}
function send_data($data){
if(is_resource($this->connection)){
return fwrite($this->connection, $data.CRLF, strlen($data)+2);
} else
return FALSE;
}
function &get_data(){
$return = '';
$line = '';
$loops = 0;
if(is_resource($this->connection)){
while((strpos($return, CRLF) === FALSE || substr($line,3,1) !== ' ') && $loops < 100){
$line = fgets($this->connection, 512);
$return .= $line;
$loops++;
}
return $return;
} else
return FALSE;
}
function set($var, $value){
$this->$var = $value;
return TRUE;
}
}
if(!isset($ctype) || $ctype == "text")
header('Content-Type: text/plain');
elseif($ctype == "html")
header('X-Mailer: PHP '.phpversion().'\nX-Sender-IP: $REMOTE_ADDR\nContent-Type: text/html\nContent-Transfer-Encoding: 8bit\n');
$params['host'] = $mail_server;
$params['port'] = 25;
$params['auth'] = TRUE;
$params['user'] = $mail_usercode;
$params['pass'] = $mail_passwort;
$send_params['recipients'] = array($mail_to);
$send_params['headers'] = array('From: '.$mail_absender, 'To: '.$mail_to, 'Subject: '.$mail_subject);
$send_params['from'] = $mail_absender;
$send_params['body'] = $mail_text;
if(is_object($smtp = smtp::connect($params)) && $smtp->send($send_params)){
echo "Die Mail wurde erfolgreich versendet!";
exit;
} else{
echo "Die Mail konnte nicht versendet werden! Es gab m?glicherweise Eingabefehler beim Formular!";
exit;
}
?>
Beitrag ge?ndert am 14.08.2005 16:38 von econline -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ganz unten sind zwei headers.
In Fehlermeldung steht ja das es schon header gibs und den anderen net starten kann.
Bin mir aber net sicher, weil ich mit headers keine ahnung habe.
Beitrag ge?ndert am 15.08.2005 00:44 von bilo -
Das ?bliche Problem:
Du versuchst, HTTP-Header auszugeben, obwohl du schon vorher Text ausgegeben hast. Entweder, du verlegst alle Header-Befehle vor die erste Textausgabe, oder du pufferst die Ausgabe mit den ob_...()-Befehlen von PHP:
<?php
ob_start();
// ab hier Text-Ausgabe m?glich
ob_end_flush();
// nach dem Befehl Script beenden
exit();
?> -
Ich hab irgendwie ein Problem mit der Session. Ich starte eine Session mit session_start();. Beim ersten laden der Webseite wird allen Hyperlinks ein "PHPSESSID", wie im unteren Beispiel angezeigt, angehangen. Wie kann ich das verhindern???
Ein Link:
http://econline.gotdns.com/index.php?site=& &PHPSESSID=f8ed80b739e3b4abbe099651281b00de#038;lang=de
sollte eigentlich so aussehen:
http://econline.gotdns.com/index.php?site=&lang=de
-
Ich hoffe, du meinst den Beitrag nicht ernst.
Das annehmend, lache ich einfach nur etwas. Bsp schmunzel in mich rein. Oder wei?, das ich in mich reinschmunzeln k?nnte.
Falls du ihn ernst meinst, sorry:
Die SessionID muss angegeben werden, sonst kannst du die Session nicht nutzen. Irgendwie muss dein Server ja wissen, welche Session(daten) er dem Besucher zuteilen soll.
Aber...nein, das warn Witz, oder^^ -
Ich hab irgendwie ein Problem mit der Session. Ich starte eine Session mit session_start();. Beim ersten laden der Webseite wird allen Hyperlinks ein "PHPSESSID", wie im unteren Beispiel angezeigt, angehangen. Wie kann ich das verhindern???
Ein Link:
http://econline.gotdns.com/index.php?site=& &PHPSESSID=f8ed80b739e3b4abbe099651281b00de#038;lang=de
sollte eigentlich so aussehen:
http://econline.gotdns.com/index.php?site=&lang=de
Wenn du die Session-ID mit Cookies ?bergibst, dann musst du sie nicht an die URL anh?ngen.
http://www.php-faq.de/q/q-sessions-methode.html
MfG
alopex -
Ich hoffe, du meinst den Beitrag nicht ernst.
Das annehmend, lache ich einfach nur etwas. Bsp schmunzel in mich rein. Oder wei?, das ich in mich reinschmunzeln k?nnte.
Falls du ihn ernst meinst, sorry:
Die SessionID muss angegeben werden, sonst kannst du die Session nicht nutzen. Irgendwie muss dein Server ja wissen, welche Session(daten) er dem Besucher zuteilen soll.
Aber...nein, das warn Witz, oder^^
HAHAHA!
Hab das Problem jetzt gel?st. Hab einfach ini_set('url_rewriter.tags', ''); verwendet.
Jetzt wird die PHPSESSID nicht mehr in der URL angezeigt. Ich denke mal dass die Session gesetzt wird, aber eben nicht mehr in der URL angezeigt wird. Cookies werden auch nicht gesetzt. -
Ich hoffe, du meinst den Beitrag nicht ernst.
Das annehmend, lache ich einfach nur etwas. Bsp schmunzel in mich rein. Oder wei?, das ich in mich reinschmunzeln k?nnte.
Falls du ihn ernst meinst, sorry:
Die SessionID muss angegeben werden, sonst kannst du die Session nicht nutzen. Irgendwie muss dein Server ja wissen, welche Session(daten) er dem Besucher zuteilen soll.
Aber...nein, das warn Witz, oder^^
HAHAHA!
Hab das Problem jetzt gel?st. Hab einfach ini_set('url_rewriter.tags', ''); verwendet.
Jetzt wird die PHPSESSID nicht mehr in der URL angezeigt. Ich denke mal dass die Session gesetzt wird, aber eben nicht mehr in der URL angezeigt wird. Cookies werden auch nicht gesetzt.
Sorry, aber jetzt muss ich mich valle anschlie?en: Wo sonst sollen die Session-IDs ?bertragen werden als in der URL oder in einem Cookie? Schau mal in die Cookie-Einstellungen deines Browsers, da wirst du die URL der Website finden, wo du angeblich keine Cookies hinschickst.
Und da ist auch der Beweis:
http://alopex.pyrokar.lima-city.de/img.php/econline_session_id.gif
Beitrag ge?ndert am 23.08.2005 21:36 von alopex -
OK!
Wie kann ich dann zumindest erreichen, dass die PHPSESSID an das Ende angef?gt wird und nicht wie bei mir dazwischen:
http://econline.gotdns.com/index.php?site=& &PHPSESSID=3fadd78a6ceb8db998aba3a31784b724 #038;lang=de
Sollte zumindest so aussehen:
http://econline.gotdns.com/index.php?site=&lang=de &PHPSESSID=3fadd78a6ceb8db998aba3a31784b724
Habe schon das hier gemacht:
ini_set('arg_separator.output', '&');
-
Keine Ahnung.
Alopex hat schon gesagt, dass die SessionID ja irgendwie ?bertragen werden muss. Und wenn jemand (zum Beispiel ich am PC meiner mutter) keine Cookies erlaubt, kommt es zu unsch?nen Fehlermeldungen auf deiner Seite.
Ist doch nicht so schlimm, wenn die nicht in der Reihenfolge sind, in der du sie gerne h?ttest, oder irre ich mich? -
Ist doch nicht so schlimm, wenn die nicht in der Reihenfolge sind, in der du sie gerne h?ttest, oder irre ich mich?
Genau da liegt das Problem! Wenn du in meinem letzten Beitrag guckst, siehst du, dass die Variable $lang nicht ?bertragen wird, weil das & (wegen dem Validator in "& # 0 3 8;" umge?ndert) nicht ber?cksichtigt wird. D.H. es gibt keine Variable $lang, sondern eine Variable $#038;lang (wenn man so etwas ?berhaupt deklarieren kann^^).
Somit: $lang != $#038;lang
Das Problem: Wenn $lang nicht gesetzt ist, wird die Startseite geladen. Der Aufruf der n?chsten Seite ist somit beim 1. laden der Seite nicht m?glich.
Beitrag ge?ndert am 26.08.2005 23:04 von econline -
Schreib & statt &.
Oder Board-tauglich:
8c#38; statt 8c (aus "8c" dann wieder das "UND" machen).
Und hole dir die Variable $lang (die ich in deinem Script leider nicht gefunden habe) aus dem Array
$_REQUEST. Das h?lt alle per URL (GET) oder POST ?bermittelten Variablen.
MfG
alopex -
Ich gibs auf!
Kannst du mir bitte ein kleines Script oder so etwas ?hnlichen geben, womit ich gucken kann ob der Benutzer Cookies akzeptiert oder nicht.
Ich mach das dann so, dass ich die Session-ID ?ber Cookies weitergeben lasse. Sollte der Benutzer keine Cookies erlauben bzw. annehmen, so sollte die Session-ID ?ber die URL weitergegeben werden. Das m?sste eigentlich automatisch funktionieren, wenn ich die Session-ID in erster Linie ?ber Cookies weitergebe oder irre ich mich da? -
http://www.php-faq.de/q/q-sessions-cookie.html
Lies auch mal die anderen Artikel zum Thema Sessions. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage