mirror of
https://github.com/php/doc-tr.git
synced 2026-03-23 23:02:09 +01:00
381 lines
14 KiB
XML
381 lines
14 KiB
XML
<?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 "?>" ya da "?>\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? <?xml etiketlerinde sorun
|
||
çıkarıyor!
|
||
</para>
|
||
</question>
|
||
<answer>
|
||
<para>
|
||
<?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><?php echo
|
||
'<?xml'; ?></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
|
||
-->
|