Oxid CE 4.10.x und PHP 7.2

Hallo

das ist ein berechtigter Hinweis und absolut sinnvoll PHP-Warnungen im Live-Betrieb abzuschalten :wink:

Gibt es dazu im Shop eine entsprechende Konfiguration z. B. in der config.inc.php oder muss dies z. B. über die .htaccess und php_flag error_reporting off erfolgen?

Viele Grüße und noch einen schönen Abend!

PHP Warnungen betreffen ja nicht nur den Shop und sollten daher global konfiguriert werden

Hallo,

eine globale Konfiguration der PHP Warnungen ist bei unserem Hosting-Paket leider nicht so einfach möglich!
Die Warnungen werden im Shop allerdings nicht angezeigt, wenn in den Grundeinstellungen der “Produktivmodus” aktiviert ist :slight_smile:

Dennoch wird die folgende Warnung im “Produktivmodus” angezeigt, wenn eine Produktvariante gewählt wird:
Warning: count(): Parameter must be an array or an object that implements Countable in /htdocs/shop/tmp/smarty/3858bea6b6eabf27b3ee585eb6ab6866^%%F5^F50^F500F10E%%tabs.tpl.php on line 110

Aus der entsprechenden Zeile im Template
[{if ($oView->getCrossSelling()|count or $oView->getAccessoires()|count or $oView->getSimilarProducts()|count)}]

Wird folgender Code generiert

<?php if (( ((is_array($_tmp=$this->_tpl_vars['oView']->getCrossSelling())) ? $this->_run_mod_handler('count', true, $_tmp) : count($_tmp)) || ((is_array($_tmp=$this->_tpl_vars['oView']->getAccessoires())) ? $this->_run_mod_handler('count', true, $_tmp) : count($_tmp)) || ((is_array($_tmp=$this->_tpl_vars['oView']->getSimilarProducts())) ? $this->_run_mod_handler('count', true, $_tmp) : count($_tmp)) )): ?>

Mir ist nicht klar wie die Prüfung aus dem Beispiel von “heinz.klauke” if($xx) count($xx) in diesem Fall anzuwenden ist.
Kann mir bitte jemand sagen, wie die Zeile im Template zu ändern ist?

Schon mal vielen Dank!

Hallo zusammen,

zwei interessante Artikel habe ich gefunden, wie das Problem evtl. gelöst werden kann:
1.) count generate waring in PHP 7 if there array is null
2.) get value count in an array with smarty

Wenn |count in |@count geändert wird, wie in Punkt 2 wird die Warnung weiterhin angezeigt.
Wenn |count in |default:array()|count geändert wird, wie in Punkt 1 ist die Produktseite nicht aufrufbar und es wird “Shop offline!” angezeigt.

Wer kann weiterhelfen und mir sagen wie die Syntax richtig ist?

Hallo,

durch den folgenden Beitrag konnte ich das Problem lösen:
[PHP 7.2] My fix for Warning: count()

Der Workaround sieht also wie folgt aus:
if ( $var|count ) wird zu
if ( $var && count($var) )
oder
if ( count($var) == 1 ) wird zu
if ( $var && count($var) == 1 )

Mir ist allerdings unklar, weshalb die Warnungen nicht mehr angezeigt werden, da ggf. count($var) immer noch ungültig bzw. NULL sein kann. Vielleicht hilft die Info ja trotzdem noch jemand :wink:

Wünsche allen ein gutes Wochenende!

Die Warnung wird nicht mehr angezeigt, weil $var nicht vorhanden ist und es gar nicht bis zu count() kommt

1 Like

Hallo vanilla_thunder,

vielen Dank für die Erklärung, jetzt habe ich es verstanden :slight_smile: War der Meinung, dass in der if() alles zur Prüfung ausgeführt wird!

Logische Operationen werden von Links nach Rechts ausgeführt.
$var ist false ==> der Rest wird nicht mehr (muss nicht mehr) ausgeführt werden

Super und es funktioniert sogar mit PHP 7.3.3
EDIT:
Es kommen doch 2 Warnungen bei 7.3.3 die bei 7.2 nicht auftreten:
Warning: session_id(): Cannot change session id when session is active in /homepages/9/xxx/htdocs/xxx/core/oxsession.php on line 1005

Warning: Cannot modify header information - headers already sent by (output started at /homepages/9/xxx/htdocs/xxx/core/oxsession.php:1005) in /homepages/9/xxx/htdocs/xxx/core/oxutilsserver.php on line 86

Hallo,

es gibt doch einen Fehler mit PHP 7.2 der bis jetzt leider nicht behoben werden konnte.
Unter Kundeninformationen -> Aktionen verwalten wird in dem Dialog “Artikel zuordnen” keine Artikel angezeigt (Spalte: “Alle verfügbaren Artikel”) und können demzufolge keiner Aktion zugeordnet werden. Einer Aktion bereits zugeordnete Artikel (Spalte: “Zugeordnete Artikel”) werden ebenfalls nicht im Dialog angezeigt.

