![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
męczę się już kilka godzin z zagadnieniem dotyczącym zapisywania do pliku. Znalazłem w google tematy ludzi z podobnym problemem, ale nigdzie nie znalazłem rozwiązania, które u mnie by pomogło. Kłopotliwy kod:
Problem polega na tym, że dane wpisane do pliku niezależnie od metody fputs (fwrite) czy file_put_contents są zdublowane. Zależy mi, żeby dane dopisywały się na końcu i zawsze dzieje się to podwójnie. Sprawdziłem i jestem pewien, że nigdzie w kodzie nie ma podwójnie wywołanej funkcji. Cały kod wykonuje się raz, a fputs zachowuje się jakby została wywołana podwójnie. Sprawdzałem i przełączyłem fopen w tryb "r+", użyłem fseek, żeby się przesunąć na koniec pliku i zauważyłem coś ciekawego. Jak jestem na końcu pliku i próbuje coś wpisać to się dubluje, jak się przesunę od końca na więcej niż potrzeba na wpisane danych to problem nie występuje. Wygląda na to, że w momencie kiedy "kończy" się plik to dane wpisywane są ponownie. Testowałem różne przeglądarki i różne komputery, wszędzie ten sam problem. Nie mam już pomysłu jak to naprawić. Kombinowałem, żeby może po zapisie kasować z pliku dane, ale żeby to zrobić to muszę ponownie zapisać poprawione dane, które ponownie się dublują... Ktoś ma jakiś pomysł? Ten post edytował Vexis 7.04.2017, 12:53:09 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Jak jestem na końcu pliku i próbuje coś wpisać to się dubluje, jak się przesunę od końca na więcej niż potrzeba na wpisane danych to problem nie występuje. Bo jak przesuwasz za kazdym razem powiedzmy 10 do tylu, a tekst ma dlugosc 5 to chocbys i go 100 razy odpalil to zawsze bedziesz widzial swoj wpis tylko raz bo tekst w pliku jest nadpisywany a nie dopisywany.Twoj kod odpala sie dwa razy i tyle. Chocby przez jakies mod rewrite czy inne podobne sytuacje. Ciezko wywrozyc nie majac calosci. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
Bo jak przesuwasz za kazdym razem powiedzmy 10 do tylu, a tekst ma dlugosc 5 to chocbys i go 100 razy odpalil to zawsze bedziesz widzial swoj wpis tylko raz bo tekst w pliku jest nadpisywany a nie dopisywany. Twoj kod odpala sie dwa razy i tyle. Chocby przez jakies mod rewrite czy inne podobne sytuacje. Ciezko wywrozyc nie majac calosci. Owszem wywołuje się dwa razy, ale tylko i wyłącznie fputs(), niżej w kodzie mam alerta i pojawia się tylko raz. Wszystko poza tym wykonuje się raz. Wpis na końcu pliku zawsze zdublowany :/ |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Zrozum, alerta widzisz raz, bo to masz jako glowne żądanie. A gdzies w tle moze leciec dodatkowe żądanie, ktorego wyniku juz nie widzisz. A moze leciec np. przez zle zrobiony mod_rewrite i przekierowuje sie do skryptu gdy nie ma jakiegos css, js czy image. Wielokrotnie to sie na forum powtarzalo i wszyscy jak ty teraz sie upierali ze nic takiego sie nie dzieje a jednak zawsze sie dzialo. Do wyjatkow nie nalezysz
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie chcę zrozumieć, ale chyba mi coś nie idzie... Ten plik który tworze ma za zadanie wyeksportować dane do pliku txt, te dane kolejną są wpisywanie w zmienną. Wszystko działa idealnie. Czemu w takim układzie w momencie wpisywania do pliku zawartości zmiennej ta wartość się dubluje? Jakbyś mógł bez nerwów mi pomóc to zrozumieć to będę Ci bardzo wdzięczny.
Edit: Próba fputs($plik, 'test'); daje takie same efekty. Ten post edytował Vexis 7.04.2017, 13:19:52 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
To teraz dodaj sobie
Kod file_put_contents('test.log', var_export($_SERVER, true), FILE_APPEND); przed fputs() i po requeście pokaż wynik. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
To teraz dodaj sobie Kod file_put_contents('test.log', var_export($_SERVER, true), FILE_APPEND); przed fputs() i po requeście pokaż wynik. Jeżeli dobrze rozumiem to testowałem wcześniej:
co również dubluje mi dane w pliku wyjściowym. Ten post edytował Vexis 7.04.2017, 13:34:40 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
To teraz potrenj czytanie ze zrozumieniem...
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
To teraz potrenj czytanie ze zrozumieniem... Mój błąd.
Wybacz, ale musiałem wyciąg dane zawierające informacje o kliencie. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
No i co, dodało się raz...
to teraz w tym twoim: Kod file_put_contents($sciezka, 'testowy string'.PHP_EOL, FILE_APPEND | LOCK_EX); zamień na file_put_contents($sciezka, var_export($_SERVER, true), FILE_APPEND | LOCK_EX); i j.w wynik... |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
No i co, dodało się raz... to teraz w tym twoim: Kod file_put_contents($sciezka, 'testowy string'.PHP_EOL, FILE_APPEND | LOCK_EX); zamień na file_put_contents($sciezka, var_export($_SERVER, true), FILE_APPEND | LOCK_EX); i j.w wynik... Dodało się dwa razy tylko ja skopiowałem jeden egzemplarz :/ |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Dodało się dwa razy tylko ja skopiowałem jeden egzemplarz :/ Wiec masz kolejny dowod na to, ze mowie prawde ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
Wiec masz kolejny dowod na to, ze mowie prawde ![]() Okej, przyjmuje to do wiadomości, ale nie potrafię zrozumieć czemu akurat funkcje wpisujące coś to pliku wykonują się dwa razy. Nie jestem administratorem serwera na którym to wszystko stoi, więc nie jestem w stanie tego zweryfikować :/ Skoro nie jestem w stanie naprawić problemu to może da się go obejść? Zastanawiam się czy można jakoś usunąć duplikat z pliku tak, żeby nie używać fwrite ponownie. |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
![]() ![]() po lewej 1sze wystąpienie array a po prawej drugie i pokaż diff wygenerowany.... Załamałeś mnie.... Zmieniłem zdanie... Wyślij wynik mi na PW bez zamazywania (no chyba że oba są dokładnie takie same)... Ten post edytował Pyton_000 7.04.2017, 14:17:46 |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pokaz adres jesli jest publicznie dostepny.
-------------------- |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
![]() ![]() po lewej 1sze wystąpienie array a po prawej drugie i pokaż diff wygenerowany.... Załamałeś mnie.... Zmieniłem zdanie... Wyślij wynik mi na PW bez zamazywania (no chyba że oba są dokładnie takie same)... Wybacz, myślałem, że interesują Cię informacje a nie to czy jest zdublowane. Wpis jest podwójny, identyczny, tak jak wcześniej. Nie ma powodu to wściekania się, serio... Pokaz adres jesli jest publicznie dostepny. Niestety nie mam jak, całość stoi na testowym serwerze firmowym bez dostępu z zewnątrz w tym przypadku :/ Edit: Sprawdziłem na prywatnym serwerze i wszystko działa prawidłowo, bez dublowania. Także macie w pełni racje - wina leży po stronie serwera firmowego. Ktoś ma może pomysł gdzie dokładnie szukać przyczyny? Nie jestem administratorem tamtego serwera, więc potrzebuje punktu zaczepienia, żeby wskazać adminowi. Ten post edytował Vexis 8.04.2017, 07:17:01 |
|
|
![]()
Post
#17
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Ktoś ma może pomysł gdzie dokładnie szukać przyczyny? Nie jestem administratorem tamtego serwera, więc potrzebuje punktu zaczepienia, żeby wskazać adminowi. Podalem ci jedna z przyczyn
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
Podalem ci jedna z przyczyn "mod rewrite " - widziałem i dziękuje za pomoc. W poniedziałek spróbuje coś w tym kierunku wskórać. Czy przychodzą Ci do głowy jeszcze inne możliwości? ////// Dowiedziałem się, że podwójne wykonywanie kodu w miejscu w którym pisałem swój kod (rozszerzenie klasy) jest jak najbardziej prawidłową i pożądaną funkcjonalnością w związku z czym udało mi się obejść problem w sposób bardzo nieelegancji, aczkolwiek dla moich potrzeb skuteczny.
W związku z powyższym dziękuje za pomoc i proszę o zamknięcie tematu. Ten post edytował Vexis 13.04.2017, 06:06:16 |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Po prostu zajebiste rozwiązanie.... Palce lizać... Gdybyśmy razem pracowali to dostałbyś takiego kopa za to że nie dałbyś rady siedzieć przez cały dzień...
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 1 Dołączył: 7.04.2017 Ostrzeżenie: (0%) ![]() ![]() |
Poradziłem sobie tak jak na tę chwile potrafię. Nie jestem w stanie zablokować podwójnego wykonywania kodu. Nie znam żadnego programisty, który wspomógłby radą, więc improwizuje. Chyba wolałbym tego kopa dostać, bo pewnie bym się czegoś od Ciebie nauczył w związku z tym :-)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 12:27 |