1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-23 23:02:09 +01:00
Files
archived-doc-tr/faq/using.xml
2024-10-29 17:50:54 +03:00

381 lines
14 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: 0a3a57fae02391db80baeba98c9a071dc2760889 Maintainer: nilgun Status: ready -->
<chapter xml:id="faq.using" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>PHP Kullanımı</title>
<titleabbrev>PHP Kullanımı</titleabbrev>
<para>
Bu bölüm, PHP betiklerini yazarken karşılaşabileceğiniz hatalarla ilgili
sıkça sorulan sorulardan oluşturulmuştur.
</para>
<qandaset>
<qandaentry xml:id="faq.using.parameterorder">
<question>
<para>
PHP'deki bağımsız değişkenlerin sırasını hatırlayamadım, rasgele midir?
</para>
</question>
<answer>
<para>
PHP yüzlerce harici kütüphaneyi bir araya getiren bir yapıştırıcıdır,
dolayısıyla bu bazı düzensizliklere yol açar. Böyle düzensizlikler için
basit bir kural uygulanır:
</para>
<para>
<link linkend="book.array">Dizi işlevlerinin</link> bağımsız değişkenleri
"<emphasis>iğne, samanlık</emphasis>" diye dizilirken
<link linkend="book.strings">dizge işlevlerinin</link> bağımsız değişkenleri
tersine "<emphasis>samanlık, iğne</emphasis>" diye dizilir.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.anyform">
<question>
<para>
Bir formdan gelen veriyi işleyebileceğim genel amaçlı bir PHP betiği
yazmak istiyorum. Hangi POST değişkenlerinin kullanılabilir olduğunu
nasıl bileceğim?
</para>
</question>
<answer>
<para>
PHP, <varname>$_POST</varname> süper küreseli gibi bir çok <link
linkend="language.variables.predefined">öntanımlı değişken</link>e
sahiptir. POST yöntemi ile gönderilmiş değerleri bir ilişkisel dizi
olarak <varname>$_POST</varname> üzerinden döngüye sokabilirsiniz.
Örnek olarak, &foreach; ile basit bir döngü oluşturup boş değerleri <function>empty</function> ile tespit edip bütün değerleri basalım:
<informalexample><programlisting role="php">
<![CDATA[
<?php
$empty = $post = array();
foreach ($_POST as $varname => $varvalue) {
if (empty($varvalue)) {
$empty[$varname] = $varvalue;
} else {
$post[$varname] = $varvalue;
}
}
print "<pre>";
if (empty($empty)) {
print "POST ile gönderilen boş değer yok; değerler:\n";
var_dump($post);
} else {
print count($empty) . " boş değer var.\n";
print "Boş olmayanlar:\n"; var_dump($post);
print "Boş olanlar:\n"; var_dump($empty);
exit;
}
?>
]]>
</programlisting></informalexample>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.addslashes">
<question>
<para>
Benim bütün tek tırnakları bir tersbölü ile öncelemem lazım. Bunu bir
düzenli ifade ile nasıl yapabilirim? Ayrıca, " imlerini \" ve \
imlerini de \\ biçimine çevirmek istiyorum.
</para>
</question>
<answer>
<para>
Bunun bir veritabanı için yapıldığını varsayarak, veritabanı ile gelen
önceleme mekanizması kullanılabilir. Örneğin, MySQL ile
<function>mysql_real_escape_string</function>, PostgreSQL ile
<function>pg_escape_string</function> işlevi kullanılır. Ayrıca, PHP kodu
için daha genel amaçlı olarak <function>addslashes</function> ve
<function>stripslashes</function> işlevleri de vardır.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.wrong-order">
<question>
<para>
Aşağıdakini gerçeklerken çıktı yanlış sırada basılıyor:
<informalexample><programlisting role="php">
<![CDATA[
<?php
function işlevim($bağımsız_değişken)
{
echo $bağımsız_değişken + 10;
}
$değişken = 10;
echo "işlevim($değişken) = " . işlevim($değişken);
?>
]]>
</programlisting></informalexample>
Neyi yanlış yapıyorum?
</para>
</question>
<answer>
<para>
İşlevinizin sonucunu bir ifadede kullanmak istiyorsanız (yukarıdaki
örnekte yapıldığı gibi dizgeleri ardarda eklemek gibi), işlevinizin
sonucu <function>return</function> ile döndürmesi
<function>echo</function> ile çıktılamaması gerekir.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.newlines">
<question>
<para>
Hey, satırsonu karakterleri nereye gitti?
<informalexample><programlisting role="php">
<![CDATA[
<pre>
<?php echo "Bu ilk satır olmalı."; ?>
<?php echo "Bu da ilk satırın altındaki satır olmalı."; ?>
</pre>
]]>
</programlisting></informalexample>
</para>
</question>
<answer>
<para>
PHP'de, bir kod bloğu ya "?&gt;" ya da "?&gt;\n" (burada \n satırsonu
karakteridir) ile biter. PHP blokların sonundaki satırsonu
karakterlerini yoksaydığından yukarıdaki örnekte çıktılanan iki satır
aynı satıra basılacaktır. Yani, her bloktan sonra bir satırsonu
karakteri basılmasını istiyorsanız fazladan bir satırsonu karakteri
yerleştirmeniz (bloklar arasına boş bir satır girmek) gerekir.
</para>
<para>
PHP bunu neden yapıyor? Normal HTML biçemlerken bloklardan sonra
satırsonu karakterlerinin bulunması genelde istenmeyen bir durumdur ve
PHP buna göre davranır. Bu böyle yapılmasaydı gereğinden fazla uzun
satırlardan oluşan kodlar yazmak zorunda kalırdınız ve bu da
kodlarınızın okunaklılığını azaltırdı.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.headers-sent">
<question>
<para>
Şöyle bir ileti alıyorum: '<emphasis>Warning: Cannot send session
cookie - headers already sent...</emphasis>' veya '<emphasis>Cannot add
header information - headers already sent...</emphasis>'. (Tercümesi:
'<emphasis>Uyarı: Oturum çerezleri gönderilemiyor - başlıklar zaten
gönderilmişti...</emphasis>' veya '<emphasis>Başlık bilgisi eklenemiyor
- başlıklar zaten gönderilmişti...</emphasis>')
</para>
</question>
<answer>
<para>
Başlıkları çıktı akımına eklemek için <function>header</function>,
<function>setcookie</function> ve <link linkend="ref.session">oturum
işlevleri</link> kullanmak gerekir. Bu işlevleri kullanmadan önce
hiçbir çıktılama (HTML gibi) yapılmamış olması gerekir.
<function>headers_sent</function> işlevi betiğinizin evvelce başlıkları
gönderip göndermediğinize bakacaktır. Ayrıca,
<link linkend="ref.outcontrol">Çıktı Denetim İşlevleri</link>'ne de
bakınız.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.header">
<question>
<para>
İstek başlığındaki bilgiye doğrudan erişmem gerekiyor. Bunu nasıl
yapabilirim?
</para>
</question>
<answer>
<para>
PHP'yi bir Apache modülü olarak çalıştırıyorsanız
<function>getallheaders</function> işlevi istediğiniz şeyi yapacaktır.
Aşağıdaki küçük kod tüm istek başlıklarını gösterecektir:
<informalexample><programlisting role="php">
<![CDATA[
<?php
$başlıklar = getallheaders();
foreach ($başlıklar as $isim => $içerik) {
echo "başlıklar[$isim] = $içerik<br />\n";
}
?>
]]>
</programlisting></informalexample>
</para>
<para>
Ayrıca bakınız:
<function>apache_lookup_uri</function>,
<function>apache_response_headers</function> ve
<function>fsockopen</function>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.authentication">
<question>
<para>
IIS ile kimlik doğrulaması yapmaya çalışırken şunu alıyorum: 'No Input
file specified' (Türkçesi: 'Girdi dosyası belirtilmemiş').
</para>
</question>
<answer>
<para>
IIS'nin güvenlik modeli bu noktada hata verecektir. Bu, IIS altında
çalışan bütün CGI programlarının ortak sorunudur. Bu sorundan
kurtulmanın tek yolu erişim için kimlik doğrulaması yapılacak dizinde
girdi sayfası olarak (PHP ile çözümlenmeyecek) düz bir HTML sayfası
oluşturmaktır. Ya bir META etiketi ile PHP dosyaya yönlendirme
yaparsınız ya da sayfaya PHP dosya için bir bağlantı koyarsınız.
Böylelikle PHP kimlik doğrulamasını doğru olarak yapacaktır.
Bunun diğer NT
HTTP sunucularını etkilememesi gerekir. Daha fazla bilgi için
<link xlink:href="&url.iis;">&url.iis;</link> adresine ve bu kılavuzun
<link linkend="features.http-auth">HTTP Kimlik Doğrulaması</link>
bölümüne bakınız.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.iis.sharing">
<question>
<para>
Windows: IIS kullanarak diğer bilgisayardaki paylaşımlı dosyalara
erişemiyorum.
</para>
</question>
<answer>
<para>
<literal>Internet Information Services</literal> Yöneticisini açın. PHP
dosyanızı bulup özelliklerine gidin. <literal>Dosya Güvenliği</literal>
sekmesine geçip, Anonim erişim ve kimlik doğrulama denetimi bölümlerini
düzenleyin.
</para>
<para>
<literal>Anonim Erişim</literal>'i işaretsiz, <literal>Tümleşik Windows
Kimlik Doğrulaması</literal>'nı işaretli bırakarak veya <literal>Anonim
Erişim</literal>'i işaretleyip erişim izni vermek istediğiniz
kullanıcıyı düzenleyerek sorunu çözümleyebilirsiniz.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.mixml">
<question>
<para>
PHP betiklerinde nasıl XML kullanabilirim? &lt;?xml etiketlerinde sorun
çıkarıyor!
</para>
</question>
<answer>
<para>
&lt;?xml etiketlerini PHP kodu içinde doğrudan kullanmak isterseniz,
PHP'nin kısa etiketlerini, <link
linkend="ini.short-open-tag">short_open_tags</link> yönergesine
<literal>0</literal> değerini atamak suretiyle devre dışı bırakmanız
gerekir. Bu yönergeye <function>ini_set</function> işleviyle değer
atayamazsınız. <link linkend="ini.short-open-tag">
short_open_tags</link> yönergesinin değerinin ne olduğuna bakmaksızın
bu etiketi şöyle de kullanabilirsiniz: <literal>&lt;?php echo
'&lt;?xml'; ?&gt;</literal>. Bu yönergenin öntanımlı değeri
<literal>On</literal>'dur.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.variables">
<question>
<para>
PHP'de kullanabileceğim değişkenlerin tam listesini nerede bulabilirim?
</para>
</question>
<answer>
<para>
Betiğinizde kullanılabilecek öntanımlı değişkenlerin bir kısmını içeren
<link linkend="language.variables.predefined">Öntanımlı
Değişkenler</link> bölümünü okuyunuz. Kullanılabilecek değişkenlerin ve
daha pek çok şeyin tam bir listesini elde etmek için
<function>phpinfo</function> işlevini kullanabilirsiniz. HTML formları,
çerezler ve URL'ler gibi kaynaklardan elde edilen harici değişkenlerle
ilgili senaryoların açıklandığı
<link linkend="language.variables.external">Dış Kaynaklı
Değişkenler</link> bölümünü de okumayı unutmayın.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.freepdf">
<question>
<para>
PDFLib gibi ticari ve özgür olmayan
kütüphaneleri kullanmaksızın PDF dosyaları nasıl üretebilirim?
</para>
</question>
<answer>
<para>
PHP ile yazılmış bir kaç seçenek var:
<link xlink:href="&url.pdf.fpdf;">FPDF</link> ve
<link xlink:href="&url.pdf.tcpdf;">TCPDF</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.shorthandbytes">
<question>
<para>
Bazı PHP yönergeleri büyük bayt değerleri için Kilobayt, Megabayt
birimlerin kısaltmalarını kabul edebiliyor. Bu birimlerin tam listesini
nerede bulabilirim?
</para>
</question>
<answer>
<para>
Kilobaytlar için K, Megabaytlar için M ve
Gigabaytlar için G kullanılabilmektedir. Bunlar harf büyüklüğüne
duyarlıdır. Belirtilmedikleri takdirde değerin bayt sayısını gösterdiği
varsayılır. <literal>1K</literal> bir Kilobayta veya
<literal>1024</literal> bayta, <literal>1M</literal> ise bir Megabayta
veya <literal>1048576</literal> bayta eşittir. Bu birimlerin kısa
gösterimlerini &php.ini; dışında ve <function>ini_set</function>
işlevinde kullanabilirsiniz. Sayısal değerler <type>int</type>
türüne dönüştürülür. Örneğin, <literal>0.5M</literal> değeri
<literal>0</literal> olur.
</para>
<note>
<title>kilobayt mı, kibibayt mı?</title>
<para>
PHP gösteriminde bir kilobayt 1024 bayta eşittir. <acronym>IEC</acronym>
standardı bunu kibibayt olarak adlandırır. Özetle: k veya K = 1024 bayt.
</para>
</note>
</answer>
</qandaentry>
</qandaset>
</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:"~/.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
-->