cvs: phpdoc-el /features commandline.xml file-upload.xml http-auth.xml persistent-connections.xml remote-files.xml

[email protected] ("Dimitris Glezos") Tue, 27 May 2003 02:35:59 -0000
Newsgroups php.doc.el
Message-ID <cvssubbie1054002959@cvsserver>
subbie		Mon May 26 22:35:59 2003 EDT

  Added files:                 
    /phpdoc-el/features	http-auth.xml persistent-connections.xml 
                       	remote-files.xml 

  Modified files:              
    /phpdoc-el/features	commandline.xml file-upload.xml 
  Log:
  added 3 files in features, fixed commandline and file-upload
subbie-20030526223559.txt (text/plain, 25.1 KB)
Index: phpdoc-el/features/commandline.xml
diff -u phpdoc-el/features/commandline.xml:1.2 phpdoc-el/features/commandline.xml:1.3
--- phpdoc-el/features/commandline.xml:1.2	Sun May 25 21:49:31 2003
+++ phpdoc-el/features/commandline.xml	Mon May 26 22:35:58 2003
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="iso-8859-7"?>
-<!-- $Revision: 1.2 $ -->
+<!-- $Revision: 1.3 $ -->
 <!-- EN-Revision: 1.21 Maintainer: subbie Status: ready -->
 <chapter id="features.commandline">
  <title>×ñçóéìïðïéþíôáò ôçí PHP áðü ôçí ãñáììÞ åíôïëþí</title>
  <!-- NEW DOCUMENTATION STARTS -->
- <para>da
+ <para>
   Áðü ôçí Ýêäïóç 4.3.0, ç <literal>PHP</literal> õðïóôçñßæåé Ýíá íÝï ôýðï
   <literal>SAPI</literal> (Server Application Programming Interface)
   ìå üíïìá <literal>CLI</literal> ôï ïðïßï óçìáßíåé <emphasis>Command Line
Index: phpdoc-el/features/file-upload.xml
diff -u phpdoc-el/features/file-upload.xml:1.1 phpdoc-el/features/file-upload.xml:1.2
--- phpdoc-el/features/file-upload.xml:1.1	Mon May 26 20:49:05 2003
+++ phpdoc-el/features/file-upload.xml	Mon May 26 22:35:58 2003
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-7"?>
-<!-- $Revision: 1.1 $ -->
+<!-- $Revision: 1.2 $ -->
 <!-- EN-Revision: 1.59 Maintainer: subbie Status: ready -->
  <chapter id="features.file-upload">
   <title>×åéñßæïíôáò upload áñ÷åßùí</title>

