Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> header
DanielBB
post 28.05.2003, 21:03:17
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]
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
DeyV
post 28.05.2003, 21:16:28
Post #2





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




http://forum.php.pl/viewtopic.php?t=789


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
DanielBB
post 28.05.2003, 21:22:43
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".
Go to the top of the page
+Quote Post
spenalzo
post 28.05.2003, 21:29:55
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


--------------------

Go to the top of the page
+Quote Post
Cudi
post 28.05.2003, 21:31:37
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 smile.gif)
Go to the top of the page
+Quote Post
spenalzo
post 28.05.2003, 21:37:36
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.


--------------------

Go to the top of the page
+Quote Post
DanielBB
post 28.05.2003, 21:41:17
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.
Go to the top of the page
+Quote Post
spenalzo
post 28.05.2003, 21:44:19
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.


--------------------

Go to the top of the page
+Quote Post
Cudi
post 28.05.2003, 22:00:01
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 smile.gif

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ć winksmiley.jpg
Go to the top of the page
+Quote Post
spenalzo
post 28.05.2003, 22:46:16
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]


--------------------

Go to the top of the page
+Quote Post
DanielBB
post 28.05.2003, 23:38:39
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...
Go to the top of the page
+Quote Post
KaMeLeOn
post 29.05.2003, 00:50:04
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
Go to the top of the page
+Quote Post
DanielBB
post 29.05.2003, 01:10:41
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ę...
Go to the top of the page
+Quote Post
KaMeLeOn
post 29.05.2003, 01:28:47
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
Go to the top of the page
+Quote Post
DanielBB
post 29.05.2003, 02:22:24
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.
Go to the top of the page
+Quote Post
KaMeLeOn
post 29.05.2003, 02:45:16
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
Go to the top of the page
+Quote Post
DanielBB
post 29.05.2003, 11:51:05
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?
Go to the top of the page
+Quote Post
Cudi
post 29.05.2003, 14:35:01
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.
Go to the top of the page
+Quote Post
DanielBB
post 29.05.2003, 15:04:39
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
Go to the top of the page
+Quote Post
spenalzo
post 29.05.2003, 19:42:40
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?


--------------------

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 19.07.2025 - 13:04