Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Błąd po zmianie z php 7.3 na 8.1: Cannot access offset of type string on string
baracuda
post 2.06.2023, 17:48:13
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.02.2022

Ostrzeżenie: (0%)
-----


Witajcie.
Mam do "naprawy" skrypt, który zaczął się sypać prawdopodobnie po zmianie php na 8.1. Problem w tym, że nie bardzo mam możliwość debugowania go (błąd znalazłem w logach).


Komunikat błędu:
  1. Cannot access offset of type string on string#0 /home/www/classs.php(529): ClassName->convertXmlToExportXml()
  2. #1 /home/www/classs.php(656): ClassName->sendToApi()
  3. #2 /home/www/classs.php(103): ClassName->sendToApi2()
  4. #3 {main}


Kod wygląda następująco:

  1. $o = new TQuery();
  2. $o->sql = "select * from tablename where id = " . $id;
  3. $o->Open();
  4. if (!$o->isRow) {
  5. return false;
  6. }
  7.  
  8. $rCode = $o->fieldByName('r_code');
  9. if ($rCode == 'AM' || $rCode == 'AG') {
  10. $rCode = 'A1';
  11. } else {
  12. $rCode = 'A2';
  13. }
  14.  
  15. $parsedXml = $this->convertXmlToExportXml($rCode);
  16. if (!$parsedXml) {
  17. return false;
  18. }
  19.  
  20. private function convertXmlToExportXml( $rCode) {
  21. .......
  22. }


Linia 529 to: $parsedXml = $this->convertXmlToExportXml($rCode);

Widzi ktoś może błąd?

Z góry dziękuje za pomoc smile.gif
Go to the top of the page
+Quote Post
Tomplus
post 3.06.2023, 06:18:36
Post #2





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Sam sobie odpowiedziałeś na pytanie:
W metodziec onvertXmlToExportXml() jest błąd. Sprawdź ją.
W tejże metodzie masz jakąś funkcjonalność która została wycofana w poprzednich wersjach, w wersji 7 pewnie miałeś Notice: Deprecated.
Go to the top of the page
+Quote Post
baracuda
post 3.06.2023, 13:45:57
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 2.02.2022

Ostrzeżenie: (0%)
-----


hmmm....
ta metoda nie ma nic dziwnego:

  1. private function convertXmlToExportXml( $rCode)
  2. {
  3. $icomponent = null;
  4.  
  5. foreach ($xiComponents->iComponent as $icomp) {
  6. if (
  7. strtotime($icomp->startDate) <= strtotime($this->cTime) &&
  8. strtotime($icomp->endDate) >= strtotime($this->cTime)
  9. ) {
  10. if (
  11. $this->decodeR(
  12. (string) $rCode,
  13. (string) $icomp->symbol
  14. )
  15. ) {
  16. $icomponent = $icomp;
  17. break;
  18. }
  19. }
  20. }
  21.  
  22. ////...... long code, but without $rCode
  23.  
  24. $ls33objXml =
  25. "<Object><objectId>1</objectId><objectExternalIds><externalId><externalSystem>PartenonEHM</externalSystem><IdName>PM</IdName><IdValue></Object>";
  26.  
  27.  
  28. }
  29. return $ls33objXml;
  30. }
  31.  
  32. private function decodeR($csR, $partR) {
  33.  
  34. $converter = array(
  35. 'I29-01' => 'PG',
  36. // .....
  37. );
  38. if (isset($converter[$partR]) && (string) $converter[$partR] === (string) $csR) {
  39. return true;
  40. } else {
  41. return false;
  42. }
  43. }
  44.  
Go to the top of the page
+Quote Post
Tomplus
post 3.06.2023, 17:06:00
Post #4





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Masz włączone obsługę błędów E_ALL?

Aby widzieć pomniejsze komunikaty?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 00:24