Index: phpdoc-el/features/http-auth.xml
+++ phpdoc-el/features/http-auth.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.34 Maintainer: subbie Status: ready -->
 <chapter id="features.http-auth">
  <title>HTTP áíáãíþñéóç ìå ôçí PHP</title>

  <simpara>
   Ç HTTP áíáãíþñéóç ìå ôçí PHP åßíáé äéáèÝóéìç ìüíï üôáí
   åêôåëåßôáé óáí Apache module êáé Ýôóé äåí åßíáé äéáèÝóéìç óôçí CGI Ýêäïóç.
   Óå Ýíá Apache module PHP script, åßíáé äõíáôüí íá ÷ñçóéìïðïéçèåß ç
   <function>header</function> óõíÜñôçóç ãéá íá óôáëåß Ýíá "Authentication Required"
   ìÞíõìá óôïí browser ôïõ client áíáãêÜæïíôáò ôïí íá ðåôÜîåé Ýíá Username/Password 
   ðáñÜèõñï åéóüäïõ.  ¼ôáí ï ÷ñÞóôçò åéóÜãåé Ýíá username êáé Ýíá password, 
   ôï URL ðïõ ðåñéÝ÷åé ôï PHP script èá êáëåóôåß îáíÜ ìå ôéò
   <link linkend="reserved.variables">ðñïêáèïñéóìÝíåò ìåôáâëçôÝò</link> 
   <varname>PHP_AUTH_USER</varname>, <varname>PHP_AUTH_PW</varname>, 
   êáé <varname>AUTH_TYPE</varname> ïñéóìÝíåò óôï username, password êáé
   ôïí ôýðï ôïõ authentication áíôßóôïé÷á.  ÁõôÝò ïé ðñïêáèïñéóìÝíåò ìåôáâëçôÝò âñßóêïíôáé
   óôïõò <link linkend="reserved.variables.server">$_SERVER</link> êáé
   <varname>$HTTP_SERVER_VARS</varname> ðßíáêåò.  Ìüíï ç "Basic" áíáãíþñéóç
   õðïóôçñßæåôáé. Äåßôå ôçí <function>header</function> óõíÜñôçóç ãéá ðåñéóóüôåñåò
   ðëçñïöïñßåò.
  </simpara>

  <note>
   <title>Óçìåßùóç ãéá ôéò PHP åêäüóåéò</title>
   <para>
    Ïé <link linkend="language.variables.superglobals">Autoglobals</link>, 
    üðùò ç <link linkend="reserved.variables.server">$_SERVER</link>, Ýãéíáí
    äéáèÝóéìåò óôçí PHP Ýêäïóç <ulink url="&url.php.release4.1.0;">4.1.0</ulink>. 
    Ç <varname>$HTTP_SERVER_VARS</varname> åßíáé äéáèÝóéìç áðü ôçí PHP 3.
   </para>
  </note>

  <para>
   ¸íá ðááñÜäåéãìá åíüò êïììÜôéïý åíüò script ôï ïðïßï åðéâÜëëåé client authentication
   óå ìéá óåëßäá áêïëïõèåß:
  </para>
  <para>
   <example>
    <title>ÐáñÜäåéãìá HTTP Authentication</title>
    <programlisting role="php">
<![CDATA[
<?php
  if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
  } else {
    echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
  }
?>
]]>
    </programlisting>
   </example>
  </para>

  <note>
   <title>Óçìåßùóç Óõìâáôüôçôáò</title>
   <para>
    Ðáñáêáëïýìå íá åßóôå ðñïóåêôéêïß üôáí ðñïãñáììáôßæåôå ôéò HTTP header ãñáììÝò óáò. Ãéá íá åããõçèåßôå
    óõìâáôüôçôá ìå üëïõò ôïõò client, ç ëÝîç-êëåéäß "Basic" ðñÝðåé íá ãñÜöåôáé ìå
    êåöáëáßï "B", ôï realm string ðñÝðåé íá åßíáé åóþêëåéóôï óå äéðëÜ (ü÷é ìïíÜ) åéóáãùãéêÜ (quotes),
    êáé áêñéâþò Ýíáò êåíüò ÷áñáêôÞñáò ðñÝðåé íá ðñïçãåßôáé ôïõ <emphasis>401</emphasis> êùäéêïý óôçí
    <emphasis>HTTP/1.0 401</emphasis> header ãñáììÞ.
   </para>
  </note>

  <para>
   Áíôß íá åêôõðþíåôå áðëÜ ôá <varname>PHP_AUTH_USER</varname>
   êáé <varname>PHP_AUTH_PW</varname>, üðùò ãßíåôáé óôï ðáñáðÜíù ðáñÜäåéãìá,
   ìðïñåß íá èÝëåôå íá åëÝãîåôå ôçí åãêõñüôçôá ôïõ username êáé ôïõ password.  
   ºóùò óôÝëíïíôáò ìéá åñþôçóç óå ìéá âÜóç äåäïìÝíùí, Þ áíáæçôþíôáò ôïí
   ÷ñÞóôç óå Ýíá dbm áñ÷åßï.
  </para>

  <para>
   ÐñïóÝîôå ãéá åëáôôùìáôéêïýò Internet Explorer browser åêåß Ýîù.  Öáßíïíôáé
   ðïëý åðéëåêôéêïß ãéá ôç óåéñÜ ôùí header.  Ç áðïóôïëÞ ôïõ
   <emphasis>WWW-Authenticate</emphasis> header ðñéí ôïõ
   <literal>HTTP/1.0 401</literal> header öáßíåôáé íá êÜíåé ôï êüëðï
   ðñïò ôï ðáñþí.
  </para>

  <simpara>
   Áðü ôçí PHP 4.3.0, ãéá íá åìðïäßæåôáé êÜðïéïò íá ãñÜöåé Ýíá script ôï ïðïßï
   áðïêáëýðôåé ôï password ãéá ìéá óåëßäá ç ïðïßá Ý÷åé áíáãíùñéóôåß ìÝóá áðü êÜðïéï
   ðáñáäïóéáêü åîùôåñéêü ìç÷áíéóìü, ïé PHP_AUTH ìåôáâëçôÝò äåí èá
   ïñßæïíôáé áí ôï åîùôåñéêü authentication åßíáé åíåñãïðïéçìÝíï ãéá ôç óõãêåêñéìÝíç
   óåëßäá êáé ôï &safemode; åßíáé åíåñãïðïéçìÝíï.  ¼ðùò êáé íá'÷åé, 
   ôï <varname>REMOTE_USER</varname> ìðïñåß íá ÷ñçóéìïðïéçèåß
   ãéá íá áíáãíùñßóåôå ôïí åîùôåñéêÜ-authenticated ÷ñÞóôç.  ¸ôóé, ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå
   ôï <varname>$_SERVER['REMOTE_USER']</varname>.
  </simpara>

  <note>
   <title>Óçìåßùóç Ñõèìßóåùí</title>
   <para>
    Ç PHP ÷ñçóéìïðïéåß ôçí ðáñïõóßá åíüò <literal>AuthType</literal> directive
    ãéá íá ðñïóäéïñßóåé áí åßíáé åí åíåñãåßá êÜðïéï åîùôåñéêü authentication.
   </para>
  </note>

  <simpara>
   Óçìåéþóôå, ùóôüóï, ðùò ôï ðáñáðÜíù äåí åìðïäßæåé êÜðïéïí ï ïðïßïò
   åëÝã÷åé Ýíá non-authenticated URL áðü ôï íá êëÝâåé êùäéêïýò áðü
   áíáãíùñéóìÝíá URL óôïí ßäéï server.
  </simpara>
  <simpara>
   Ôüóï ï Netscape Navigator üóï êáé ï Internet Explorer èá êáèáñßóïõí ôï cache ôïõ ôïðéêïý browser ãéá Ýíá realm üôáí ëÜâïõí
   ìéá áðÜíôçóç áðü ôïí server ôýðïõ 401. Áõôü ðñáêôéêÜ êÜíåé "log out" Ýíá ÷ñÞóôç,
   áíáãêÜæïíôáò ôïõò íá åðáíá-åéóÜãïõí ôá username êáé password ôïõò. ÊÜðïéïé Üíèñùðïé
   ôï ÷ñçóéìïðïéïýí áõôü ãéá íá êÜíïõí "time out" ôá login, Þ íá ðñïóöÝñïõí êÜðïéï "log-out" êïõìðß.
  </simpara>
  <para>
   <example>
    <title>ÐáñÜäåéãìá ãéá HTTP Authentication áíáãêÜæïíôáò íÝá name/password</title>
    <programlisting role="php">
