Problem mit array per include

Hallo,
Ich hab ein Problem mit einem Array das ich mittels include in ein Skript einbinde.
Wenn ich das Skript direkt aufrufe lässt sich das Array mittels print_r() ausgeben.
Rufe ich es aber zb mit IPS_RunScriptEx(DieseScriptId, Array(„function“ => „MovePerRoom“, „roomId“ => 12345, „direction“ => „DOWN“)); auf ist das Array leer.
Bug? Denkfehler von mir?
Wenn ihr beispielcode braucht, sagen.

In dem Script kannst du dann so auf dir Vars zugreifen:


$function // Inhalt "MovePerRoom"
$roomId // Inhalt "12345"
$direction // Inhalt "DOWN"

Referenz: http://www.ip-symcon.de/service/dokumentation/befehlsreferenz/ablaufsteuerung/ips-runscriptex/

Ach ne… das ist nicht das Problem.

Es geht um was anderes.

Ich habe eine PHP Datei in der diverse eindimesionale Arrays stehn, nennen wir sie mal daten.php. In dieser Datei ist nun zb. ein Array Names $jalousien.

Diese daten.php importiere ich mittels

include("daten.php");

am Anfang meines Scriptes.
Wenn ich nun nach dem include das Array testhalber mit print_r() ausgeben wird der inhalt des Arrays korrekt ausgegeben.

Wenn ich aber den print_r() aufruf in eine Funktion packe, und das Skript dann über PS_RunScriptEx(…) starte, das dann die Funktion aufruft, ist das Array praktisch nicht mehr vorhanden. Als ob die „daten.php“ nicht includet wird.

Auch zu große Arrays scheint Symcon nicht zu mögen. Ich musste $alleJalousien in zwei Arrays teilen.

Desweiteren scheinen zuviele Kommentare in Arrays einfach gelöscht zu werden.

Bugs von IP-Symcon?

Ich könnt noch mehr unlogisches Verhalten der Software aufzählen :wink:

hier nochmal ein gekürztes Listing.

mit diesem Code das ganze aufrufen:

IPS_RunScriptEx(DieScriptId, Array("function" => "MovePerSide", "side" => SOUTH, "direction" => "DOWN"));

Die Skriptdatei:


<?
...
include('21821.ips.php'); // die datei mit den arrays

// Hier wird ein volles Array ausgegeben
print("[");
print_r($jalousienSued);
print("]");

/*
 * Wenn über IPS_RunScriptEx, mit array
 * Zb: IPS_RunScriptEx(DieseScriptId, Array("function" => "MovePerRoom", "roomId" => 12345, "direction" => "DOWN"));
 */
switch($function)
{
	case "MoveSingleJal":
	      if ($dirRel && $powerRel && $direction != null) {
	         MoveSingleJal($dirRel, $powerRel, $direction);
	      }
	      else {
				exit("Fehler im Aufruf von MoveSingleJal");
	      }
	      break;
	case "MovePerRoom":
	      if ($roomId && $direction != null) {
	         MovePerRoom($roomId, $direction);
	      }
	      else {
				exit("Fehler im Aufruf von MovePerRoom");
	      }
	      break;
    case "SetStatusForRoom":
	      if ($roomID != null) {
	         SetStatusForRoom($roomID, $status);
	      }
	      else {
				exit("Fehler im Aufruf von SetStatusForRoom");
	      }
	      break;
	 case "MovePerSide" :
	      if ($side !== null && $direction !== null) {
	         print($side." ".$direction);
	         MovePerSide($side, $direction);
	      }
	      else
	      	exit("Fehler im Aufruf von MovePerSide");
			break;
}

[...]

function MovePerSide($side, $direction)
{
	switch ($side)
	{
		case "EAST" :
			MoveShutters(GetShuttersFromArr($jalousienOst), $direction);
		   break;
		case "SOUTH" :
                   // Hier wird ein leeres Array ausgegeben
		   print("[");
		   print_r($jalousienSued);
		   print("]");
		   //$arr = GetShuttersFromArr($jalousienSued);
			//MoveShutters($arr, $direction);
		   break;
		case "WEST" :
			MoveShutters(GetShuttersFromArr($jalousienWest), $direction);
		   break;
	}
}

?>

Die Arraydatei


<?

$jalousienOst = array(
		11343 ,
		43171 ,
		20566 ,
		32619 ,
		29420 
	);

$jalousienSued = array(
	   34232 ,
		59285 ,
		16539 ,
		41120 ,
		41398 
	);
	
$jalousienWest = array(

	);
	
$alleJalousien1 = array(
	39470 ,
	52143 ,
	23141 ,
	55516 ,
	15155 ,
	47296 ,
	27571 ,
	51514 ,
	55247 ,
	52236 ,
	46300 ,
	40789 ,
	26484 ,
	54368 ,
	54886 ,
	51044 ,
	45514 ,
	24853 ,
	29751
);

$alleJalousien2 = array(
	34232 ,
	59285 ,
	11343 ,
	43171 ,
	16539 ,
	20566 ,
	32619 ,
	29420 ,
	41120 ,
	41398 ,
	59252 ,
	58009 ,
	37732 ,
	47195 ,
	19489 ,
	16490 ,
	16645 ,
	54008 ,
	32056 ,
	52183 ,
	35523 ,
	50706 ,
	17900 ,
	13112
	);
	
?>

Da hast Du den Geltungsbereich der Variablen missachtet. In Deiner Funktion musst Du erst noch oben global $jalousienOst, $jalousienWest; usw einfügen, damit die Funktion die Arrays auch zur Verfügung hat (siehe PHP: Variable scope - Manual).

ohje ^^
Warum is das in PHP so kompliziert :wink: Wenn man sonst nur C/C++/C#/Java programmiert hat… Man lernt nie aus. Danke.