Gleiche php-Anwendung, 2 versch. Server , 1x Fehler

selfmade01

Lieutenant
Registriert
Okt. 2012
Beiträge
785
Hallo
ich habe hier ein richtig besch... Problem
Nach einer Neuinstallation auf einem Raspberry funktionieren einige Seiten bei mir nicht mehr.


Ich installierte nun auf einem laptop ein Debian-Linux mit mysql und apache. (einziger Unterschied. dort greife ich lokal zu also auf 127.0.0.1 und die Versionen von php und apache2 sind aktueller)

da funktionieren die Webseiten wie gewohnt

Auf meinem Raspberry dagegen bekomme ich Fehlermeldungen das er
===> : Got error 'PHP message: PHP Warning: Creating default object from empty value in......
Er versucht hier den wert einer
$page = $_GET['page'];
Variablen zu bekommen...
wenn ich die Seite untersuche so werden die Daten übertragen... er bringt aber den Fehler

An der PHP-Webseite kann es eigentlich nicht liegen... ich vermute eher an der PHP und/oder apache-Conf auf dem raspberry...

Wie kann ich das analysieren?

Grüße aus Bayern
 
Das ist genau der Fehlercode aus der error.log

Code:
[Sat Mar 02 19:35:00.018303 2019] [proxy_fcgi:error] [pid 1054:tid 2926572592] [client 192.168.2.22:29471] AH01071: Got error 'PHP message: PHP Warning:  Creating default object from empty value in /var/www/html/grobot.myhome_8888.de/incl/getData/getGridData.php on line 159\n', referer: http://192.168.2.10:8888/index.php?id=61

das ist die komplette seite

Code:
<?php
include("../../db/dbconnect.php");

$page         = $_GET['page'];
$limit         = $_GET['rows'];
$sidx         = $_GET['sidx'];
$sord         = $_GET['sord'];
$mysqltable = $_GET['table'];
$func        = $_GET['func'];
if(!$sidx) $sidx =1;

