Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt php+sfera+subiekt gt = błędy php5 i Apache
Forum PHP.pl > Forum > PHP
xaitras
Witam wszystkich

I znowu utknąłem. Napisałem sobie skrypt do transferu danych z zamówień do subiekta.
Wszystko działało do momentu, kiedy nie powstała potrzeba stworzenia "pola własnego rozszerzonego" w zamówieniu od klienta ZK.
Chcę zaimportować do tego pola numer zamówienia z zewnętrznego systemu.
Realizuję to identycznie jak wpisy do uwag zamówienia.

Oto końcówka kodu z problemową linijką:

  1. $oDk->Uwagi = "tel. ".$telefon." - ".$faktura." - ".substr($kom_klient, 0, 410);"... - ".$kom_admin;
  2.  
  3. if( $pobranie == 1 ) { $oDk->PlatnoscKartaKwota = $oDk->KwotaDoZaplaty;}
  4.  
  5. $oDk->PoleWlasne['zamowienie'] = $nr_oryginalny; ////// TO NIE CHCE BANGLAĆ ! /////
  6.  
  7. $oDk->Zapisz();
  8. $Subiekt->Zakoncz();


Po wywołaniu pełnego kodu wykrzacza się raz Apache a raz php cli. Php jest w wersji 5. Zmienna $nr_oryginalny jest typu integer.

Dodam, że bez zaznaczonej linijki skrypt działa wyśmienicie.


BŁĘDY Z APACH'A

Podpis problemu:
Nazwa zdarzenia problemu: APPCRASH
Nazwa aplikacji: WebServ(apache).exe
Wersja aplikacji: 2.2.22.0
Sygnatura czasowa aplikacji: 4f38f0e8
Nazwa modułu z błędem: php5ts.dll
Wersja modułu z błędem: 5.4.10.0
Sygnatura czasowa modułu z błędem: 50d229d5
Kod wyjątku: c0000005
Przesunięcie wyjątku: 000779d7
Wersja systemu operacyjnego: 6.1.7601.2.1.0.256.48
Identyfikator ustawień regionalnych: 1045
Dodatkowe informacje 1: 0a9e
Dodatkowe informacje 2: 0a9e372d3b4ad19135b953a78882e789
Dodatkowe informacje 3: 0a9e
Dodatkowe informacje 4: 0a9e372d3b4ad19135b953a78882e789



Pomoże ktoś?
viking
Co masz w $nr_oryginalny? Wyżej po substr masz ; zamiast .
xaitras
W "$nr_oryginalny" mam numer zamówienia liczący max. 8 znaków (cyfr). Z dokumentacji sfery wynika, że max pojemność pola to 30 znaków.
Ciekawe jest to, że czasami skrypt przejdzie bez błędu ale tylko w 10% wink.gif

Poprawiłem bląd ze średnikiem.

Teraz wyświetliło mi :

object(variant)#1 (0) { }

Do pola własnego wartość została zapisana. Wcześniej wystąpił błąd:

Podpis problemu:
Nazwa zdarzenia problemu: APPCRASH
Nazwa aplikacji: php.exe
Wersja aplikacji: 5.4.10.0
Sygnatura czasowa aplikacji: 50d21a79
Nazwa modułu z błędem: php5ts.dll
Wersja modułu z błędem: 5.4.10.0
Sygnatura czasowa modułu z błędem: 50d229d5
Kod wyjątku: c0000005
Przesunięcie wyjątku: 000779d7
Wersja systemu operacyjnego: 6.1.7601.2.1.0.256.48
Identyfikator ustawień regionalnych: 1045
Dodatkowe informacje 1: 0a9e
Dodatkowe informacje 2: 0a9e372d3b4ad19135b953a78882e789
Dodatkowe informacje 3: 0a9e
Dodatkowe informacje 4: 0a9e372d3b4ad19135b953a78882e789



ok zostawiłem sobie jeszcze wpis var_dump($oDk);
chyba już jestem zmęczony wink.gif

Dalej nie działa sad.gif
Pyton_000
Czyli jak wywalisz tą 1 linijkę to działa a inaczej nie?

Powiedz może co to za libka, albo pokaż strukturę $oDk
xaitras
Jak wywalę to:

$oDk->PoleWlasne['zamowienie'] = $nr_oryginalny;

to działa super ( i tak od 2 lat)

Ale potrzebuję wpisywać z automatu nr zamówienia do pola własnego (wcześniej oczywiście zdefiniowanego w subiekcie).

Wbijam się do bazy za pomocą metod ze sfery więc teoretycznie powinno działać bez problemu.
Niestety coś nie pasuje Apach'owi i sieje błędami.

