Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
VictorJavaSpring opened this issue Jan 5, 2022 · 40 comments

Comments

@VictorJavaSpring
Copy link

VictorJavaSpring commented Jan 5, 2022

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

@VictorJavaSpring VictorJavaSpring changed the title Un dubte Fatal error: Array and string offset access syntax with curly braces is no longer supported in Jan 5, 2022
@jorix
Copy link
Contributor

jorix commented Jan 5, 2022

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
Copy link
Contributor

jorix commented Jan 5, 2022

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

@VictorJavaSpring
Copy link
Author

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
Copy link
Owner

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

@jorix
Copy link
Contributor

jorix commented Jan 7, 2022

@victorcillo

  • Has prova de fer el canvi a la línia 1093 de aixada/php/external/FirePHPCore/lib/FirePHPCore/ FirePHP.class.php?

@jmueller17

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

Lo puedo hacer yo, y propongo PR

@jmueller17
Copy link
Owner

Ok, genial!

@jorix
Copy link
Contributor

jorix commented Jan 7, 2022

@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
Copy link
Author

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
Copy link
Contributor

jorix commented Jan 17, 2022

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
Copy link
Contributor

jorix commented Jan 18, 2022

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
Copy link
Author

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

@jorix
Copy link
Contributor

jorix commented Jan 20, 2022

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
Copy link
Contributor

jorix commented Jan 20, 2022

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

@VictorJavaSpring
Copy link
Author

VictorJavaSpring commented Jan 22, 2022

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
Copy link
Contributor

jorix commented Jan 22, 2022

@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
Copy link
Author

VictorJavaSpring commented Jan 22, 2022

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

@VictorJavaSpring
Copy link
Author

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
Copy link
Author

VictorJavaSpring commented Jan 22, 2022

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
Copy link
Author

@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
Copy link
Contributor

jorix commented Jan 23, 2022

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
Copy link
Author

VictorJavaSpring commented Jan 23, 2022

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
Copy link
Author

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

@jorix
Copy link
Contributor

jorix commented Jan 24, 2022

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
Copy link
Author

VictorJavaSpring commented Jan 24, 2022

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
Copy link
Contributor

jorix commented Jan 24, 2022

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
Copy link
Author

Doncs, com vaig comentar a #288 (comment), 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 added a commit to jorix/Aixada that referenced this issue Jan 24, 2022
@jorix
Copy link
Contributor

jorix commented Jan 24, 2022

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

@VictorJavaSpring
Copy link
Author

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

@jorix
Copy link
Contributor

jorix commented Jan 25, 2022

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
Copy link
Contributor

jorix commented Jan 25, 2022

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
Copy link
Author

VictorJavaSpring commented Feb 8, 2022

@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
Copy link
Contributor

jorix commented Feb 9, 2022

@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:

  • public function get_accounts_XML($all=0, $account_types=array()) { o
  • public function get_accounts_XML($all, $account_types) {

@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

jorix added a commit to jorix/Aixada that referenced this issue Feb 26, 2022
@VictorJavaSpring
Copy link
Author

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
Copy link
Author

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
Copy link
Author

VictorJavaSpring commented Feb 26, 2022

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
Copy link
Author

VictorJavaSpring commented Feb 26, 2022

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

@VictorJavaSpring
Copy link
Author

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

he optat per agafar aquesta opció i funciona conrrectament.

@jorix
Copy link
Contributor

jorix commented Feb 26, 2022

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
Copy link
Author

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

@jorix
Copy link
Contributor

jorix commented Feb 27, 2022

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ó.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants