1
0
mirror of https://github.com/php/doc-tr.git synced 2026-04-29 01:43:10 +02:00
Files
2022-11-17 16:41:32 +03:00

234 lines
7.1 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 0bfb0eb957e0468912af86bba09fae588010c1df Maintainer: nilgun Status: ready -->
<refentry xml:id="function.flock" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>flock</refname>
<refpurpose>Öneri niteliğinde taşınabilir dosya kilitleme</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>flock</methodname>
<methodparam><type>resource</type><parameter>akım</parameter></methodparam>
<methodparam><type>int</type><parameter>işlem</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">engellensin</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
<function>flock</function> işlevi, sanal olarak her platformda (çoğu Unix
türevi yanında Windows da dahil) kullanılabilen basit bir okuma/yazma
modeli oluşturmanızı mümkün kılar.
</para>
<para>
Kilit, <function>fclose</function> işlevinden başka
<parameter>akım</parameter> çöp toplayıcıyla toplanırken de serbest
bırakılır.
</para>
<para>
PHP, tavsiye niteliğinde dosyaların tamamını kilitlemenin taşınabilir bir
türünü destekler (yani, dosyalara erişen tüm programların dosyaları
kilitlerken aynı yöntemi kullanmaları zorunludur, aksi takdirde
kullandıkları yöntem çalışmayacaktır). Öntanımlı olarak, bu işlev istenen
kilit alınıncaya kadar bekler. Bu durum aşağıda açıklanan
<constant>LOCK_NB</constant> seçeneği ile (Windows dışındaki platformlarda)
değiştirilebilir.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>akım</parameter></term>
<listitem>
&fs.file.pointer;
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>işlem</parameter></term>
<listitem>
<para>
<parameter>işlem</parameter> şunlardan biri olabilir:
<itemizedlist>
<listitem>
<simpara>
Paylaşımlı bir kilit (okuyucu) edinmek için
<constant>LOCK_SH</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Ayrıcalıklı bir kilit (yazıcı) edinmek için
<constant>LOCK_EX</constant>.
</simpara>
</listitem>
<listitem>
<simpara>
Bir kilidi (paylaşımlı veya ayrıcalıklı) serbest bırakmak için
<constant>LOCK_UN</constant>.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
Kilitleme sırasında işlevin engelleme yapmasını istemiyorsanız
yukarıdaki işlemlerden birine bir bit maskesi olarak
<constant>LOCK_NB</constant> eklemek mümkündür (Windows'ta
desteklenmez).
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>engellesin</parameter></term>
<listitem>
<para>
Kilidin engellemesi için isteğe bağlı üçüncü bağımsız değişkene 1 atanır
(EWOULDBLOCK errno kuralı).
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>- <function>flock</function> örneği</title>
<programlisting role="php">
<![CDATA[
<?php
$dt = fopen("/tmp/lock.txt", "w");
if (flock($dt, LOCK_EX)) { // ayrıcalıklı bir kilit elde edelim
ftruncate($fp, 0); // dosyayı kırp
fwrite($dt, "Buraya bir şeyler yazalım\n");
fflush($dt); // kilidi bırakmadan önce çıkışı temizleyelim
flock($dt, LOCK_UN); // kilidi serbest bırakalım
} else {
echo "Kilit edinilemedi!";
}
fclose($dt);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>- <constant>LOCK_NB</constant> kullanarak <function>flock</function>
</title>
<programlisting role="php">
<![CDATA[
<?php
$fp = fopen('/tmp/lock.txt', 'r+');
/* LOCK_EX işlemi üstünde LOCK_NB'yi etkinleştirelim */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo 'Kilit edinilemedi';
exit(-1);
}
/* ... */
fclose($fp);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
<function>flock</function> işlevi Windows altında zorunlu olarak kilitler.
<function>flock</function>, Windows'ta tavsiye niteliğinde kilitleme yerine
zorunlu kilitlemeyi kullanır. Zorunlu kilitleme, Linux ve System V tabanlı
işletim sistemlerinde, fcntl() sistem çağrısı tarafından desteklenen olağan
mekanizma yoluyla desteklenir: yani, söz konusu dosya setgid izin bitine
sahipse ve grup yürütme biti temizlenmişse. Linux'ta, bunun çalışması için
dosya sisteminin de mand seçeneğiyle bağlanması gerekecektir.
</para>
</note>
<note>
<para>
<function>flock</function> işlevi bir dosya tanıtıcısı gerektirdiğinden
bir dosyayı yazmak amacıyla açarken (<function>fopen</function> işlevinde
"w" veya "w+" bağımsız değişkenleri ile) içeriğini silebilmek için dosyaya
başkalarının erişimini engellemeniz, yani özel bir kilit dosyası
kullanmanız gerekir.
</para>
</note>
<note>
<para>
Yalnızca yerel dosyalar için <function>fopen</function> tarafından
döndürülen dosya göstericilerinde veya
<function>streamWrapper::stream_lock</function> yöntemini uygulayan
kullanıcı alanı akımların dosya göstericilerinde kullanılabilir.
</para>
</note>
<warning>
<para>
Ardıl kodda <parameter>akım</parameter> bağımsız değişkenine başka bir değer
atanması kilidin serbest kalmasına sebep olur.
</para>
</warning>
<warning>
<para>
Bazı işletim sistemlerinde <function>flock</function> işlevi süreç
seviyesinde gerçeklenmiştir. ISAPI gibi çok evreli bir API
kullanıldığında, dosyaları aynı sunucu örneğinin paralel evrelerinde
çalışan diğer PHP betiklerine karşı <function>flock</function> üzerinden
korumak mümkün olmayabilir!
</para>
<para>
<function>flock</function> işlevi, <literal>FAT</literal> ve türevleri
gibi artık antika olmuş dosya sistemlerinde desteklenmez ve bu ortamlarda
daima &false; döndürür.
</para>
</warning>
<note>
<para>
Windows'ta, kilitleme süreci dosyayı ikinci kez açarsa, kilit kaldırılana
kadar ikinci tanıtıcı üzerinden dosyaya erişemez.
</para>
</note>
</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:"~/.phpdoc/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
-->