PHP inlcude -> Zero Sized Reply

Ich habe hier ein kleines Problem :unamused:
Für meine Regnum-Seite möchte ich eine Event-Sektion bauen.
Bei einer Bestimmten Funtkion entseht aber ein Zero Sized Reply :astonished: , wenn ich include/require verwende:

events.php:

define ('alsius',1);
define ('ignis',2);
define ('syrtis',4);

function get_event_realm ( $eventid, $returnstr='%s1') {
echo '<p>get_event_realm: $eventid: '.htmlentities($eventid).', $returnstr: '.htmlentities($returnstr).'</p>'; //Testausgabe
	if (file_exists('language/events/'.$eventid.'.php')) {
		$event_realm=0;
		require 'language/events/'.$eventid.'.php'; //<-----------------Fehler tritt hier auf
		$arr_realms=array();
		$_return='';
		switch ($event_realm) {
			case 1||3||5||7:
				$arr_realms[]='Alsius';
			case 2||3||6||7:
				$arr_realms[]='Ignis';
			case 4||5||6||7:
				$arr_realms[]='Syrtis';
		}
		for ( $i = 0; $i < count( $arr_realms ); $i++ ){
			$_return.=str_replace  ( '%s1'  ,   $arr_realms[$i], $returnstr);
			if ( $i != count($arr_realms)-1) {
				$_return.='-';
			}
		}
		if ($_return!=''){
			return $_return; 
		}
	}
	return 'Alsius-Ignis-Syrtis';
	
 }

ein Beispiel für eine includierte Datei:

<?php $event_realm = alsius+ignis; //... ?>

Wenn ich die Funtkion dann so aufrufe:
get_event_realm ( $eventid );
gibt es ein Sero Sized Reply, wenn ich dann require ausklammer gehts, aber da gibts ein paar andere Fehler:
Statt einmal die Testausgabe auszugeben, wird die mehrmals ausgegeben und nur in einer ist $returnstr=’%s1’

Warum geht das nicht?

Weiß keiner, was da falsch ist?

P.S. das Zero Sized Reply gibts auch, wenn die Fuuntkion gar nicht aufgerufen wird :whata:

Zu deinem Inclide: Mach es so (Sieht besser aus):

$event_realm = include("datei.php");

und in der Datei:

return alsius+ignis;

Deine Switch-Anweisung kann auch nicht funktionieren :ps:, so isses besser:

if($event_realm & alsius) $arr_realms[]='Alsius';
if($event_realm & ignis) $arr_realms[]='Ignis';
if($event_realm & syrtis) $arr_realms[]='Syrtis';

Und zu deiner For am Ende:

if(count($arr_realms)) return implode(" - ", $arr_realms);

Und noch was, die Defines sollten IMMER groß geschrieben werden

Hier der Code:

define ('ALSIUS',1);
define ('IGNIS',2);
define ('SYRTIS',4);

function get_event_realm ($eventid, $returnstr='%s')
{
   if (file_exists('language/events/'.$eventid.'.php'))
   {
      $event_realm = require('language/events/'.$eventid.'.php');
      $arr_realms=array();
      if($event_realm & ALSIUS) $arr_realms[]= printf($returnstr, 'Alsius');
      if($event_realm & IGNIS) $arr_realms[]= printf($returnstr, 'Ignis');
      if($event_realm & SYRTIS) $arr_realms[]= printf($returnstr, 'Syrtis');

      if(count($arr_realms)) return implode(" - ", $arr_realms);
   }
   return 'Alsius-Ignis-Syrtis';
}

und die include

<?php return ALSIUS+SYRTIS;

Danke schonmal für die Antwort
(Ich machs mal durcheinander.)

[quote=„michi7x7“]
Und noch was, die Defines sollten IMMER groß geschrieben werden[/quote]
Die defines sind jetzt Großgeschrieben.

[quote=„michi7x7“]
und die include

<?php return ALSIUS+SYRTIS;

Mit return in den php-Dateien ist auch blöd, da ja da auch noch was anderes drinsteht (Beispiel unten).

Da fehlt doch nochwas, oder? Wann werden denn die Reiche returnt? Wird %s im ausgegebenen String bei implode ersetzt? So müsste es doch gehen:

for ( $i = 0; $i < count( $arr_realms ); $i++ ){
	$arr_realms[$i]=str_replace  ( '%s'  ,   $arr_realms[$i], $returnstr);
	 if (count($arr_realms)) {
		return implode(" - ", $arr_realms);
	}
}

(Mit Klammern gefällts mir besser)

Was bewirkt das & da eigentlich? if($event_realm & ALSIUS)

Nun zum anderen, ich weiß jetzt, dass es auch an was anderen liegen könnte :ps:
Mal mehr von den Includierten Dateien:

Event-Datei:
<?php
    //Von wann-bis wann
	$timestamp_start=mktime();
	$timestamp_end=mktime();
	
	//Eventdaten
	$event_title = '';	//Title
	$event_realm = IGNIS;
	$event_entryfee = ''; //Startgeld
	$event_win = ''; //Gewinn
	
	$event_shortdesc = '';//Kurzbeschreibung
    $event_longdesc = '';//Lange Beschreibung, bevor aktiv
    $event_longdesc_active = event_rallye( 'Unwichtiger Parameter', 'Startbeschreibung', 1); //Lange Beschreibung, wennaktiv
    $event_longdesc_end = '';//Lange Beschreibung, nach Ende
?>


Damit wird dann eine Rallye angezeigt (früher Anfang):
function event_rallye( $qap , $start_text, $eventid  ) {
	return $start_text.'</p><br>
	<center>Rallye starten:
	<br>'.get_event_realm( $eventid, 
	'[html] %s1 [/html]');
} 

Nun wird bei jedem includieren (denk ich mal) bei $event_longdesc_active event_rallye aufgerufen, was irgendwann den Fehler verursacht. Wei da jemand was :whata:

Nein, da fehlt nix. Return ist hier: if(count($arr_realms)) return implode(" - ", $arr_realms);, %s wird von sprintf automatisch ersetzt (mein Fehler, sprintf ist die Funktion)

Was bewirkt das & da eigentlich? if($event_realm & ALSIUS) 

Binärer Vergleich

  0 1 0 0 1
& 1 1 0 1 1
------------
  0 1 0 0 1

Ja, das endet in einer Endlosschleife (d.h. gar nicht)
include → event_rallye → create_realm → include → …

Ich habs jetzt mit einem Array gelöst und da geht auch alles, hier der Link zur Event Seite. Für alle die das Ergebnis sehen wollen.

P.S. bekomm ich nochmal ne genauere Erklärung für den binären Vergleich?

Steht alles hier: at2.php.net/manual/de/language.o … itwise.php