Fehlermeldung bei in_array()
Hallo ...
Ich bekomme ständig eine Fehlermeldung und kann nicht erkennen, wo der
Fehler liegen soll.
// Einlesen der Konfiguration aller Anwendungen
$arrConfig =3D array();
for ($intI =3D 0; $intI < count($_SESSION["Config"]["Common"]
["Applications"]); $intI++) {
$strConfigFile =3D "./conf/" . $_SESSION["Config"]["Common"]
["Applications"][$intI] _
["ShortName"] . ".cf";
if (file_exists($strConfigFile)) {
$arrConfig[$_SESSION["Config"]["Common"]["Applications"][$in tI]
["ShortName"]] =3D _
fnReadConfig($strConfigFile);
}
}
// Gruppenzugehörigkeiten ermitteln
for ($intI =3D 0; $intI < $arrLDAPResult[0]["memberof"]["count"]; $intI+
+) {
$strGroupName =3D substr($arrLDAPResult[0]["memberof"][$intI], 3,
strpos($arrLDAPResult[0] _
["memberof"][$intI], ",") - 3);
// Darf sich der Benutzer an mindestens einer Anwendung anmelden?
for ($intJ =3D 0; $intJ < count($_SESSION["Config"]["Common"]
["Applications"]); $intJ++) {
if (isset($arrConfig[$_SESSION["Config"]["Common"]["Application s"]
[$intJ]["ShortName"]]) _
&& in_array($strGroupName, $arrConfig[$_SESSION["Config"]
["Common"]["Applications"] _
[$intJ]["ShortName"]]["Permissions"]["AllowedGroups"])) {
array_push($arrUser["AllowedApplications"], $_SESSION["Config"]
["Common"] _
["Applications"][$intJ]["ShortName"]);
$arrUser["LoginAllowed"] =3D 1;
}
}
}
Fehlermeldung:
Warning: in_array() [function.in-array]: Wrong datatype for second
argument in /srv/www/vhosts/dev.schule-01.hansagymnasium-stralsund.de/
htdocs/SchoolTools/functions/auth.php on line 45
Auszug mit var_dump():
array(6) {
["Permissions"]=3D>
array(4) {
["AllowedGroups"]=3D>
array(3) {
[0]=3D>
string(19) "gg_Lehrer_Allgemein"
[1]=3D>
string(20) "gg_Lehrer_Informatik"
[2]=3D>
string(19) "gg_Mitarbeiter_Alle"
}
[...]
}
Der Auszug von var_dump() zeigt doch, daß die Variable ["Permissions"]
["AllowedGroups"] ein Array ist. Weshalb kommt dann diese
Fehlermeldung.
--
Rainer Krause
Re: Fehlermeldung bei in_array()
Entwarnung
Der Fehler lag in einer Konfigurationsdatei. Dadurch war die Variable
zum Teil kein Array.
--
Rainer Krause
Re: Fehlermeldung bei in_array()
Rainer Krause schrieb:
> Entwarnung
>
> Der Fehler lag in einer Konfigurationsdatei. Dadurch war die Variable
> zum Teil kein Array.
fürs nächste mal: einfach vor der fehlerbringenden Stelle den Datentyp
des Parameters prüfen und wenn es kein Array ist alles ausgeben was du
an Informationen hast. So dürftest den Fehler recht schnell finden.
Oder Debuggen, allerdings habe ich das bei PHP (bzw. meiner IDE Eclipse)
noch nicht geschafft herauszufinden, wie es geht. :)
--
Mit freundlichen Grüßen,
Christoph Herrmann
http://dragonprojects.de/
Re: Fehlermeldung bei in_array()
Rainer Krause schrieb:
> Ich bekomme ständig eine Fehlermeldung und kann nicht erkennen, wo der
> Fehler liegen soll.
Dein Code ist sehr schwer lesbar und noch dazu syntaktischer Müll. Zum
Beispiel diese Anweisung, in der wohl auch der Fehler steckt:
> if (isset($arrConfig[$_SESSION["Config"]["Common"]["Application s"]
> [$intJ]["ShortName"]]) _
> && in_array($strGroupName, $arrConfig[$_SESSION["Config"]
> ["Common"]["Applications"] _
> [$intJ]["ShortName"]]["Permissions"]["AllowedGroups"])) {
> array_push($arrUser["AllowedApplications"], $_SESSION["Config"]
> ["Common"] _
> ["Applications"][$intJ]["ShortName"]);
> $arrUser["LoginAllowed"] = 1;
> }
Allein hier steckt gleich 3x der gleiche Syntax-Fehler drin: Der
Unterstrich in der 2., 4. und 7. Zeile (oder ich habe einen Operator
übersehen).
Nehme ich diesen mal weg (dann stimmt zumindest die Syntax) und
formatiere den fraglichen Funktionsaufruf entsprechend der logischen
Indexstruktur, erhalte ich dieses:
in_array($strGroupName, $arrConfig[$_SESSION["Config"]
["Common"]
["Applications"]
[$intJ]
["ShortName"]]
["Permissions"]
["AllowedGroups"])
Solche geschachtelten Indizierungsorgien sind kein besonders guter Stil
und noch dazu fehleranfällig.
> Warning: in_array() [function.in-array]: Wrong datatype for second
> argument in [...]
Auf deutsch: Falscher Datentyp für zweites Argument. Sprich: dieser
Bandwurm da oben ist kein Array.
> Auszug mit var_dump():
Auszug wovon?
> Der Auszug von var_dump() zeigt doch, daß die Variable ["Permissions"]
> ["AllowedGroups"] ein Array ist.
["Permissions"]["AllowedGroups"] ist keine Variable, sondern nur zwei
Indizes.
Deine Angaben sind unvollständig und verwirrend.
Entwirre mal als erstes diesen Indexbandwurm. Vermutlich erledigt sich
das Problem dann schon von alleine. Falls nicht, entwirre mal den
restlichen Code und poste ein funktionierendes Minimalbeispiel, welches
diesen Fehler erzeugt.
Gruß. Claus
Re: Fehlermeldung bei in_array()
Rainer Krause wrote:
>Ich bekomme ständig eine Fehlermeldung und kann nicht erkennen, wo der
>Fehler liegen soll.
Kürze nächstes mal am besten Dein Beispiel (auch für Dich selbst zum
Testen) auf die wichtigen Teile, damit nicht alle den ganzen Quelltext
durchlesen müssen.
Abgesehen davon ist der Quelltext sehr unleserlich. Du solltest es Dir
nicht so schwer machen.
>
>// Einlesen der Konfiguration aller Anwendungen
>$arrConfig = array();
>for ($intI = 0; $intI < count($_SESSION["Config"]["Common"]
>["Applications"]); $intI++) {
> $strConfigFile = "./conf/" . $_SESSION["Config"]["Common"]
>["Applications"][$intI] _
> ["ShortName"] . ".cf";
> if (file_exists($strConfigFile)) {
> $arrConfig[$_SESSION["Config"]["Common"]["Applications"][$in tI]
>["ShortName"]] = _
> fnReadConfig($strConfigFile);
> }
>}
Wenn ich mich nicht täusche, entspricht das ungefähr diesem:
$arrConfig = array();
foreach ($_SESSION['Config']['Common']['Applications'] as $app)
{
$shortName = $app['ShortName'];
$strConfigFile = "./conf/$shortName.cf";
if (file_exists($strConfigFile))
{
$arrConfig[$shortName] = fnReadConfig($strConfigFile);
}
}
Trotzdem führst Du eine Array-Schlacht, welche zu gewinnen absolut
nicht einfach ist.
>// Gruppenzugehörigkeiten ermitteln
>for ($intI = 0; $intI < $arrLDAPResult[0]["memberof"]["count"]; $intI+
>+) {
> $strGroupName = substr($arrLDAPResult[0]["memberof"][$intI], 3,
>strpos($arrLDAPResult[0] _
> ["memberof"][$intI], ",") - 3);
> // Darf sich der Benutzer an mindestens einer Anwendung anmelden?
> for ($intJ = 0; $intJ < count($_SESSION["Config"]["Common"]
>["Applications"]); $intJ++) {
> if (isset($arrConfig[$_SESSION["Config"]["Common"]["Application s"]
>[$intJ]["ShortName"]]) _
> && in_array($strGroupName, $arrConfig[$_SESSION["Config"]
>["Common"]["Applications"] _
> [$intJ]["ShortName"]]["Permissions"]["AllowedGroups"])) {
> array_push($arrUser["AllowedApplications"], $_SESSION["Config"]
>["Common"] _
> ["Applications"][$intJ]["ShortName"]);
> $arrUser["LoginAllowed"] = 1;
> }
> }
>}
Das übersetzt Du jetzt am besten mal selbst in etwas Leserlicheres.
>Fehlermeldung:
>Warning: in_array() [function.in-array]: Wrong datatype for second
>argument in /srv/www/vhosts/dev.schule-01.hansagymnasium-stralsund.de/
>htdocs/SchoolTools/functions/auth.php on line 45
Ich kann keinen Fehler finden, falls Du mit dem folgenden var_dump()
$arrConfig[$_SESSION["Config"]["Common"]["Applications"][$in tJ]["ShortName"]
meinst.
>Auszug mit var_dump():
>array(6) {
> ["Permissions"]=>
> array(4) {
> ["AllowedGroups"]=>
> array(3) {
> [0]=>
> string(19) "gg_Lehrer_Allgemein"
> [1]=>
> string(20) "gg_Lehrer_Informatik"
> [2]=>
> string(19) "gg_Mitarbeiter_Alle"
> }
>[...]
>}
schöne grüße, steffen