Im Dialog wird keine Warnung oder Fehlermeldung angezeigt. In welcher Datei ist nach dem Fehler zu suchen bzw. wie kann eine Fehlermeldung mit Zeilennummer im Dialog angezeigt werden?

PS
In der config.inc.php wurde bereits $this->iDebug = 2; aktiviert.
Nach dem aktivieren wurde zuerst noch ein Fehler angezeigt:

oxConnectionException-oxException (time: 2019-05-08 08:45:32): [1146]: mysql:EXECUTE error: [1146: Table 'hshop.adodb_logsql' doesn't exist] in EXECUTE...

Das liegt wohl am ADOdb-Lite Performance Monitor, der aktiviert wird wenn der debug-mode in der config-inc.php. mit SQL gewählt wird (2,3,4), aber die dazugehörige Tabelle: “adodb_logsql” nicht erstellt. Das Problem kann behoben werden, wenn die Tabelle wie folgt erstellt wird:

CREATE TABLE adodb_logsql(
created datetime NOT NULL ,
sql0 varchar( 250 ) NOT NULL ,
sql1 text NOT NULL ,
params text NOT NULL ,
tracer text NOT NULL ,
timer decimal( 16, 6 ) NOT NULL
)

Weitere Infos dazu in diesem Beitrag: Datenbank Problem xampp CE 4.8.4

Hallo,

ich habe gerade akut dieses Problem. Gibt es eine schnelle, einfache Lösung?

Vielen Dank im voraus

Hallo,

du hast mir schon so oft geholfen, vielleicht auch dieses Mal: Wie kann ich PHP-Warnungen abschalten? Es kommen zwei Warnungen auf der Startseite oben, aber der Shop läuft normal. Erst wenn ich einen Artikel in den Warenkorb lege kommen die selben beiden Warnungen und es geht nicht mehr weiter.

Ich hoffe, mit einer Abschaltung der Warnungen ist es getan und der Einkaufsprozess läuft weiter.

Vielen Dank

Matthias

die PHP Einstellungen heißen “error reporting” und “display errors”, einige Hoster haben im Interface eine Einstellung dafür, bei anderen musst du es in einer eigenen php.ini Datei machen, schau am besten im FAQ deines Hoster nacht.

Ich habe eine php.ini, habe dort die beiden Zeilen error_reporting = off und display_errors = off eingetragen.

Auf meinem Rechner mit Chrome geht es jetzt, die Fehlermeldungen kommen zwar, aber der Verkaufsprozess funktioniert.

Wenn ich es mit irgendeinem anderen Browser - firefox, bing - oder Chrome auf einem anderen Rechner probiere, kommen die Fehlermeldungen weiterhin und nichts geht mehr.

Ich bin am Verzweifeln

Falls du es mal selbst sehen willst: www.wollgut.shop Irgendetwas in den Warenkorb packen

ich sehe da keine Warnungen.
Guck mal im Admin unter service -> systeminfo, was steht da in beiden Spalten bei “error_reporting” und “dispaly_errors”?

Wir hatten eine Kundin, die unbedingt bestellen wollte. Nervig, dass einem jemand sein Geld geben wioll :wink:

Ich habe den Shop wieder auf PHP 7.1 zurückgestellt, damit das mit der Bestellung klappt. Der Fehler ist bei 7.3 aufgetaucht.

In der Systeminfo steht bei display_errors bei Local Value und Master Value “On”.
error_reporting ist Local 0, Master no value.

Meine uini.php schaut so aus:

zend_extension=/kunden/homepages/38/d676841586/htdocs/clickandbuilds/WollgutShop/ioncube/ioncube_loader_lin_7.1.so
always_populate_raw_post_data=-1
error_reporting = Off
display_errors = Off

Soll ich den Shop nochmal auf 7.3 umstellen, damit du die Warnungen sehen kannst?

“Master Value” bedeutet, dass die Einstellung vom Webserver (php.ini, vhost, .htaccess) kommt und “Local Value” bedeutet, dass die Einstellung im PHP verändert wurde. Wenn bereits bei Master “On” steht,dann greift die eigene php.ini wahrscheinlich nicht (beachte, dass es php.ini und nicht ini.php heißen soll (zumindest bei allen Hostern, die ich kenne).
In dem Bereich “Additional .ini files parsed” relativ am Anfang siehst du, ob deine eigene php.ini greift. Sie sollte in der Liste auftauchen. Bei einigen Hostern muss die eigene php.ini entsprechend der PHP Version heißen, z.b. php73.ini, daher würde die php.ini für PHP 7.1 dort nicht greifen.

Ich würde error_reporting auch nicht ganz abschalten, sondern nur Warnuning und Notices:
error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

Entschuldigung, vielleicht bin ich zu blöd - aber von welcher login.tpl sprecht ihr?. In application/views/admin oder in Flow? Bei Flow sind ja einige login.tpl zu finden. Bekomme leider das o.g. Problem nicht in den Griff.

wenn die Fehlermeldung im Admin Bereich kommt, dann application/views/admin/...
wenn es im Frontend kommt dann flow oder ggf. im Child Theme suchen

Vielen Dank für schnelle Info!