cvs: phpdoc-el /reference/http .cvsignore functions.xml reference.xml /reference/http/functions header.xml headers-sent.xml setcookie.xml
[email protected] ("Dimitris Glezos") Wed, 30 Jul 2003 14:19:41 -0000
| Newsgroups | php.doc.el |
|---|---|
| Message-ID | <cvssubbie1059574781@cvsserver> |
subbie Wed Jul 30 10:19:41 2003 EDT
Added files:
/phpdoc-el/reference/http .cvsignore functions.xml reference.xml
/phpdoc-el/reference/http/functions header.xml headers-sent.xml
setcookie.xml
Log:
added http
subbie-20030730101941.txt
(text/plain, 37.3 KB)
Index: phpdoc-el/reference/http/.cvsignore
+++ phpdoc-el/reference/http/.cvsignore
functions.xml
Index: phpdoc-el/reference/http/functions.xml
+++ phpdoc-el/reference/http/functions.xml
&reference.http.functions.header;
&reference.http.functions.headers-sent;
&reference.http.functions.setcookie;
Index: phpdoc-el/reference/http/reference.xml
+++ phpdoc-el/reference/http/reference.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.6 Maintainer: daphnie Status: ready -->
<reference id="ref.http">
<title>HTTP ÓõíáñôÞóåéò</title>
<titleabbrev>HTTP</titleabbrev>
<partintro>
<section id="http.intro">
&reftitle.intro;
<para>
ÁõôÝò ïé óõíáñôÞóåéò óáò åðéôñÝðïõí íá ÷åéñéóôåßôå ôï áðïôÝëåóìá (output) ðïõ óôÝëíåôå ðßóù óôïí
áðïìáêñõóìÝíï browser êáôåõèåßáí óôï åðßðåäï ôïõ ðñùôïêüëïõ HTTP.
</para>
</section>
<section id="http.requirements">
&reftitle.required;
&no.requirement;
</section>
<section id="http.installation">
&reftitle.install;
&no.install;
</section>
<section id="http.configuration">
&reftitle.runtime;
&no.config;
</section>
<section id="http.resources">
&reftitle.resources;
&no.resource;
</section>
<section id="http.constants">
&reftitle.constants;
&no.constants;
</section>
</partintro>
&reference.http.functions;
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Index: phpdoc-el/reference/http/functions/header.xml
+++ phpdoc-el/reference/http/functions/header.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.18 Maintainer: daphnie Status: ready -->
<!-- splitted from ./en/functions/http.xml, last change in rev 1.2 -->
<refentry id="function.header">
<refnamediv>
<refname>header</refname>
<refpurpose>ÓôÝëíåé Ýíáí áêáôÝñãáóôï HTTP header</refpurpose>
</refnamediv>
<refsect1>
<title>ÐåñéãñáöÞ</title>
<methodsynopsis>
<type>int</type><methodname>header</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>replace</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>http_response_code</parameter></methodparam>
</methodsynopsis>
<para>
Ç <function>header</function> ÷ñçóéìïðïéåßôáé ãéá íá óôáëèïýí áêáôÝñãáóôïé
<acronym>HTTP</acronym> headers. Äåßôå ôï <ulink
url="&spec.http1.1;">HTTP/1.1 specification</ulink> ãéá ðåñéóóüôåñåò
ðëçñïöïñßåò ðÜíù óôïõò <acronym>HTTP</acronym> headers.
</para>
<para>
Ç ðñïáéñåôéêÞ ðáñÜìåôñïò <parameter>replace</parameter> äåß÷íåé
áí ï header ðñÝðåé íá áíôéêáôáóôÞóåé Ýíáí ðñïçãïýìåíï ðáñüìïéï header, Þ
íá ðñïóèÝóåé Ýíáí äåýôåñï header ôïõ ßäéïõ ôýðïõ. Ç ðñïêáèïñéóìÝíç åíÝñãåéá åßíáé ç áíôéêáôÜóôáóç ôïõ,
áëëÜ áí ðåñÜóåôå ùò äåýôåñç ðáñÜìåôñï ôï &false; ìðïñåßôå íá óôåßëåôå
ðïëëáðëïýò headers ôïõ ßäéïõ ôýðïõ. Ãéá ðáñÜäåéãìá:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', FALSE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
Ç äåýôåñç ðñïáïñåôéêÞ ðáñÜìåôñïò åßíáé ç <parameter>http_response_code</parameter> ç ïðïßá åíåñãïðïéåß ôçí
HTTP response code óôçí óõãêåêñéìÝíç ôéìÞ. (ÁõôÞ ç ðáñÜìåôñïò åßíáé äéáèÝóéìç áðü
ôçí PHP 4.3.0 êáé ìåôÜ.)
</para>
<para>
ÕðÜñ÷ïõí äýï éäéáßôåñåò êëÞóåéò ãéá headers. Ç ðñþôç åßíáé Ýíáò header
ðïõ áñ÷ßæåé ìå ôï string "<literal>HTTP/</literal>"
ôï ïðïßï èá ÷ñçóéìïðïéçèåß ãéá íá âñåèåß ôï HTTP status
code ðïõ ðñÝðåé íá óôáëåß. Ãéá ðáñÜäåéãìá, áí Ý÷åôå ðáñáìåôñïðïéÞóåé ôïí Apache íá
÷ñçóéìïðïéåß Ýíá PHP script ãéá íá ÷åéñßæåôáé requests ãéá ÷áìÝíá áñ÷åßá (÷ñçóéìïðïéþíôáò
ôçí <literal>ErrorDocument</literal> íôéñåêôßâá), ßóùò èÝëåôå íá
âåâáéùèåßôå üôé ôï script óáò ðáñÜãåé ôïí êáôÜëëçëï status code.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
header("HTTP/1.0 404 Not Found");
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
Ç ãñáììÞ ìå ôïí HTTP status header èá åßíáé ðÜíôá ç ðñþôç ðïõ èá óôÝëíåôáé
óôïí client, Üó÷åôá áðü áí ç ðñáãìáôéêÞ êëÞóç ôïõ <function>header</function>
åßíáé ç ðñþôç Þ ü÷é. Ôï status ìðïñåß íá áëëÜîåé
êáëþíôáò ôçí <function>header</function> ìå ìéá íÝá ãñáììÞ status
ïðïéáäÞðïôå óôéãìÞ åêôüò êáé áí ïé HTTP headers Ý÷ïõí Þäç óôáëåß.
</para>
</note>
<note>
<para>
Óôçí PHP 3, áõôü äïõëåýåé ìüíï üôáí ç PHP ìåôáãëùôßæåôáé ùò module ôïõ
Apache. Ìðïñåßôå íá ðåôý÷åôå ôï ßäéï áðïôÝëåóìá ÷ñçóéìïðïéþíôáò
ôï <literal>Status</literal> header.
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
header("Status: 404 Not Found");
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
<para>
Ç äåýôåñç åéäéêÞ ðåñßðôùóç åßíáé ç "Location:" header. Äåí óôÝëíåé
ìüíï ôïí header ðßóù óôïí browser, áëëÜ åðßóçò åðéóôñÝöåé Ýíá
<literal>REDIRECT</literal> (302) status code óôïí browser åêôüò êáé áí
êÜðïéïò <literal>3xx</literal> status code Ý÷åé Þäç ôåèåß.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
header("Location: http://www.example.com/"); /* Redirect browser */
/* Make sure that code below does not get executed when we redirect. */
exit;
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
Ç HTTP/1.1 áðáéôåß Ýíá áðüëõôï <acronym>URI</acronym> ùò ðáñÜìåôñï óôçí
<ulink url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>
ðïõ óõìðåñéëáìâÜíåé ôï ó÷Þìá, ôï hostname êáé ôï áðüëõôï path, ìåñéêïß
üìùò clients äÝ÷ïíôáé êáé ó÷åôéêÜ URIs. ÓõíÞèùò ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôéò
<literal>$_SERVER['HTTP_HOST']</literal>, <literal>$_SERVER['PHP_SELF']</literal>
êáé <function>dirname</function> ìüíïé óáò, ãéá íá êÜíåôå Ýíá áðüëõôï URI áðü Ýíá
ó÷åôéêü:
<informalexample>
<programlisting>
<![CDATA[
<?php
header("Location: http://".$_SERVER['HTTP_HOST']
.dirname($_SERVER['PHP_SELF'])
."/".$relative_url);
?>
]]>
</programlisting>
</informalexample>
</para>
</note>
<para>
Ôá PHP scripts óõ÷íÜ ðáñÜãïõí äõíáìéêü ðåñéå÷üìåíï ðïõ äåí ðñÝðåé íá ãßíåé cached
áðü ôïí browser ôïõ client Þ áðü ïðïéïíäÞðïôå proxy ðïõ êÜíåé cache áíÜìåóá óôïí server êáé óôïí
browser ôïõ client. Áñêåôïß proxies êáé clients ìðïñïýí íá ñõèìéóôïýí Ýôóé þóôå
íá áðåíåñãïðïéÞóïõí ôï caching ìå:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Date in the past
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// always modified
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
ºóùò áíáêáëýøåôå üôé ïé óåëßäåò óáò äåí ãßíïíôáé cache áêüìç êáé áí äåí
óôÝëíïíôáé üëïé ïé ðáñáðÜíù headers. ÕðÜñ÷åé Ýíáò áñéèìüò åðéëïãþí
ðïõ ïé ÷ñÞóôåò ìðïñïýí íá èÝóïõí óôïí browser êáé íá áëëÜîïõí
ôç óõìðåñéöïñÜ ôïõ ó÷åôéêÜ ìå ôï caching. ÓôÝëíïíôáò ôïõò ðáñáðÜíù headers, èá ðñÝðåé
íá ðáñáêáìöèïýí ïðïéåóäÞðïôå ñõèìßóåéò ðïõ ßóùò ðñïêáëÝóïõí íá ãßíåé ôï áðïôÝëåóìá
ôïõ script óáò, cached.
</para>
<para>
ÅðéðëÝïí, ïé ñõèìßóåéò <function>session_cache_limiter</function> êáé
<literal>session.cache_limiter</literal>
ìðïñïýí íá ÷ñçóéìïðïéçèïýí ãéá íá ðáñá÷èïýí áõôüìáôá ïé óùóôïß
caching-related headers üôáí ÷ñçóéìïðïéïýíôáé sessions.
</para>
</note>
<para>
Èõìçèåßôå üôï ç <function>header</function> ðñÝðåé íá
êáëåßôáé ðñéí óôáëåß ïðïéïäÞðïôå ðñáãìáôéêü áðïôÝëåóìá, åßôå ìå êáíïíéêÜ HTML
tags, êåíÝò ãñáììÝò óå Ýíá áñ÷åßï, Þ áðü ôçí PHP. Åßíáé ðïëý
óõíçèéóìÝíï ëÜèïò íá äéáâÜæïõìå êþäéêá ìå óõíáñôÞóåéò <function>include</function>, Þ
<function>require</function>, Þ Üëëåò óõíáñôÞóåéò ðïõ ðñïóðåëáýíïõí
áñ÷åßá, êáé Ý÷ïõí êåíÜ Þ Üäåéåò ãñáììÝò ðïõ åßíáé ôï áðïôÝëåóìá ðñéí ôçí êëÞóç ôçò
<function>header</function> . Ôï ßäéï ðñüâëçìá õðÜñ÷åé
êáé üôáí ÷ñçóéìïðïéåßôáé Ýíá ìüíï áñ÷åßï PHP/HTML.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<html>
<?php
/* This will give an error. Note the output
* above, which is before the header() call */
header('Location: http://www.example.com/');
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
Óôçí PHP 4, ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå buffering óôï áðïôÝëåóìá ãéá íá áíôéìåôùðßóåôå áõôü ôï ðñüâëçìá,
êÜíïíôáò buffer óôïí server ôï overhead ïëüêëçñïõ ôïõ áðïôåëÝóìáôïò (output) óôïí browser
ìÝ÷ñé áõôü íá óôáëåß. Ìðïñåßôå íá ôï êÜíåôå áõôü êáëþíôáò ôçí
<function>ob_start</function> êáé ôçí <function>ob_end_flush</function>
óôï script óáò, Þ èÝôïíôáò ôçí <literal>output_buffering</literal>
configuration íôéñåêôßâá óôï &php.ini; Þ
óôá áñ÷åßá configuration ôïõ server.
</para>
</note>
<para>
Áí èÝëåôå íá ðñïôñÝðåôå ôïí ÷ñÞóôç íá óþæåé ôá äåäïìÝíá ðïõ
óôÝëíåôå, üðùò Ýíá PDF áñ÷åßï ðïõ Ýåé ðáñá÷èåß, ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôïí <ulink
url="&url.rfc;2183">Content-Disposition</ulink> header ãéá íá
ôïõ äþóåôå Ýíá ðñïôåéíüìåíï üíïìá áñ÷åßïõ êáé íá áíáãêÜóåôå ôïí browser íá åìöáíßóåé
ôï ðáñÜèõñï ãéá save.
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// We'll be outputting a PDF
header("Content-type: application/pdf");
// It will be called downloaded.pdf
header("Content-Disposition: attachment; filename=downloaded.pdf");
// The PDF source is in original.pdf
readfile('original.pdf');
?>
]]>
</programlisting>
</informalexample>
</para>
<note>
<para>
ÕðÜñ÷åé Ýíá bug óôïí Microsoft Internet Explorer 4.01 ðïõ åìðïäßæåé
ôç ëåéôïõñãßá ôïõ ðáñáðÜíù. Êáé äåí ãßíåôáé êÜôé ãé'áõôü. ÕðÜñ÷åé åðßóçò êáé Ýíá bug
óôïí Microsoft Internet Explorer 5.5 ðïõ áëëçëåðéäñÜ ìå áõôï,
êáé ìðïñåß íá ëõèåß áíáâáèìßæïíôáò ôïí ìå ôï Service Pack 2 êáé ìåôÜ.
</para>
</note>
<note>
<simpara>
Áí ôï <link linkend="ini.safe-mode">safe mode</link> åßíáé åíåñãïðïéçìÝíï ôüôå ôï
uid ôïõ script ðñïóôßèåôáé óôï <literal>realm</literal> ìÝñïò
ôïõ <literal>WWW-Authenticate</literal> header áí Ý÷åôå åíåñãïðïéÞóåé
áõôüí ôïí header (÷ñçóéìïðïéåßôáé ãéá HTTP Authentication).
</simpara>
</note>
<para>
Äåßôå åðßóçò ôéò <function>headers_sent</function>,
<function>setcookie</function>, êáé ôï ôìÞìá ó÷åôéêÜ ìå ôçí
<link linkend="features.http-auth">HTTP authentication</link>.
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Index: phpdoc-el/reference/http/functions/headers-sent.xml
+++ phpdoc-el/reference/http/functions/headers-sent.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.13 Maintainer: daphnie Status: ready -->
<!-- splitted from ./en/functions/http.xml, last change in rev 1.7 -->
<refentry id="function.headers-sent">
<refnamediv>
<refname>headers_sent</refname>
<refpurpose>ÅëÝã÷åé áí Þ ðïý ïé headers Ý÷ïõí óôáëåß</refpurpose>
</refnamediv>
<refsect1>
<title>ÐåñéãñáöÞ</title>
<methodsynopsis>
<type>bool</type><methodname>headers_sent</methodname>
<methodparam choice="opt"><type>string</type><parameter>&file</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>&line</parameter></methodparam>
</methodsynopsis>
<simpara>
Ç <function>headers_sent</function> èá åðéóôñÝøåé &false; áí äåí Ý÷ïõí óôáëåß HTTP headers
êáé &true; óôçí áíôßèåôç ðåñßðôùóç. Áí ïé ðñïáéñåôéêÝò ðáñÜìåôñïé
<parameter>file</parameter> êáé <parameter>line</parameter>
Ý÷ïõí ôåèåß, ç <function>headers_sent</function> èá âÜëåé ôï üíïìá ôïõ áñ÷åßïõ
ôçò php êáé ôïí áñéèìü ôçò ãñáììÞò áð'üðïõ ôï áðïôÝëåóìá Üñ÷éóå, óôéò <parameter>file</parameter>
êáé <parameter>line</parameter> ìåôáâëçôÝò.
</simpara>
<simpara>
Äåí ìðïñåßôå íá ðñïóèÝóåôå Üëëåò ãñáììÝò óôï header ÷ñçóéìïðïéþíôáò ôç óõíÜñôçóç <function>header</function>
üôáí ôï ôìÞìá ôïõ header Ý÷åé Þäç óôáëåß. ×ñçóéìïðïéþíôáò áõôÞ ôç óõíÜñôçóç
ìðïñåßôå ôïõëÜ÷éóôï íá åìðïäßóåôå íá ðÜñåôå ìçíýìáôá ëÜèïõò ó÷åôéêÜ ìå ôçí HTTP header.
Ìéá Üëëç åðéëïãÞ åßíáé íá ÷ñçóéìïðïéÞóåôå ôçí <link linkend="ref.outcontrol">Output Buffering</link>.
</simpara>
<note>
<simpara>
Ïé ðñïáéñåôéêÝò ðáñÜìåôñïé <parameter>file</parameter> êáé <parameter>line</parameter>
ðñïóôÝèçêáí óôçí PHP 4.3.0.
</simpara>
</note>
<para>
<example>
<title>Ðáñáäåßãìáôá ðïõ ÷ñçóéìïðïéïýí ôçí <function>headers_sent</function></title>
<programlisting role="php">
<![CDATA[
<?php
// If no headers are sent, send one
if (!headers_sent()) {
header ('Location: http://www.example.com/');
exit;
}
// An example using the optional file and line parameters, as of PHP 4.3.0
// Note that $filename and $linenum are passed in for later use.
// Do not assign them values beforehand.
if (!headers_sent($filename, $linenum)) {
header ('Location: http://www.example.com/');
exit;
// You would most likely trigger an error here.
} else {
print "Headers already sent in $filename on line $linenum\n" .
"Cannot redirect, for now please click this <a " .
"href=\"http://www.example.com\">link</a> instead\n";
exit;
}
?>
]]>
</programlisting>
</example>
</para>
<para>
Äåßôå åðßóçò ôéò <function>ob_start</function>, <function>trigger_error</function>,
êáé <function>header</function> ãéá ìéá ðéï ëåðôïìåñÞ óõæÞôçóç óôá
èÝìáôá ðïõ ðñáãìáôåýïíôáé.
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
Index: phpdoc-el/reference/http/functions/setcookie.xml
+++ phpdoc-el/reference/http/functions/setcookie.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.24 Maintainer: daphnie Status: ready -->
<!-- splitted from ./en/functions/http.xml, last change in rev 1.2 -->
<refentry id="function.setcookie">
<refnamediv>
<refname>setcookie</refname>
<refpurpose>ÓôÝëíïíôáò Ýíá cookie</refpurpose>
</refnamediv>
<refsect1>
<title>ÐåñéãñáöÞ</title>
<methodsynopsis>
<type>bool</type><methodname>setcookie</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>expire</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>path</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>domain</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>secure</parameter></methodparam>
</methodsynopsis>
<para>
Ç <function>setcookie</function> ïñßæåé íá óôáëåß Ýíá cookie ìáæß ìå
ôïõò õðüëïéðïõò HTTP headers. ¼ðùò êáé ïé Üëëïé headers, ôá cookies
ðñÝðåé íá óôÝëíïíôáé <emphasis>ðñéí</emphasis> áðü ïðïéïäÞðïôå áðïôÝëåóìá (output) ôïõ
script óáò (áõôü åßíáé Ýíáò ðåñéïñéóìüò ôïõ ðñùôïêüëïõ). Áõôü ðñïûðïèÝôåé üôé
åóåßò ôïðïèåôåßôå ôéò êëÞóåéò áõôÞò ôçò óõíÜñôçóçò ðñéí áðü êÜèå output, óõìðåñéëáìâáíïìÝíùí ôùí
<literal><html></literal> êáé <literal><head></literal> tags
üðùò åðßóçò êáé ïðéïíäÞðïôå êåíþí. Áí ôï output õðÜñ÷åé ðñéí áðü ôçí êëÞóç áõôÞò
ôçò óõíÜñôçóçò, ç <function>setcookie</function> èá áðïôý÷åé êáé èá åðéóôñÝøåé &false;.
Áí ç <function>setcookie</function> åêôåëåóôåß åðéôõ÷þò, èá åðéóôñÝøåé
&true;. Áõôü üìùò äåí äåß÷íåé áí ï ÷ñÞóôçò Ý÷åé äå÷èåß ôï cookie.
</para>
<note>
<para>
Óôçí PHP 4, ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå buffering óôï output ãéá íá óôåßëåôå ôï output ðñéí áðü ôçí êëÞóç
áõôÞò ôçò óõíÜñôçóçò, êÜíïíôáò buffer óôïí server ôï overhead ïëüêëçñïõ ôïõ output óôïí browser
ìÝ÷ñé áõôü íá óôáëåß. Ìðïñåßôå íá ôï êÜíåôå áõôü êáëþíôáò ôçí
<function>ob_start</function> êáé ôçí <function>ob_end_flush</function>
óôï script óáò, Þ èÝôïíôáò ôçí <literal>output_buffering</literal>
configuration íôéñåêôßâá óôï &php.ini; Þ óôá áñ÷åßá configuration ôïõ server.
</para>
</note>
<para>
¼ëåò ïé ðáñÜìåôñïé åêôüò áðü ôçí ðáñÜìåôñï <parameter>name</parameter>
åßíáé ðñïáéñåôéêÝò. Ìðïñåßôå åðßóçò íá áíôéêáôáóôÞóåôå ìéá ðáñÜìåôñï ìå Ýíá êåíü string
(<emphasis>""</emphasis>) ðñïêåéìÝíïõ íá ðáñáêÜìøåôå áõôÞ ôçí
ðáñÜìåôñï. ÅðåéäÞ ïé ðáñÜìåôñïé <parameter>expire</parameter> êáé
<parameter>secure</parameter> åßíáé áêÝñáéïé, äåí ìðïñïýí íá ðáñáêáìöèïýí
ìå Ýíá êåíü string, áëëÜ ðñÝðåé íá ÷ñçóéìïðïéÞóåôå ôï ìçäÝí (<emphasis>0</emphasis>).
Ï ðáñáêÜôù ðßíáêáò åîçãåß êÜèå ðáñÜìåôñï ôçò óõíÜñôçóçò
<function>setcookie</function>, êáé äéáâÜóôå ôï ôìÞìá
<ulink url="&spec.cookies;">Ïñéóìü cookie ãéá Netscape </ulink> ãéá
ïäçãßåò ó÷åôéêÜ ìå ôï ðþò êÜèå ðáñÜìåôñïò <function>setcookie</function> äïõëåýåé
êáé ôï <ulink url="&url.rfc;2965">RFC 2965</ulink> ãéá åðéðñüóèåôåò
ðëçñïöïñßåò ó÷åôéêÜ ìå ôï ðþò ç HTTP cookies äïõëåýåé.
</para>
<para>
<table>
<title><function>setcookie</function> åîÞãçóç ðáñáìÝôñùí</title>
<tgroup cols="3">
<thead>
<row>
<entry>ÐáñÜìåôñïò</entry>
<entry>ÐåñéãñáöÞ</entry>
<entry>Ðáñáäåßãìáôá</entry>
</row>
</thead>
<tbody>
<row>
<entry><parameter>name</parameter></entry>
<entry>
Ôï üíïìá ôïõ cookie.
</entry>
<entry>
ç 'cookiename' êáëåßôáé ùò <varname>$_COOKIE['cookiename']</varname>
</entry>
</row>
<row>
<entry><parameter>value</parameter></entry>
<entry>
Ç ôéìÞ ôïõ cookie. Ç ôéìÞ áõôÞ áðïèçêåýåôáé óôïí õðïëïãéóôþí ôùí
clients, ãé'áõôü ìçí áðïèçêåýåôå åõáßóèçôåò ðëçñïöïñßåò.
</entry>
<entry>
ÕðïèÝôïíôáò üôé ç <parameter>name</parameter> åßíáé ç 'cookiename', áõôÞ
ç ôéìÞ ðáßñíåôáé ìå ôçí <varname>$_COOKIE['cookiename']</varname>
</entry>
</row>
<row>
<entry><parameter>expire</parameter></entry>
<entry>
Ç þñá ëÞîçò ôïõ cookie. Áõôü åßíáé Ýíá unix timestamp Ýôóé åßíáé
óå áñéèìü äåõôåñïëÝðôùí áðü ôçí åðï÷Þ (epoch). Ìå Üëëá ëüãéá, åßíáé ðéèáíü
üôé èá èÝóåôå áõôü ìå ôç óõíÜñôçóç <function>time</function>
óõí ôïí áñéèìü ôùí äåõôåñïëÝðôùí ðñéí áðü ôç óôéãìÞ ðïõ èÝëåôå íá ëÞîåé. ¹
ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí <function>mktime</function>.
</entry>
<entry>
Ç <literal>time()+60*60*24*30</literal> èá ïñßóåé ôï cookie íá
ëÞîåé óå 30 ìÝñåò. Áí äåí ôåèåß, ôï cookie èá ëÞîåé óôï ôÝëïò ôïõ
session (üôáí êëåßóåé ï browser).
</entry>
</row>
<row>
<entry><parameter>path</parameter></entry>
<entry>
Ôï path óôïí server óôï ïðïßï èá åßíáé äéáèÝóéìï ôï cookie.
</entry>
<entry>
Áí ôåèåß óôï <literal>'/'</literal>, ôï cookie èá åßíáé äéáèÝóéìï ìÝóá
óå ïëüêëçñï ôï <parameter>domain</parameter>. Áí ôåèåß óôï
<literal>'/foo/'</literal>, ôï cookie èá åßíáé äéáèÝóéìï ìüíï
ìÝóá óôïí êáôÜëïãï <literal>/foo/</literal> êáé óå üëïõò ôïõò
õðï-êáôáëüãïõò üðùò ïé <literal>/foo/bar/</literal> ôïõ
<parameter>domain</parameter>. Ç ðñïêáèïñéóìÝíç ôéìÞ åßíáé ôï
ôñÝ÷ïí directory óôï ïðïßï èÝôåôáé ôï cookie.
</entry>
</row>
<row>
<entry><parameter>domain</parameter></entry>
<entry>
Ôï domain óôï ïðïßï ôï cookie åßíáé äéáèÝóéìï.
</entry>
<entry>
Ãéá íá åßíáé ôï cookie äéáèÝóéìï óå üëá ôá subdomains ôïõ example.com
èá ðñÝðåé íá ôï èÝóåôå óôï <literal>'.example.com'</literal>. Ç
<literal>.</literal> äåí áðáéôåßôáé áëëÜ ôï êÜíåé óõìâáôü ìå
ðåñéóóüôåñïõò browsers. ÈÝôïíôáò ôï óôï <literal>www.example.com</literal>
èá êÜíåé ôï cookie äéáèÝóéìï ìüíï óôï <literal>www</literal>
subdomain. Áíáöåñèåßôå óôï tail matching óôï
<ulink url="&spec.cookies;">spec</ulink> ãéá ëåðôïìÝñåéåò.
</entry>
</row>
<row>
<entry><parameter>secure</parameter></entry>
<entry>
Äåß÷íåé üôé ôï cookie ìðïñåß ìüíï íá ìåôáäùèåß ìå
secure HTTPS óýíäåóç. ¼ôáí ôßèåôáé óôï <literal>1</literal>, ôï
cookie èá äçìéïõñãçèåß ìüíï áí õðÜñ÷åé ìéá áóöáëÞò óýíäåóç. Ôï ðñïêáèïñéóìÝíï
åßíáé ôï <literal>0</literal>.
</entry>
<entry>
<literal>0</literal> Þ <literal>1</literal>
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
<para>
Áöïý Ý÷ïõí óôáëåß ôá cookies, ìðïñïýí íá ðñïóðåëáóôïýí êáôÜ ôç öüñôùóç ôçò åðüìåíçò óåëßäáò
ìå ôïí ðßíáêá (array) <link linkend="reserved.variables.cookies">$_COOKIE</link> Þ
<varname>$HTTP_COOKIE_VARS</varname>. Óçìåéþóôå üôé ïé
<link linkend="language.variables.superglobals">autoglobals</link>
üðùò ïé <varname>$_COOKIE</varname> åßíáé äéáèÝóéìåò áðü ôçí PHP
<ulink url="&url.php.release4.1.0;">4.1.0</ulink>.
Ç <varname>$HTTP_COOKIE_VARS</varname> õðÜñ÷åé áðü ôçí PHP 3. Ïé ôéìÝò ôùí cookies
õðÜñ÷ïõí åðßóçò êáé óôçí <link linkend="reserved.variables.request">
$_REQUEST</link>.
</para>
<note>
<para>
Áí ç íôéñåêôßâá ôçò PHP <link linkend="ini.register-globals">register_globals</link>
ôåèåß óôï <literal>on</literal> ôüôå ïé ôéìÝò ôùí cookies èá ãßíïõí åðßóçò
ìåôáâëçôÝò. Óôá ðáñáäåßãìáôá ìáò ðáñáêÜôù, ç <varname>$TextCookie</varname> èá
õðÜñîåé. Óõíéóôïýìå íá ÷ñçóéìïðïéåßôå ôçí <varname>$_COOKIE</varname>.
</para>
</note>
<para>
Óõ÷íÜ ëÜèç:
<itemizedlist>
<listitem>
<simpara>
Ôá cookies äå èá åßíáé ïñáôÜ ìÝ÷ñé ôï åðüìåíï öüñôùìá ôçò óåëßäáò ãéá ôçí
ïðïßá ôï cookie èá ðñÝðåé íá åßíáé ïñáôü. Ãéá íá åëÝíîåôå áí Ýíá cookie Ý÷åé ïñéóôåß
ìå åðéôõ÷ßá, åëÝíîôå ôï cookie óôï åðüìåíï öüñôùìá ôçò óåëßäá ðñéí üìùò ôï cookie
ëÞîåé. Ç þñá ëÞîçò ïñßæåôáé äéáìÝóïõ ôçò ðáñáìÝôñïõ <parameter>expire</parameter>.
¸íáò ùñáßïò ôñüðïò ãéá íá êÜíåôå debug óôçí ýðáñîç ôùí cookies åßíáé êáëþíôáò
áðëÜ ôçí <literal>print_r($_COOKIE);</literal>.
</simpara>
</listitem>
<listitem>
<simpara>
Ôá cookies ðñÝðåé íá äéáãñÜöïíôáé ìå ôéò ßäéåò ðáñáìÝôñïõò ìå ôéò ïðïßåò èÝôïíôáé.
Áí ç ôéìÞ ôçò ðáñáìÝôñïõ åßíáé Ýíá êåíü string (""), êáé üëåò ïé Üëëåò ðáñÜìåôñïé
ôáéñéÜæïõí óå êÜðïéá ðñïçãïýìåíç êëÞóç ôçò setcookie, ôüôå ôï cookie ìå ôï êáèïñéóìÝíï
üíïìá èá äéáãñáöåß áðü ôïí áðïìáêñõóìÝíï client.
</simpara>
</listitem>
<listitem>
<simpara>
Ôá ïíüìáôá ôùí cookies ìðïñïýí íá ôåèïýí ùò ïíüìáôá ðéíÜêùí êáé èá åßíáé äéáèÝóéìá óôá
PHP scripts óáò ùò ðßíáêåò áëëÜ îå÷ùñéóôÜ cookies áðïèçêåýïíôáé óôï óýóôçìá
ôùí ÷ñçóôþí. Èåùñåßóôå ôçí <function>explode</function> Þ ôçí
<function>serialize</function> ãéá íá èÝóåôå Ýíá cookie ìå ðïëëáðëÜ ïíüìáôá
êáé ôéìÝò.
</simpara>
</listitem>
</itemizedlist>
</para>
<simpara>
Óôçí PHP 3, ïé ðïëëáðëÝò êëÞóåéò ôçò <function>setcookie</function> óôï ßäéï
script èá åêôåëåóôïýí ìå áíôßèåôç óåéñÜ. Áí ðñïóðáèÞóåôå íá
äéáãñÜøåôå Ýíá cookie ðñéí ðñïóèÝóåôå Üëëï èá ðñÝðåé íá ôïðïèåôÞóåôå
ôçí åéóáãùãÞ ðñïí ôçí äéáãñáöÞ. Óôçí PHP 4, ïé ðïëëáðëÝò êëÞóåéò óôçí
<function>setcookie</function> åêôåëïýíôáé ìå ôç óåéñÜ ðïõ êáëïýíôáé.
</simpara>
<para>
Áêïëïõèïýí ìåñéêÜ ðáñáäåßãìáôá ó÷åôéêÜ ìå ôï ðþò íá óôÝëíåôå cookies:
<example>
<title>ÐáñÜäåéãìá áðïóôïëÞò ìå ôçí <function>setcookie</function></title>
<programlisting role="php">
<![CDATA[
<?php
$value = 'something from somewhere';
setcookie ("TestCookie", $value);
setcookie ("TestCookie", $value,time()+3600); /* expire in 1 hour */
setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".example.com", 1);
?>
]]>
</programlisting>
</example>
</para>
<para>
Óçìåéþóôå üôé ôï ôìÞìá ðïõ ðåñéÝ÷åé ôçí ôéìÞ ôïõ cookie èá ãßíåé áõôüìáôá
urlencoded üôáí óôåßëåôå ôï cookie, êáé üôáí áõôü ðáñáëçöèåß, áðïêùäéêïðïéåßôáé
áõôüìáôá êáé áíôßèåôáé óå ìéá ìåôáâëçôÞ ìå ôï ßäéï üíïìá
ìå ôï üíïìá ôïõ cookie. Ãéá íá äåßôå ôá ðåñéå÷üìåíá áðü ôï äïêéìáóôéêü
cookie ìáò óå Ýíá script, áðëÜ ÷ñçóéìïðïéÞóôå Ýíá áðü ôá ðáñáêÜôù ðáñáäåßãìáôá:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Print an individual cookie
echo $_COOKIE["TestCookie"];
echo $HTTP_COOKIE_VARS["TestCookie"];
// Another way to debug/test is to view all cookies
print_r($_COOKIE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
¼ôáí äéáãñÜöåôå Ýíá cookie ðñÝðåé íá åëÝã÷åôå üôé ç çìåñïìçíßá ëÞîçò
áíÞêåé óôï ðáñåëèüí, êáé ôüôå íá åíåñãïðïéåßôáé ôï ìç÷áíéóìü äéáãñáöÞò óôïí browser óáò.
Áêïëïõèïýí ðáñáäåßãìáôá ó÷åôéêÜ ìå ôïí ðþò íá äéáöñÜøåôå ôá cookies ðïõ óôÜëèçêáí óôïí ðñïçãïýìåíï ðáñÜäåéãìá:
</para>
<para>
<example>
<title>ÐáñÜäåéãìá äéáãñáöÞò ìå ôçí<function>setcookie</function></title>
<programlisting role="php">
<![CDATA[
<?php
// set the expiration date to one hour ago
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".example.com", 1);
?>
]]>
</programlisting>
</example>
</para>
<para>
Ìðïñåßôå åðßóçò íá ïñßóåôå array cookies ÷ñçóéìïðïéþíôáò ìéá óçìåßùóç ðßíáêá (array notation) óôï
üíïìá ôïõ cookie. Áõôü Ý÷åé ùò áðïôÝëåóìá íá ìðïñïýìå íá ïñßóïõìå üóá cookies
èÝëïõìå áñêåß íá Ý÷ïõìå óôïé÷åßá óôïí ðßíáêá, áëëÜ üôáí ôï cookie ëáìâÜíåôáé áðü ôï
script, ïé ôéìÝò ôïðïèåôïýíôáé üëåò óå Ýíáí array ìå ôï üíïìá ôïõ
cookie:
</para>
<para>
<example>
<title>Ç <function>setcookie</function> êáé ïé ðßíáêåò</title>
<programlisting role="php">
<![CDATA[
<?php
// set the cookies
setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
// after the page reloads, print them out
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {
echo "$name : $value <br />\n";
}
}
/* which prints
three : cookiethree
two : cookietwo
one : cookieone
*/
?>
]]>
</programlisting>
</example>
</para>
<note>
<para>
Ãéá ðåñéóóüôåñåò ðëçñïöïñßåò óôá cookies, äåßôå ôï cookie
specification ôçò Netscape's óôï <ulink
url="&spec.cookies;">&spec.cookies;</ulink> êáé ôï
<ulink url="&url.rfc;2965">RFC 2965</ulink>.
</para>
<para>
ºóùò ðáñáôçñÞóåôå üôé ç ðáñÜìåôñïò <parameter>expire</parameter> ðáßñíåé Ýíá
unix timestamp, óå áíôßèåóç ìå ôï date format <literal>Wdy, DD-Mon-YYYY
HH:MM:SS GMT</literal>, áõôü óõìâáßíåé åðåéäÞ ç PHP åêôåëåß áõôÞ ôç ìåôáôñïðÞ
åóùôåñéêÜ.
</para>
</note>
<note>
<simpara>
Ï Microsoft Internet Explorer 4 ìå ôï Service Pack 1 äåí ÷åéñßæåôáé
óùóôÜ ôá cookies óôá ïðïßá Ý÷åé ïñéóôåß ç
ðáñÜìåôñïò path.
</simpara>
<simpara>
Ïé Netscape Communicator 4.05 êáé Microsoft Internet Explorer 3.x
÷åéñßæïíôáé ôá cookies ìå ìç ïñèü ôñüðï üôáí ôï path êáé ç þñá
äåí Ý÷ïõí ïñéóôåß.
</simpara>
</note>
<para>
Äåßôå åðßóçò ôçí <function>header</function> êáé ôï ôìÞìá ìå ôá
<link linkend="features.cookies">cookies</link>.
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->