![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Czy ktoś potrafi rozwiązać następujący problem?:
W poniższym skrypcie uruchamianym po raz pierwszy wartość ciasteczka $ciastko jest różna od 1. Program omija pierwszą pętlę warunkową i przechodzi do... no właśnie. Powinien dalej utworzyć to ciasteczko a on przeskakuje od razu do wykonywania instrukcji: header("Location: ../$site_name?action=vote&ok=1"); I ciacho nie jest wysłane. Bez tej linijki kodu: header("Location: ../$site_name?action=vote&ok=1"); ciacho jest wysyłane. Dlaczego tak się dzieje? Z góry dziękuję za odpowiedź i pozdrawiam Oto kod: [php:1:c3f6d3ed70] <? $site_name="index.php"; if ($ciastko=="1") { header("Location: ../$site_name?action=vote&ok=2"); die(); } setcookie("ciastko", "1", time()+120); $base="data/poll.dat"; $data=file($base); $splitted=explode("||", $data[0]); $splitted[2]=trim($splitted[2]); $splitted[$id]++; $str="$splitted[0]||$splitted[1]||$splitted[2]n"; $f=fopen("data/poll.dat", "w"); flock($f, 2); fputs($f, $str); flock($f, 3); fclose($f); header("Location: ../$site_name?action=vote&ok=1"); ?> [/php:1:c3f6d3ed70] |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
-------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
To nie to. Mam register_globals na "on".
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Manual się kłania:
ciastka są widoczne tylko w tym katalogu, dla którego są ustawione. http://www.netscape.com/newsref/std/cookie_spec.html -------------------- |
|
|
![]()
Post
#5
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Wystarczy ustawić odpowiednio 4 parametr, i będą widoczne także w innych, ja to ustawiam tak:
[php:1:f6f7cb3abd]<?php setcookie('ciastko', 1, time()+120, '/'); ?>[/php:1:f6f7cb3abd] W linku który podał Spenalzo też jest to napisane, szkoda że nie znałem tego adresu jak poszukiwałem tego rozwiązania kilka miesięcy temu (odziwo w manualu nie było, a komentarze były tak dziwnie napisane że cięzko było to wywnioskować, więc musiałem do tego dochodzić metodą prób i błędów ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Link był w manualu php w wersji windows help.
Ale jak tak podasz to tylko jak skrypt jest w katalogu głównym, np. serwer.pl/ a jak bedzie serwer.pl/skrypty/pliki/ to chyba ciastka nie będzie już, nie wiem. Proszę o sprostowanie jeżeli się myle. -------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Testuje skrypt Na PWS. Ciacho przechowywane jest w katalogu WindowsCookies. Kiedy podaje komendę header("Location: ../$site_name?action=vote&ok=1"); to ciacho nie jest tworzone. Jeżeli zamiast tej linijki dam np.
If $ciastko=="1" Echo "jest ciacho"; to skrypt działa - w katalogu Windowscookies jest zapisane ciasteczko i skrypt je widzi wyświetlając: Jest ciacho. Coś nie tak z tym headerem? Nierozumiem dlaczego skrypt analizuje go jakby w pierwszej kolejności przed utworzeniem ciacha. |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Owszem ciastko jest utworzone, ale ty poprzez header("Location: ../$site...) przekierowujesz się do katalogu niżej, z którego ciastka już nie możesz odczytać!
podałem link. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
DanielBB -> A ja rozwiązanie problemu
![]() Cytat Ale jak tak podasz to tylko jak skrypt jest w katalogu głównym, np. serwer.pl/ a jak bedzie serwer.pl/skrypty/pliki/ to chyba ciastka nie będzie już, nie wiem. Proszę o sprostowanie jeżeli się myle.
Chyba sie mylisz, bo ja trzymałem plik ustawiający ciacho głęęęboko na serwerze, a plik który go odczytywał leżał w katalogu o jeden stopień wyżej. Cytat Link był w manualu php w wersji windows help.
Szukałem w wersji online, tam pewnie też jest, ale wtedy chyba jeszcze nie potrafiłem do końca z niego (manuala) korzystać ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Chyba sie mylisz, bo ja trzymałem plik ustawiający ciacho głęęęboko na serwerze, a plik który go odczytywał leżał w katalogu o jeden stopień wyżej.
Ok, sprawdziłem właśnie i tak: w przypadku zapisywania ciastka w katalagu np. /pliki/ i próbie odczytania w katalogu /pliki/katalog/katalog2/ ciastko można odczytać natomiast w przypadku zapisania np. w katalogu /pliki/katalog/ i próbie odczytania w katalogu /pliki/ takiego ciastka nie widać. Czyli przy zapisaniu ciastka w katalogu podrzędnym nie można go odczytać z nadrzędnego. Czyli metoda Cudi'ego działa: [php:1:678a7af28d]<?php setcookie('ciastko', 1, time()+120, '/'); ?>[/php:1:678a7af28d] -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdzałem. U mnie na PWS'ie jest trochę inaczej, tzn nawet przy określeniu scieżki dla ciasteczka PWS wkłada go do Windows/cookies.
Nie ma to jednak znaczenia bo skrypt automatycznie po nie sięga i czyta wartość. Problem w tym, że jak mówiłem setcookie w przypadku kiedy jest linia z header... nic nie tworzy. skrypt w pierwszej kolejności wykonuje header (location.. itd. zwracając wartość ok=1. Przy następnym odwołaniu do skryptu $ciastko powinno mieć wartość 1 i skrypt powinien się zakończyć. Ja już się prawie poddałem... |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 680 Pomógł: 0 Dołączył: 1.10.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
A może czas time()+120 to w końcu tylko 2 minuty...
-------------------- "Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie. Czytałem gdzieś że IE 5.5 którego zresztą używam ma kłopoty z dobrą interpretacją funkcji header(). Jest to możliwe bo header w funkcji warunkowej (patrz: skrypt) sam się nie uaktywnia i pozwala na cookies, które jest aplikowane w następnej linijce. Natomiast kiedy ciasteczko jest przed headerem, jak to ma miejsce później w skrypcie, header() nie dopuszcza do jego utworzenia. Dziwne.... Na razie szukam czym by tu zastąpić tę funkcję...
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 680 Pomógł: 0 Dołączył: 1.10.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat [...] Natomiast kiedy ciasteczko jest przed headerem, jak to ma miejsce później w skrypcie, header() nie dopuszcza do jego utworzenia. Dziwne.... [...]
To niemożliwe... Co ma piernik do wiatraka? -------------------- "Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
A jednak.. U mnie ciacho jest traktowane jako nagłówek. Jeżeli ono działa to funkcja header jest nieaktywna. Nie powinno tak być wię coś mam chyba z softem, bo sprawdzałem już ten skrypt na setki razy.
No nic pozdrawiam i dziękuję za wskazówki. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 680 Pomógł: 0 Dołączył: 1.10.2002 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat A jednak.. U mnie ciacho jest traktowane jako nagłówek. [...]
Co takiego? Cytat Ciasteczko musi być wysłane zanim jakiekolwiek inne nagłówki zostaną wysłane (to jest ograniczenie ciasteczek, nie php).
Wogóle to zacznij od najprostrzego skryptu... [php:1:e6bda0487e]<?php $site_name="index.php"; if($_COOKIE['ciastko'] == "1") { header("Location: ../$site_name?action=vote&ok=2"); } else { setcookie("ciastko", "1", 0); header("Location: ../$site_name?action=vote&ok=1"); } die(); ?>[/php:1:e6bda0487e] -------------------- "Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie taka nawet najprostsza wersja nie działa. Przy pierwszym wykonywaniu skryptu, ponieważ ciacho nie jest jeszcze utworzone wykonuje się instrukcja:
setcookie("ciastko", "1", 0); header("Location: ../$site_name?action=vote&ok=1"); tyle, że ciacho nie jest tworzone tylko od razu wykonuje się instrukcja headera ze zmienną ok=1. Jeżeli usunę linie: header("Location: ../$site_name?action=vote&ok=1"); Ciacho jest tworzone. Mam php 4.3.2 na PWS Win ME IE 5.5 U Ciebie twój skrypt działa? |
|
|
![]()
Post
#18
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
A próbowałeś chcociarz z tym 4 parametrem ? Bo u mnie jak plik odczytujący leży wyżej niż wysyłający to ciacha nie widać nigdy, czy jest tam header(), czy go nie ma.
|
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 17.04.2003 Ostrzeżenie: (0%) ![]() ![]() |
Tak sprawdzałem z 4 parametrem. To nie zależy od tego. Sprawdze jutro na Linux'ie na uczelni. Pozdrawiam
|
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
To sprawdź tak:
[php:1:b429f34090]<?php // plik 1.php if(!empty($HTTP_COOKIE_VARS["test"])) { header("Location: 2.php"); } else { header("Location: 2.php"); setcookie("test","jest ciacho"); } // plik 2.php echo $HTTP_COOKIE_VARS["test"]; ?>[/php:1:b429f34090] I jeżeli pokaże się "jest ciacho" to znaczy że działa. A czy ktoś zwrócił wogole uwagę na to co napisałem - że ciastka zapisane w katalogu podrzędnym nie są widoczne w nadrzędnym? -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 13:04 |