jmueller17 / Aixada

Aixada helps self-managed consumption cooperatives to organize their flow of products, money, and information.
Other
33 stars 37 forks source link

Fatal error: Array and string offset access syntax with curly braces is no longer supported in #288

Closed VictorJavaSpring closed 11 months ago

VictorJavaSpring commented 2 years ago

Algú sap a què pot ser degut l'error següent, sisplau? Gràcies. Fatal error: Array and string offset access syntax with curly braces is no longer supported in /customers/2/d/4/girasoldesantmarti.net/httpd.www/aixada/php/external/FirePHPCore/lib/FirePHPCore/ FirePHP.class.php on line 1093

jorix commented 2 years ago

Veig que es a causa del PHP 7.4, canvieu la linia 1093 del aixada/php/external/FirePHPCore/lib/FirePHPCore/ FirePHP.class.php on diu if ($name{0} == "\0") { per

          if ($name[0] == "\0") {

@jmueller17: Se debería actualizar el FirePHP o eliminar su uso, yo casi me decantaria por lo segundo, ¿que opinas?

jorix commented 2 years ago

veure https://stackoverflow.com/questions/59158548/array-and-string-offset-access-syntax-with-curly-braces-is-deprecated

VictorJavaSpring commented 2 years ago

Perdoneu la meva ignorància.. hem pregunto si algú pujarà la correcció/ns, perqué tenim l'aplicació parada per fer comandes.. que ens recomaneu? Gracies

jmueller17 commented 2 years ago

Sí, lo eliminamos mejor. A ver si tengo un momento hoy...

jorix commented 2 years ago

@victorcillo

@jmueller17

Sí, lo eliminamos mejor. A ver si tengo un momento hoy...

Lo puedo hacer yo, y propongo PR

jmueller17 commented 2 years ago

Ok, genial!

jorix commented 2 years ago

@victorcillo

Perdoneu la meva ignorància.. hem pregunto si algú pujarà la correcció/ns, perqué tenim l'aplicació parada per fer comandes.. que ens recomaneu? Gracies

Els canvis ja estan a master. Si us plau notifiqueu com us va quan ho proveu, gràcies

VictorJavaSpring commented 2 years ago

Deixa fer Log in, pero la part de demanar comandes falla, per pantalla surt així: WhatsApp Image 2022-01-16 at 22 02 33

jorix commented 2 years ago

Deixa fer Log in, pero la part de demanar comandes falla, per pantalla surt així...

Fa pinta de que hi ha més problemes amb la versió PHP 7.4, mireu d'usar una versió inferior de PHP.

Faré una prova del cicle de comandes i diners amb la 7.4.26, i ja posats amb la 8.1.1. Requerirà cert temps per poder dir alguna cosa...

jorix commented 2 years ago

Mira #290, arregla un error greu meu que feia que res funciones!!

Però amb amb el PHP 8.1 usant aquest PR Aixada només va a mitges (encara no he fet proves del PHP 7.4)

Ara amb PHP 8.1 encara no funciona Importar/exportat i se suposa que tampoc els emails

VictorJavaSpring commented 2 years ago

He probat amb #290 pero segueix sense mostrar les productes per demanar comanda, encara no hem canviat versió del PHP..

jorix commented 2 years ago

He probat amb #290 pero segueix sense mostrar les productes per demanar comanda, encara no hem canviat versió del PHP..

Ho havia provat amb PHP 8.1.1, i ara amb PHP 7.4.27

El #290 em funciona!!!
(ara #290 està també a master)

També em funciona amb PHP 5.5.22


Ara que m'hi fixo aquesta pantalla indica que no has usat install.php ( és la típica pantalla d'Aixada sense *.js i *.css , si tens un servidor windows el procés install.php també arregla uns links que linux enten bé però windows no )

Deixa fer Log in, pero la part de demanar comandes falla, per pantalla surt així: WhatsApp Image 2022-01-16 at 22 02 33

jorix commented 2 years ago

@victorcillo A pesar del #290 si vols fer imports, fer exports o envia missatges no treballis amb PHP 7.4 o superior!

VictorJavaSpring commented 2 years ago

Acabo de canviar la versió PHP a 7.4 en el servidor on tenim allotjada la aplicació i sembla que torna a funcionar.. PHP4_7 Encara que sembla que la versió PHP 7.4 acaba el 22 de noviembre de 2022. Tot i aixó, he vist uns errors accedint a la secció diners a l'archiu "accounts_operations.php": error_22_1 error_22_2 Els errors son a les arrays de la funció aquesta: protected function get_account_types_filter($account_types) { $response = array( 'show_uf' => false, 'show_uf_generic' => false, 'show_providers' => false, 'account_types' => null ); $_key = array_search(1000, $account_types, true); if ($_key !== false) { array_splice($account_types, $_key, 1); $response['show_uf'] = true; } $_key = array_search(1999, $account_types, true); if ($_key !== false) { array_splice($account_types, $_key, 1); $response['show_uf_generic'] = true; } $_key = array_search(2000, $account_types, true); if ($_key !== false) { array_splice($account_types, $_key, 1); if ($this->cfg_use_providers) { $response['show_providers'] = true; } } if (count($account_types)) { $response['account_types'] = implode(',', $account_types); } return $response; }

Salud!

jorix commented 2 years ago

@victorcillo Usa com a mínim el PHP 5.3!!!!

A la wiki ja ho indica:

PHP 5.3.2 or newer and PHP-7 (tested up to v7.3)

Estic treballant per que funcioni fins a la actual versió de PHP 8.2.1

VictorJavaSpring commented 2 years ago

Perdona, m'he equivocat al ficar el numeret de la versió! He actualitzat a 7.4 ( no a 4.7) PHP_ver

VictorJavaSpring commented 2 years ago

https://stackoverflow.com/questions/32559674/in-array-expects-parameter-2-to-be-array-string-given-in Pot ser fent 1 casting a la array? // Cast to an array $array = (array) $account_types;

VictorJavaSpring commented 2 years ago

Si, fent el casting 'arregla aquest error: $account_types = (array) $account_types;

protected function get_account_types_filter($account_types) {
    $response = array(
        'show_uf' => false,
        'show_uf_generic' => false,
        'show_providers' => false,
        'account_types' => null
    );
$account_types = (array) $account_types;  <-------
    $_key = array_search(1000, $account_types, true);

... Faig una alftra issue amb aixó?

VictorJavaSpring commented 2 years ago

@victorcillo A pesar del #290 si vols fer imports, fer exports o envia missatges no treballis amb PHP 7.4 o superior!

No fem imports ni exports ni enviem missatges! :)

jorix commented 2 years ago

Si, fent el casting 'arregla aquest error: $account_types = (array) $account_types;

...
$account_types = (array) $account_types;  <-------

... Faig una alftra issue amb aixó?

No cal un altres issue.

No he pogut reproduir el problema, però mira si usant el PR #291 s'arregla.
( he vist que per exemple cridant /php/ctrl/Account.php?oper=getBalances&account_types= si fallava, però no he vist cap lloc on es pugui cridat així el /php/ctrl/Account.php )

Voldria saber com ho fas fallar: és una cridant a /php/ctrl/Account.php?oper=...? amb quins paràmetres? (suposo usant que /manage_money.php) però fent què?

VictorJavaSpring commented 2 years ago

L'error hem sortia clikant a "Diners" en concret a l'arxiu "accounts_operations.php" segons deia els popups d'error, no a Account.php, tot, a la vista "report_account.php" amb el parámetre what = "my_account" (com surt a la url de la captura): error_diners2 He implementat el #291 per si un cas, sembla que funciona igual, es a dir, funciona correctament sense errors, estem fent proves a veure si realment funciona el fluxe de demanar comandes clickant a "Propera comanda".

VictorJavaSpring commented 2 years ago

Hem provat i funciona correctament de moment, Gracies a totes!

jorix commented 2 years ago

Dius:

He implementat el #291 per si un cas, sembla que funciona igual

Vol dir que segueix fallant o que ja funciona? La pantalla que mostres es de quan funciona amb el cast (array)?

Si el #291 no ho arregla m'interessa saber on falla.
Jo no he pogut reproduir l'error usant /report_account.php?what=my_account ni sense el #291

Fer un f12 al navegador i mira a xarxes les respostes en XML (n'hi ha a tres, segurament a una d'elles hi has de poder veure l'error), com l'exemple a sota.

image

VictorJavaSpring commented 2 years ago

La aplicació ja funciona correctament, la captura és d'aquest estat correcte sense errors, el casting va funcionar correctament, després de fer servir la versió 7.4 de PHP al nostre servidor. Al aplicar el #291 la aplicació seguía funcionant correctament sense canvis visibles. No es detecta cap error a les respostes 👍 sense_errors2

jorix commented 2 years ago

La aplicació ja funciona correctament, la captura és d'aquest estat correcte sense errors, el casting va funcionar correctament, després de fer servir la versió 7.4 de PHP al nostre servidor. Al aplicar el #291 la aplicació seguía funcionant correctament sense canvis visibles. No es detecta cap error a les respostes 👍

Entenc doncs que sense el casting funciona? (PHP 7.4 amb el #291)

VictorJavaSpring commented 2 years ago

Doncs, com vaig comentar a https://github.com/jmueller17/Aixada/issues/288#issuecomment-1019290362, fent el casting es corregía l'error que donaba al accedir a "Diners" a la nostra aplicació. Així que si no fiquem el casting $account_types = (array) $account_types; a l'archiu /php/lib/account_operations.php a la funció get_account_types_filter, just avans de la declaració de la variable $_key = array_search(1000, $account_types, true); , provoca 4 errors als array_splice

jorix commented 2 years ago

@victorcillo Entesos, ara el #291 també inclou el cast.

VictorJavaSpring commented 2 years ago

Tenim un altre error a la secció Diners, no surten els comtes a gestionar als desplegables: err_manage_money_2

jorix commented 2 years ago

Tenim un altre error a la secció Diners, no surten els comtes a gestionar als desplegables...

Segurament no és un altre error, deu ser l'error que cast (array) ha amagat. (en el meu servidor local no he pogut reproduir el problema: master i PHP 7.4.27)

Usa master (ja té el #291), així usarem el mateix codi.

Digues què et responen:

  1. /php/ctrl/Account.php?oper=getAccounts&all=0&account_types=1,2,1000,2000
  2. /php/ctrl/Account.php?oper=getAccounts&all=0&account_types=1000
jorix commented 2 years ago

Crea també aquest php com try-get-array.php:

<pre>
<?php var_export($_REQUEST); ?>
</pre>

i digues què respon el try-get-array.php?oper=getAccounts&all=0&account_types=1,2,1000,2000

VictorJavaSpring commented 2 years ago

@jorix Xavi, acabo de fer un petit canvi, un gran pas a la nostra aplicació, ja que a la línia 109 la funció get_accounts_XML cridava al métode get_account_types_filter amb el parámetre d'aquesta manera: $account_types='' lo que provocaba error, ja que el·liminant la assignació a cadena buida, torna a funcionar la part de Gestionar els diners i surten els comptes i UF's correctament als desplegables que fallaven... $filter = $this->get_account_types_filter($account_types=''); error_22_1

    $filter = $this->get_account_types_filter($account_types);

Screenshot_3

jorix commented 2 years ago

@jorix Xavi, acabo de fer un petit canvi, un gran pas a la nostra aplicació, ja que a la línia 109 la funció get_accounts_XML cridava al métode get_account_types_filter amb el parámetre d'aquesta manera: $account_types=''...

Sí, això s'ha d'arreglar. Però pensant en PHP 8.1 s'hi ha de posar:

@victorcillo Però segueixo MOLT preocupat per no saber reproduir el vostre error!

Si us plau fes les proves que et vaig suggerir, sobre tot aquesta:

Crea també aquest php com try-get-array.php:

<pre>
<?php var_export($_REQUEST); ?>
</pre>

i digues què respon el try-get-array.php?oper=getAccounts&all=0&account_types=1,2,1000,2000

i què passa amb:
try-get-array.php?oper=getAccounts&all=0&account_types=1|2|1000|2000

VictorJavaSpring commented 2 years ago

perdona la tardança, he estat molt liat... el try-get-array.php?oper=getAccounts&all=0&account_types=1,2,1000,2000 retorna: array ( 'oper' => 'getAccounts', 'all' => '0', 'account_types' => '1,2,1000,2000', )

VictorJavaSpring commented 2 years ago

i try-get-array.php?oper=getAccounts&all=0&account_types=1|2|1000|2000 retorna: array ( 'oper' => 'getAccounts', 'all' => '0', 'account_types' => '1|2|1000|2000', )

VictorJavaSpring commented 2 years ago

NOTA: No he pogut fer servir la master perque tenim canvis personalitzats per la nostra cooperativa ..

  1. /php/ctrl/Account.php?oper=getAccounts&all=0&account_types=1,2,1000,2000

resposta1.txt archiu adjunt resposta1.txt

VictorJavaSpring commented 2 years ago

2. /php/ctrl/Account.php?oper=getAccounts&all=0&account_types=1000 resposta2.txt resposta2.txt

VictorJavaSpring commented 2 years ago
  • public function get_accounts_XML($all, $account_types) {

he optat per agafar aquesta opció i funciona conrrectament.

jorix commented 2 years ago

perdona la tardança, he estat molt liat... el try-get-array.php?oper=getAccounts&all=0&account_types=1,2,1000,2000 retorna: array ( 'oper' => 'getAccounts', 'all' => '0', 'account_types' => '1,2,1000,2000', )

És el què hauria de ser, així que per aquí res...

  • public function get_accounts_XML($all, $account_types) {

he optat per agafar aquesta opció i funciona conrrectament.

Ok

NOTA: No he pogut fer servir la master perque tenim canvis personalitzats per la nostra cooperativa ..

Seria interesant que la vostra personalització la tinguesiu com una bifurcació de master, fins i tot per vosaltres.
Així ho faig amb la Cistella-master

Es pot veure el codi?
(Al teu compte els repositoris Aixada estan buits)

VictorJavaSpring commented 2 years ago

En breus pujaré la nostra versió i crearé la bifurcació.

jorix commented 2 years ago

NOTA: No he pogut fer servir la master perque tenim canvis personalitzats per la nostra cooperativa ..

  1. /php/ctrl/Account.php?oper=getAccounts&all=0&account_types=1,2,1000,2000

resposta1.txt archiu adjunt resposta1.txt

Je je, ja he reproduït el problema (99% de probabilitats)

Quan vareu aplicar els canvis del PR #290 segurament ho vareu fer a ma, i potser la cosa va quedar:

public function get_accounts_XML($all=0, $account_types) {
    $filter = $this->get_account_types_filter($account_types='');
    // start XML
    $strXML = '';
...

en lloc de:

public function get_accounts_XML($all=0, $account_types='') {
    $filter = $this->get_account_types_filter($account_types);
    // start XML
    $strXML = '';
...

I de fet tu cites:

@jorix Xavi, acabo de fer un petit canvi,... que fallaven... $filter = $this->get_account_types_filter($account_types=''); ...

Vaig pensar que era un error d'escriptura en el comentari, devia ser un error d'escriptura en el codi.


Cap problema, la qüestió era saber el per què, i no tenir un dimoniet no detectable que es pogués manifestar en producció.