<![CDATA[
<?php
  function authenticate() {
    header('WWW-Authenticate: Basic realm="Test Authentication System"');
    header('HTTP/1.0 401 Unauthorized');
    echo "You must enter a valid login ID and password to access this resource\n";
    exit;
  }
 
  if (!isset($_SERVER['PHP_AUTH_USER']) ||
      ($_POST['SeenBefore'] == 1 && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
   authenticate();
  } 
  else {
   echo "<p>Welcome: {$_SERVER['PHP_AUTH_USER']}<br>";
   echo "Old: {$_REQUEST['OldAuth']}";
   echo "<form action='{$_SERVER['PHP_SELF']}' METHOD='POST'>\n";
   echo "<input type='hidden' name='SeenBefore' value='1'>\n";
   echo "<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}'>\n";
   echo "<input type='submit' value='Re Authenticate'>\n";
   echo "</form></p>\n";
  }
?>
]]>
    </programlisting>
   </example>
  </para>
  <simpara>
   ÁõôÞ ç óõìðåñéöïñÜ äåí áðáéôåßôáé áðü ôï HTTP Basic authentication
   ðñüôõðï, Ýôóé äåí ðñÝðåé ðïôÝ íá óôçñßæåóôå óå áõôü. ÄïêéìÝò ìå ôï Lynx
   Ýäåéîáí ðùò ôï Lynx äåí êáèáñßæåé ôá ðéóôïðïéçôéêÜ áíáãíþñéóçò
   ìå ìéá áðÜíôçóç ôïõ server ôýðïõ 401, Ýôóé ðáôþíôáò back êáé ìåôÜ forward
   îáíÜ èá áíïßîåé ôçí óýíäåóç ìéá êáé ïé áðáéôÞóåéò áíáãíùñéóôéêþí
   äåí Üëëáîáí. Ï ÷ñÞóôçò ìðïñåß íá ðáôÞóåé ôï
   '_' êïõìðß ãéá íá êáèáñßóåé ôéò ðëçñïöïñßåò áíáãíþñéóçò, ùóôüóï.
  </simpara>
  <simpara>
   Åðßóçò óçìåéþóôå ðùò áõôü äåí ëåéôïõñãåß ìå ôïí Microsoft IIS server êáé
   ôçí CGI Ýêäïóç ôçò PHP ëüãù êÜðïéïõ ðåñéïñéóìïý ôïõ IIS.  Áí ÷ñçóéìïðïéåßôå
   ôï IIS module (ISAPI), ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí <literal>HTTP_AUTHORIZATION 
   </literal> ìåôáâëçôÞ ãéá ðáñÜäåéãìá: <literal>list($user, $pw) = 
   explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
   </literal>
  </simpara>

  <note>
   <para>
    Áí ôï <link linkend="ini.safe-mode">safe mode</link> åßíáé åíåñãïðïéçìÝíï, ôï
    uid ôïõ script ðñïóôßèåôáé óôï <literal>realm</literal> êïììÜôé
    ôïõ <literal>WWW-Authenticate</literal> header.
   </para>
  </note>

 </chapter>

<!-- 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/features/persistent-connections.xml
+++ phpdoc-el/features/persistent-connections.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.21 Maintainer: subbie Status: ready -->
 <chapter id="features.persistent-connections">
  <title>Óõíå÷åßò ÓõíäÝóåéò ÂÜóåùí ÄåäïìÝíùí</title>

  <simpara>
   Persistent connections are SQL links that do not close when the
   execution of your script ends. When a persistent connection is
   requested, PHP checks if there's already an identical persistent
   connection (that remained open from earlier) - and if it exists, it
   uses it. If it does not exist, it creates the link. An 'identical'
   connection is a connection that was opened to the same host, with
   the same username and the same password (where applicable).
  </simpara>
  <note>
   <para>
    There are other extensions that provide persistent connections, such as
    the <link linkend="ref.imap">IMAP extension</link>.
   </para>
  </note>
  <simpara>
   People who aren't thoroughly familiar with the way web servers work
   and distribute the load may mistake persistent connects for what
   they're not. In particular, they do <emphasis>not</emphasis> give
   you an ability to open 'user sessions' on the same SQL link, they
   do <emphasis>not</emphasis> give you an ability to build up a
   transaction efficiently, and they don't do a whole lot of other
   things. In fact, to be extremely clear about the subject,
   persistent connections don't give you <emphasis>any</emphasis>
   functionality that wasn't possible with their non-persistent
   brothers.
  </simpara>
  <simpara>
   Why?
  </simpara> 
  <simpara>
   This has to do with the way web servers work. There are three ways
   in which your web server can utilize PHP to generate web pages.
  </simpara>
  <simpara>
   The first method is to use PHP as a CGI "wrapper". When run this
   way, an instance of the PHP interpreter is created and destroyed
   for every page request (for a PHP page) to your web server.
   Because it is destroyed after every request, any resources that it
   acquires (such as a link to an SQL database server) are closed when
   it is destroyed. In this case, you do not gain anything from trying
   to use persistent connections -- they simply don't persist.
  </simpara>
  <simpara>
   The second, and most popular, method is to run PHP as a module in a
   multiprocess web server, which currently only includes Apache. A
   multiprocess server typically has one process (the parent) which
   coordinates a set of processes (its children) who actually do the
   work of serving up web pages. When each request comes in from a
   client, it is handed off to one of the children that is not already
   serving another client. This means that when the same client makes
   a second request to the server, it may be serviced by a different
   child process than the first time. What a persistent connection
   does for you in this case it make it so each child process only
   needs to connect to your SQL server the first time that it serves a
   page that makes use of such a connection. When another page then
   requires a connection to the SQL server, it can reuse the
   connection that child established earlier.
  </simpara>
  <simpara>
   The last method is to use PHP as a plug-in for a multithreaded web
   server. Currently PHP 4 has support for ISAPI, WSAPI, and NSAPI (on
   Windows), which all allow PHP to be used as a plug-in on multithreaded
   servers like Netscape FastTrack (iPlanet), Microsoft's Internet Information
   Server (IIS), and O'Reilly's WebSite Pro. The behavior is essentially
   the same as for the multiprocess model described before. Note that
   SAPI support is not available in PHP 3.
  </simpara>
  <simpara>
   If persistent connections don't have any added functionality, what
   are they good for?
  </simpara>
  <simpara>
   The answer here is extremely simple -- efficiency. Persistent
   connections are good if the overhead to create a link to your SQL
   server is high. Whether or not this overhead is really high depends
   on many factors. Like, what kind of database it is, whether or not
   it sits on the same computer on which your web server sits, how
   loaded the machine the SQL server sits on is and so forth. The
   bottom line is that if that connection overhead is high, persistent
   connections help you considerably. They cause the child process to
   simply connect only once for its entire lifespan, instead of every
   time it processes a page that requires connecting to the SQL
   server. This means that for every child that opened a persistent
   connection will have its own open persistent connection to the
   server. For example, if you had 20 different child processes that
   ran a script that made a persistent connection to your SQL server,
   you'd have 20 different connections to the SQL server, one from
   each child.
  </simpara>
  <simpara>
   Note, however, that this can have some drawbacks if you are using a
   database with connection limits that are exceeded by persistent
   child connections. If your database has a limit of 16 simultaneous
   connections, and in the course of a busy server session, 17 child
   threads attempt to connect, one will not be able to. If there are
   bugs in your scripts which do not allow the connections to shut
   down (such as infinite loops), the database with only 16 connections
   may be rapidly swamped. Check your database documentation for
   information on handling abandoned or idle connections.
  </simpara>
  <warning>
   <simpara>
    There are a couple of additional caveats to keep in mind when
    using persistent connections. One is that when using table
    locking on a persistent connection, if the script for whatever
    reason cannot release the lock, then subsequent scripts using the
    same connection will block indefinitely and may require that you
    either restart the httpd server or the database server. Another is
    that when using transactions, a transaction block will also carry
    over to the next script which uses that connection if script execution
    ends before the transaction block does. In either case, you can
    use <function>register_shutdown_function</function> to register a
    simple cleanup function to unlock your tables or roll back your
    transactions. Better yet, avoid the problem entirely by not using
    persistent connections in scripts which use table locks or
    transactions (you can still use them elsewhere).
   </simpara>
  </warning>
  <simpara>
   An important summary. Persistent connections were designed to have
   one-to-one mapping to regular connections. That means that you
   should <emphasis>always</emphasis> be able to replace persistent
   connections with non-persistent connections, and it won't change
   the way your script behaves. It <emphasis>may</emphasis> (and
   probably will) change the efficiency of the script, but not its
   behavior!
  </simpara>
  <para>
   See also <function>fbsql_pconnect</function>,
   <function>ibase_pconnect</function>, <function>ifx_pconnect</function>,
   <function>imap_popen</function>, <function>ingres_pconnect</function>,
   <function>msql_pconnect</function>, <function>mssql_pconnect</function>,
   <function>mysql_pconnect</function>, <function>ociplogon</function>,
   <function>odbc_pconnect</function>, <function>ora_plogon</function>,
   <function>pfsockopen</function>, <function>pg_pconnect</function>, and
   <function>sybase_pconnect</function>.
  </para>
 </chapter>

<!-- 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/features/remote-files.xml
+++ phpdoc-el/features/remote-files.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.22 Maintainer: subbie Status: ready -->
 <chapter id="features.remote-files">
  <title>AðïìáêñõóìÝíá áñ÷åßá</title>

  <para>
   ¼óï ôï <parameter>allow_url_fopen</parameter> åßíáé åíåñãïðïéçìÞíï óôï
   &php.ini;, ìðïñåßôå íá ÷ñçóéìïðïéåßôå ôá HTTP êáé FTP URL ìå ôéò ðåñéóóüôåñåò óõíáñôÞóåéò
   ðïõ ðáßñíïõí Ýíá üíïìá áñ÷åßïõ óáí ðáñÜìåôñï.  ÅðéðëÝïí, ôá URL ìðïñïýí íá
   ÷ñçóéìïðïéçèïýí ìå ôéò <function>include</function>,
   <function>include_once</function>, <function>require</function> êáé
   <function>require_once</function> äçëþóåéò.
   Äåßôå ôï <xref linkend="wrappers"/> ãéá ðåñéóóüôåñåò ðëçñïöïñßåò ó÷åôéêÜ ìå ôá ðñùôüêïëëá
   ðïõ õðïóôçñßæïíôáé áðü ôçí &php;.
  </para>
  <note>
   <para>
   Óôçí PHP 4.0.3 êáé ðáëáéüôåñá, ãéá íá ÷ñçóéìïðïéÞóåôå ôáURL wrappers, ÷ñåéáæüôáí
   íá êÜíåôå configure ôç PHP ÷ñçóéìïðïéþíôáò ôçí åðéëïãÞ ôïõ configure
   <option>--enable-url-fopen-wrapper</option>.
   </para>
  </note>
  <para>
   <note>
    <para>
     Ïé Windows åêäüóåéò ôçò <literal>PHP</literal> ðñéí ôçí PHP 4.3
     äåí õðïóôÞñéæáí ðñüóâáóç áðïìáêñõóìÝíùí áñ÷åßùí ãéá ôéò áêüëïõèåò óõíáñôÞóåéò:
     <function>include</function>, <function>include_once</function>,
     <function>require</function>, <function>require_once</function>,
     êáé ôéò imagecreatefromXXX óõíáñôÞóåéò óôçí <xref linkend="ref.image"/>
     åðÝêôáóç.
    </para>
   </note>
  </para>
  <para>
   Ãéá ðáñÜäåéãìá, ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôï åîÞò ãéá íá áíïßîåôå Ýíá áñ÷åßï óå Ýíá remote web server,
   íá äéáâÜóåôå ôá äåäïìÝíá ðïõ èÝëåôå, êáé ìåôÜ íá ÷ñçóéìïðïéÞóåôå ôá äåäïìÝíá óå ìéá
   åñþôçóç âÜóçò äåäïìÝíùí, Þ áðëÜ íá êÜíåôå output óå Ýíá óôõë ðïõ ôáéñéÜæåé ôçí õðüëïéðç
   éóôïóåëßäá óáò.
  </para>
  <para>
   <example>
    <title>Ðáßñíïíôáò ôïí ôßôëï ìéáò áðïìáêñõóìÝíçò óåëßäáò</title>
    <programlisting role="php">
<![CDATA[
<?php
$file = fopen ("http://www.example.com/", "r");
if (!$file) {
    echo "<p>Unable to open remote file.\n";
    exit;
}
while (!feof ($file)) {
    $line = fgets ($file, 1024);
    /* This only works if the title and its tags are on one line */
    if (eregi ("<title>(.*)</title>", $line, $out)) {
        $title = $out[1];
        break;
    }
}
fclose($file);
?>
]]>
    </programlisting>
   </example>
  </para>
  <para>
   Ìðïñåßôå åðßóçò íá ãñÜøåôå áñ÷åßá óå Ýíá FTP server (äåäïìÝíïõ ôïõ üôé
   Ý÷åôå óõíäåèåß óáí Ýíáò ÷ñÞóôçò ìå ôá óùóôÜ äéêáéþìáôá ðñüóâáóçò). Ìðïñåßôå
   ìüíï íá äçìéïõñãÞóåôå íÝá áñ÷åßá ìå áõôÞ ôç ìÝèïäï, áí ðñïóðáèÞóåôå íá êÜíåôå overwrite
   Ýíá áñ÷åßï ðïõ õðÜñ÷åé Þäç, ç êëÞóç ôçò <function>fopen</function> èá
   áðïôý÷åé.
  </para>
  <para>
   Ãéá íá óõíäåèåßôå óáí Ýíáò ÷ñÞóôçò Üëëïò áðü ôïí 'anonymous', ðñÝðåé íá ïñßóåôå
   ôï username (êáé ðéèáíþò ôï password) ìÝóá óôï URL, êÜðùò Ýôóé:
   'ftp://user:[email protected]/path/to/file'. (Ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå ôçí
   ßäéá ìïñöÞ óýíôáîçò ãéá íá ðñïóðåëÜóåôå áñ÷åßá ìÝóù ôïõ HTTP üôáí áðáéôïýí âáóéêÞ
   áíáãíþñéóç.)
  </para>
  <para>
   <example>
    <title>ÁðïèÞêåõóç äåäïìÝíùí óå Ýíá áðïìáêñõóìÝíï server</title>
    <programlisting role="php">
<![CDATA[
<?php
$file = fopen ("ftp://ftp.example.com/incoming/outputfile", "w");
if (!$file) {
    echo "<p>Unable to open remote file for writing.\n";
    exit;
}
/* Write the data here. */
fputs ($file, $_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($file);
?>
]]>  
    </programlisting>
   </example>
  </para>
  <para>
   <note>
    <para>
     Ìðïñåß íá ðÞñáôå ôçí éäÝá áðü ôï ðáñáðÜíù ðáñÜäåéãìá ðùò ìðïñåßôå íá ÷ñçóéìïðïéÞóåôå
     áõôÞ ôçí ôå÷íéêÞ ãéá íá ãñÜøåôå óå Ýíá áðïìáêñõóìÝíï logfile. Äõóôõ÷þò
     áõôü äåí èá äïõëÝøåé åðåéäÞ ç êëÞóç ôçò <function>fopen</function> èá
     áðïôý÷åé áí ôï áðïìáêñõóìÝíï áñ÷åßï õðÜñ÷åé Þäç. Ãéá íá êÜíåôå êáôáíåìçìÝíï logging
     Ýôóé, ðñÝðåé íá ñßîåôå ìéá ìáôéÜ óôçí <function>syslog</function>.
    </para> 
   </note>
  </para>

 </chapter>

<!-- 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
-->