php5ts.dll


Z dokumentacji sfery:

Atrybut PoleWlasne
Pozwala na określanie wartości rozszerzonych pól własnych.
Parametry
bstrNazwa
String. Nazwa pola własnego.
Uwagi
Odwołanie do atrybutu PoleWlasne powinno wyglądać następująco:
obiekt.PoleWlasne("Nazwa_pola") = Wartosc_pola
gdzie Wartosc_pola ma odpowiadać typowi pola własnego.

Pola własne obiektu SuDokument są dostępne po wykupieniu rozszerzenia Niebieski Plus dla InsERT GT.
Wartości pól własnych są zapisywane w tabeli pw_Dane.
Przykład
Przykład pokazuje, w jaki sposób można ustawić wartości pól własnych "Id umowy" (liczba)
oraz "Tekst umowy" (tekst) za pomocą Sfery.

  1. Sub SuDokument_PoleWlasne()
  2. On Error GoTo ErrHandler
  3.  
  4. Dim oSubGT As InsERT.Subiekt
  5. Dim oDok As InsERT.SuDokument
  6.  
  7. Set oSubGT = UruchomSubiekta()
  8. Set oDok = oSubGT.SuDokumentyManager.WczytajDokument("FS 1/2008")
  9. oDok.PoleWlasne("Id umowy") = 3
  10. oDok.PoleWlasne("Tekst umowy") = "aaaa"
  11. oDok.Zapisz
  12. oDok.Wyswietl
  13.  
  14. oDok.Zamknij
  15. Exit Sub
  16.  
  17. ErrHandler:
  18. MsgBox Err.Number & " - " & Err.Description
  19. End Sub
viking
Wyświetl błędy PHP bo apache nic nie mówi.
xaitras
Na początku skryptu mam:

  1. ini_set( 'display_errors', 'On' );
  2. error_reporting( E_ALL );


Problem w tym, że wyświetla tylko "Fatal error"albo wogóle żadnego błędu.
Jak przechwycić wyjątek z tej linijki : $oDk->PoleWlasne['zamowienie'] = $nr_oryginalny; questionmark.gif?
Próbowałem try, catch ale nic nie wyświetla.

Skrypt po prostu w pewnym momencie się zatrzymuje i nic się nie dzieje bo na serwerze wyskakuje okno z komunikatem o zatrzymaniu apache.
viking
Sprawdź w logach PHP.
Pyton_000
Zobacz tak:

Kod
$oDk->PoleWlasne->zamowienie = $nr_oryginalny;

Albo

Kod
$oDk->PoleWlasne('zamowienie') = $nr_oryginalny;
xaitras
Pierwsza opcja:

Fatal error: Uncaught exception 'com_exception' with message 'safearray has no properties' in C:\WebServ\httpd\PANEL\przenies_pobrania.php:231 Stack trace: #0 C:\WebServ\httpd\PANEL\przenies_pobrania.php(231): unknown() #1 {main} thrown in


Druga opcja:

Fatal error: Can't use method return value in write context in

Już wcześniej próbowałem..

Utworzyłem plik php_errors.log i ma ustawione prawa do zapisu ale nic do niego nie wpada.
Wcześniej nie miałem potrzeby podglądu błędów bo na bieżąco były widoczne ze skryptu.

Jedyne co udało się odczytać z logów apacha:

PHP Fatal error: Call to private f\xbe!gl\xbe!g`\xbe!g\xc0<!g\x10>!g\x10?!g\xc0@!g::__destruct() from context '' in



Zauważyłem, że po wystąpieniu błędu, uruchomienie ponowne skryptu skutkuje prawidłowym działaniem.
Więc czasami działa bez problemu. Nie mam pojęcia dlaczego apache się wysypuje.

POMOCY! Bo już mi ręce opadają. Ostatecznie mógłbym wykorzystać pole "uwagi" do tego celu ale chciałbym żeby pole do którego trafia
nr zamówienia było "czyste" - bez dodatkowych informacji. Inaczej będę musiał filtrować treść a to będzie dodatkowa zabawa.

co_jest.gif

Ok już nie ważne.
Udało mi się wyciągnąć z bazy subiekta nr oryginalny - dotyczy ZK.
Jeśli kiedykolwiek ktoś będzie miał taki problem to dane siedzą w tabeli "dok__Dokument" , kolumnie "dok_DoDokNrPelny".
Standardowe zapytanie sql i mam komplet potrzebnych informacji.

Wszystkim dziękuję z zaangażowanie.

Temat do zamknięcia.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.