if ($func == "getrooms"){

            $result = $mysqli->query("SELECT COUNT(*) AS count FROM $mysqltable");// new
            $row = mysqli_fetch_array($result,MYSQLI_ASSOC);// new
            $count = $row['count']; // new
            if( $count > 0 && $limit > 0) { // new
            $total_pages = ceil($count/$limit); // new
            } else { // new
            $total_pages = 0; // new
            } // new
            if ($page > $total_pages) $page=$total_pages;
            $start = $limit*$page - $limit;
            if($start <0) $start = 0;

            $result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");
            $responce->page = $page;
            $responce->total = $total_pages;
            $responce->records = $count;
            $i=0;
            while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $responce->rows[$i]['id']=$row['roomId'];
            $responce->rows[$i]['cell']=array($row['roomId'],$row['roomNr'],$row['roomType'],$row['squareMeter'],$row['cubicMeter'],$row['createDate'],$row['updateDate'],$row['free']);
            $i++;
            }
            echo json_encode($responce);
}elseif($func == "getnlcontainertype"){
    
            $result = $mysqli->query("SELECT COUNT(*) AS count FROM $mysqltable ");// new
            $row = mysqli_fetch_array($result,MYSQLI_ASSOC);// new
            $count = $row['count']; // new
            if( $count > 0 && $limit > 0) { // new
            $total_pages = ceil($count/$limit); // new
            } else { // new
            $total_pages = 0; // new
            } // new
            if ($page > $total_pages) $page=$total_pages;
            $start = $limit*$page - $limit;
            if($start <0) $start = 0;

            $result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");
            $responce->page = $page;
            $responce->total = $total_pages;
            $responce->records = $count;
            $i=0;
            while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $responce->rows[$i]['id']=$row['nlContainerTypeId'];
            $responce->rows[$i]['cell']=array($row['nlContainerTypeId'], $row['nlContainerTypeName'],$row['nlContainerTypeDescription']);
            $i++;
            }
    
            echo json_encode($responce);
    
    
}elseif($func == "getnlcontainer"){
    
            $result = $mysqli->query("SELECT COUNT(*) AS count FROM $mysqltable ");// new
            $row = mysqli_fetch_array($result,MYSQLI_ASSOC);// new
            $count = $row['count']; // new
            if( $count > 0 && $limit > 0) { // new
            $total_pages = ceil($count/$limit); // new
            } else { // new
            $total_pages = 0; // new
            } // new
            if ($page > $total_pages) $page=$total_pages;
            $start = $limit*$page - $limit;
            if($start <0) $start = 0;
$mysqltable_2     = $_GET['table2'];
$mysqltable_3      = $_GET['table3'];
$mysqltable_4      = $_GET['table4'];
$mysqltable_5    = $_GET['table5'];
            
            /*
             $result = $mysqli->query("
                SELECT
                  nlContainer.nlContainerId,   
                  room.roomNr,
                  room.roomType,
                  showType.showType,
                  nlContainer.showInfoId,
                  nlContainer.containerNr,
                  nlContainerType.nlContainerTypeName,
                  nlContainer.volume, nlContainer.volumeCurrent,
                  nlContainer.sensorDistFull,
                  nlContainer.sensorDistEmpty,
                  nlContainer.lastTimeClean,
                  nlContainer.lastTimeChangeNl,
                  nlContainer.idealTemp,
                  nlContainer.state,
                  nlValues.nlCurrentTemp,
                  nlValues.nlCurrentWaterLevel,
                  nlValues.nlCurrentPh,
                  nlValues.nlCurrentEc
                  FROM
                  $mysqltable, $mysqltable_2,$mysqltable_3, $mysqltable_4
                  LEFT JOIN 
                  nlValues ON nlContainer.nlContainerId = nlValues.nlContainerId
                  WHERE
                  nlContainer.showTypeId = showType.showTypeId
                  AND
                  nlContainer.nlContainerTypeId = nlContainerType.nlContainerTypeId
                  AND
                  nlContainer.roomId=room.roomId
                  
                  
                  ");
                  */
                   $result = $mysqli->query("
                SELECT
                  nlContainer.nlContainerId,   
                  room.roomNr,
                  room.roomType,
                  showType.showType,
                  nlContainer.showInfoId,
                  nlContainer.containerNr,
                  nlContainerType.nlContainerTypeName,
                  nlContainer.sensorDistFull,
                  nlContainer.sensorDistEmpty,
                  nlContainer.lastTimeClean,
                  nlContainer.lastTimeChangeNl,
                  nlContainer.state,
                  nlContainer.tempMin,
                  nlContainer.tempMax,
                  nlContainer.sensorDistEmpty,
                  nlContainer.sensorDistEmpty,
                  nlContainer.nlContainerLength,
                  nlContainer.nlContainerWidth,
                  nlValues.nlCurrentTemp,
                  nlValues.nlCurrentWaterLevel,
                  nlValues.nlCurrentPh,
                  nlValues.nlCurrentEc
                  FROM
                  $mysqltable
                  LEFT JOIN 
                  nlValues ON nlContainer.nlContainerId = nlValues.nlContainerId
                  and nlValues.lastTimeStamp IS NOT NULL
                  LEFT JOIN
                  showType ON nlContainer.showTypeId = showType.showTypeId
                  LEFT JOIN
                  nlContainerType ON nlContainer.nlContainerTypeId = nlContainerType.nlContainerTypeId
                  LEFT JOIN
                  room ON nlContainer.roomId=room.roomId
                  
                  
                  ");
                  //ORDER BY $sidx $sord LIMIT $start , $limit

            //$result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");
            $responce->page = $page;
            $responce->total = $total_pages;
            $responce->records = $count;
            $i=0;
            while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
            $responce->rows[$i]['id']=$row['nlContainerId'];
            $responce->rows[$i]['stateid']=$row['state'];
            $responce->rows[$i]['cell']=array($row['nlContainerId'], $row['roomNr'],
            $row['roomType'],$row['containerNr'],$row['showType'],$row['nlContainerTypeName'],
            $row['nlCurrentTemp'],$row['nlCurrentPh'],$row['nlCurrentEc'],$row['nlCurrentWaterLevel'],$row['state'],$row['state'], $row['tempMin'],$row['tempMax']
            ,$row['sensorDistEmpty'],$row['sensorDistFull'],$row['nlContainerLength'],$row['nlContainerWidth']);
            $i++;
            }
    
            echo json_encode($responce);
    
    
}elseif($func == "getnlcontainerdetails"){   
            $nlContainerId = $_GET['nlContainerId'];
            $result = $mysqli->query("SELECT COUNT(*) AS count FROM $mysqltable ");// new
            $row = mysqli_fetch_array($result,MYSQLI_ASSOC);// new
            $count = $row['count']; // new
            if( $count > 0 && $limit > 0) { // new
            $total_pages = ceil($count/$limit); // new
            } else { // new
            $total_pages = 0; // new
            } // new
            if ($page > $total_pages) $page=$total_pages;
            $start = $limit*$page - $limit;
            if($start <0) $start = 0;
             $result = $mysqli->query("
                SELECT
                nlContainer.nlContainerId,
                  nlContainer.tempMin,
                  nlContainer.TempMax,
                  nlContainer.sensorDistFull,
                  nlContainer.sensorDistEmpty,
                  nlContainer.nlContainerLength,
                  nlContainer.nlContainerWidth,
                  nlContainer.lastTimeClean,
                  nlContainer.lastTimeChangeNl,
                  nlContainer.tempMin,
                  nlContainer.tempMax
                  FROM
                  $mysqltable
                  LEFT JOIN 
                  nlValues ON nlContainer.nlContainerId = nlValues.nlContainerId
                  WHERE
                  nlContainer.nlContainerId  = $nlContainerId
                  ");
                  //ORDER BY $sidx $sord LIMIT $start , $limit

            //$result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");
            $responce->page = $page;
            $responce->total = $total_pages;
            $responce->records = $count;
            $i=0;
            while($row = mysqli_fetch_array($result,MYSQLI_ASSOC)) {
                if ($row['lastTimeClean'] =="0000-00-00 00:00:00" || $row['lastTimeClean'] == NULL){
                    $row['lastTimeClean'] = '';
                }
                if ($row['lastTimeChangeNl'] =="0000-00-00 00:00:00" || $row['lastTimeChangeNl'] == NULL){
                    $row['lastTimeChangeNl'] = '';
                }
            $responce->rows[$i]['id']=$row['nlContainerId'];
            $responce->rows[$i]['cell']=array($row['nlContainerId'], $row['tempMin'],$row['tempMax'],
            $row['sensorDistFull'],$row['sensorDistEmpty'],$row['nlContainerLength'],$row['nlContainerWidth'],
            $row['lastTimeClean'],$row['lastTimeChangeNl']);
            $i++;
            }
    
            echo json_encode($responce);
}
?>

und das ist die Zeile 159
Code:
    zeile 158        //$result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");
    Zeile 159        $responce->page = $page;
 
Der Fehler ist das $responce nicht initialisiert wurde wie mambokurt oben schon mit den link gezeigt hat
 
BlackWyvern schrieb:
Der Fehler ist das $responce nicht initialisiert wurde wie mambokurt oben schon mit den link gezeigt hat
ok... aber wieso geht es auf dem laptop mit einem neueren Debian und php und bei eineR 1 Jahr alten raspberry Installation geht es plötzlich nicht...


das verstehe ich nicht...
wieso stärt ihm dort die Initialisierung nicht?
der ganze code wurde 1 zu 1 kopiert da wurde nix verändert...
Es sind nur die beiden server-BS-Systeme unterschiedlich ... liegen ca 1 Jahr auseinander
Ergänzung ()

unglaublich.
@mambokur hatte recht

aber wieso geht es auf dem Laptop (ich teste dort nur lokal auf der Maschine nicht über's home-Netz)
und auf dem Raspberry nicht?
 
Zuletzt bearbeitet:
Es geht auf beiden, bei dem einen ist nur error_reporting auf strict gestellt.

$responce = new stdClass;
$responce->page = $page;


So müsstes gehen, oder knall haltn @ vor Zeile 159...
Ergänzung ()

selfmade01 schrieb:
Das ist genau der Fehlercode aus der error.log

Code:
[Sat Mar 02 19:35:00.018303 2019] [proxy_fcgi:error] [pid 1054:tid 2926572592] [client 192.168.2.22:29471] AH01071: Got error 'PHP message: PHP Warning:  Creating default object from empty value in /var/www/html/grobot.myhome_8888.de/incl/getData/getGridData.php on line 159\n', referer: http://192.168.2.10:8888/index.php?id=61

das ist die komplette seite

Code:
<?php
include("../../db/dbconnect.php");

$page         = $_GET['page'];
$limit         = $_GET['rows'];
$sidx         = $_GET['sidx'];
$sord         = $_GET['sord'];
$mysqltable = $_GET['table'];
$func        = $_GET['func'];
if(!$sidx) $sidx =1;

if ($func == "getrooms"){

            $result = $mysqli->query("SELECT COUNT(*) AS count FROM $mysqltable");// new
            $row = mysqli_fetch_array($result,MYSQLI_ASSOC);// new
            $count = $row['count']; // new
            if( $count > 0 && $limit > 0) { // new
            $total_pages = ceil($count/$limit); // new
            } else { // new
            $total_pages = 0; // new
            } // new
            if ($page > $total_pages) $page=$total_pages;
            $start = $limit*$page - $limit;
            if($start <0) $start = 0;

            $result = $mysqli->query("SELECT * FROM $mysqltable ORDER BY $sidx $sord LIMIT $start , $limit");

Ich hoffe einfach mal das hängt nicht im Internet auf irgendnem Server, das schwitzt Sql Injections aus jeder Pore ;)
 
Zuletzt bearbeitet von einem Moderator:
kommt auf die Einstellung von error_reporting in der php.ini an.
 
mambokurt schrieb:
Es geht auf beiden, bei dem einen ist nur error_reporting auf strict gestellt.

$responce = new stdClass;
$responce->page = $page;


So müsstes gehen, oder knall haltn @ vor Zeile 159...

ach so, damit ich es verstehe
je nachdem welches error-Reporting bei php eingestellt ist schreibt er nicht nur ausführlichere Meldungen in's log sondern ist bei der Ausführung der seiten auch empfindlicher... und bricht dann auch ab...
richtig?
Ergänzung ()

BlackWyvern schrieb:
kommt auf die Einstellung von error_reporting in der php.ini an.
in meiner php.ini
auf dem raspberry
error_reporting = E_ALL
display_errors = On

und auf dem laptop
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
 
Zuletzt bearbeitet:
selfmade01 schrieb:
ach so, damit ich es verstehe
je nachdem welches error-Reporting bei php eingestellt ist schreibt er nicht nur ausführlichere Meldungen in's log sondern ist bei der Ausführung der seiten auch empfindlicher... und bricht dann auch ab...
richtig?

https://secure.php.net/manual/de/function.error-reporting.php

Das Manual ist unser Freund ;) Abbruch gibts eigentlich nur bei fatal errors oder du müsstest mit https://secure.php.net/manual/de/function.set-error-handler.php einen errorhandler registriert haben der bei ner notice/warning etc ein exit macht(das mach ich eigentlich ganz gerne auf Entwicklungsservern weil mich das zwingt sauber zu coden und man auch Fehler mitbekommt die man nicht gesehen hätte weil man drübergeheadert wär oder so).
 
was bewirkt eigentlich das "@" ?
ich bemerke gerade das wohl bestimmte Fehler dann ignoriert werden kann das sein?
 
selfmade01 schrieb:
was bewirkt eigentlich das "@" ?
ich bemerke gerade das wohl bestimmte Fehler dann ignoriert werden kann das sein?

Einfach nicht ausgegeben, eigentlich sollte man das nicht nutzen müssen aber so ab und an hat man keine große Wahl (in deinem Fall würd ich einfach new stdClass drüberschreiben und gut).
selfmade01 schrieb:
ach so, damit ich es verstehe
je nachdem welches error-Reporting bei php eingestellt ist schreibt er nicht nur ausführlichere Meldungen in's log sondern ist bei der Ausführung der seiten auch empfindlicher... und bricht dann auch ab...
richtig?
Ergänzung ()


in meiner php.ini
auf dem raspberry
error_reporting = E_ALL
display_errors = On

und auf dem laptop
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off

E_all logged quasi alles, die Tilde bedeutet "nicht" (die Konstanten wie e_all sind intern für Php Zahlen und die werden zu ner Bitmaske verknüpft, so ähnlich wie die Berechtigungen bei Linux, mit der Tilde nimmst du also quasi die eine Option raus).

Das macht übrigens auch Sinn dass das unterschiedlich eingestellt ist, ein Debian wird auch mal als Server im Internet benutzt, da willst du nicht dass son Mist übern Bildschirm flackert, andersrum ist der Raspi ja eigentlich ne Lernplattform, da willst du eigentlich auch alle Fehler sehen weil das zum frickeln und rumtesten ist...
 
Zurück
Oben