Menü
Bedava
kayıt
ev  /  bellenim/ Bir php değişkeninin varlığını kontrol edin. Değişken Varlığını Kontrol Etme

php değişkeninin var olup olmadığını kontrol edin. Değişken Varlığını Kontrol Etme

Materyal esas olarak yeni başlayan web programcıları için tasarlanmıştır.

Tanıtım.

Genellikle, kendi kendine yazılmış CMS'ye sahip olan veya acemi web programcıları tarafından yazılmış modülleri olan ve verileri korumak için neyin gerekli olduğunu anlamayan ve genellikle nasıl çalıştıklarını ve bunlarla tam olarak ne yapılması gerektiğini düşünmeden filtreleme işlevlerini kopyalayan müşterilerle görüşüyorum. .

Burada mümkün olduğunca ayrıntılı olarak açıklamaya çalışacağım. Yaygın hatalar verileri filtrelerken PHP betiği ve ver basit ipuçları verileri düzgün bir şekilde nasıl filtreleyebilirim.

İnternette veri filtreleme hakkında çok sayıda makale var, ancak olması gerektiği gibi tam değil ve ayrıntılı örnekler içermiyor.

Bilgilendirme.

Filtreleme. 1 numaralı hata
Sayısal değişkenler için aşağıdaki kontrol kullanılır:
$number = $_GET["input_number"]; if (intval($number)) ( ... SQL sorgusu yürüt... )
neden yol açar SQL enjeksiyonu? Buradaki nokta, kullanıcının bir değişkende belirtebilmesidir. Numara giriniz anlam:
1"+BİRLİK+SEÇ
Bu gibi durumlarda, kontrol başarıyla geçilecektir, çünkü intval işlevi, değişkenin tamsayı değerini alır, yani. 1, ancak değişkenin kendisinde $sayı hiçbir şey değişmedi yani zararlı kod SQL sorgusuna iletilecektir.
Doğru filtreleme:
$number = intval($_GET["input_number"]); if ($number) ( ... SQL sorgusu yürüt... )
Tabii ki koşul değişebilir, örneğin yalnızca belirli bir aralık almanız gerekiyorsa:
if ($number >= 32 AND $number<= 65)

Sayısal değerlere sahip onay kutuları veya çoklu seçim kullanıyorsanız şunu kontrol edin:
$checkbox_arr = array_map("intval", $_POST["onay kutusu"]);
dizi_haritası
Ben de şu şekilde filtrelemeyle karşılaşıyorum:
$number = htmlspecialchars(intval($_GET["input_number"]));
htmlözel karakterler
Veya:
$number = mysql_escape_string(intval($_GET["input_number"]));
mysql_escape_string

Bir gülümsemeden başka bir şey buna sebep olamaz :)

Filtreleme. Hata #2.
Dize değişkenleri için aşağıdaki filtreleme kullanılır:
$input_text =addlashes($_GET["input_text"]);
Addslashes işlevi, spesifikasyondan kaçar. karakterler, ancak veritabanı kodlamasını dikkate almaz ve filtrelemeyi atlamak mümkündür. Bu güvenlik açığını açıklayan yazarın metnini kopyalamayacağım ve sadece Chris Shiflett'e bir bağlantı vereceğim (çeviriyi Runet'te arayabilirsiniz).

mysql_escape_string veya mysql_real_escape_string işlevini kullanın, örnek:
$input_text = mysql_escape_string($_GET["input_text"]);
girmeyi düşünmüyorsanız html etiketleri, o zaman aşağıdaki filtrelemeyi yapmak en iyisidir:
$input_text = strip_tags($_GET["input_text"]); $input_text = htmlözel karakterler($input_text); $input_text = mysql_escape_string($input_text);
strip_tags - html etiketlerini çıkarır.
htmlspecialchars - özel dönüştürür. html varlığındaki karakterler.
SQL enjeksiyonuna ek olarak kendinizi XSS saldırılarından bu şekilde korursunuz.
Html etiketlerine ihtiyacınız varsa, ancak yalnızca kaynak kodunu görüntülemek için, kullanmanız yeterlidir:
$input_text = htmlspecialchars($_GET["input_text"]); $input_text = mysql_escape_string($input_text);

Değişkenin değerinin boş olmaması sizin için önemliyse, trim işlevini kullanın, örneğin:
$input_text = trim($_GET["input_text"]); $input_text = htmlözel karakterler($input_text); $input_text = mysql_escape_string($input_text);

Filtreleme. Hata #3.
Veritabanını aramakla ilgili.
Sayılara göre arama yapmak için ilk hatada açıklanan filtrelemeyi kullanın.
Metne göre arama yapmak için, ikinci hatada açıklanan filtrelemeyi kullanın, ancak çekincelerle.
Kullanıcının mantıksal bir hata yapmasını engellemek için özelden çıkarmanız veya kaçmanız gerekir. SQL karakterleri.
Eklemeden örnek. satır işleme:
$input_text = htmlspecialchars($_GET["input_text"]); // Ara: "%" $input_text = mysql_escape_string($input_text);
Sonuç olarak, şöyle bir sorgu alıyoruz:
... WHERE text_row LIKE "%".$input_text."%" ... // WHERE text_row LIKE "%%%"
Bu, tabandaki yükü önemli ölçüde artıracaktır.
Komut dosyamda, istemediğim karakterleri aramadan kaldıran bir işlev kullanıyorum:
function strip_data($metin) ( $tırnak = dizi ("\x27", "\x22", "\x60", "\t", "\n", "\r", "*", "%", "<", ">", "?", "!"); $goodquotes = dizi ("-", "+", "#"); $repquotes = dizi ("\-", "\+", "\#"); $metin = trim(strip_tags($metin)); $metin = str_replace($tırnaklar, "", $metin); $metin = str_replace($iyiteklifler, $teklifler, $metin); $metin = ereg_replace(" +" , " ", $metin); dönüş $metin; )
Tabii ki, yukarıdaki simgelerin tümü tehlikeli değildir, ancak benim durumumda bunlara gerek yoktur, bu yüzden bir arama yapıyorum ve değiştiriyorum.
Filtreleme kullanımına bir örnek:
$input_text = strip_data($_GET["input_text"]); $input_text = htmlözel karakterler($input_text); $input_text = mysql_escape_string($input_text);
Ayrıca aramadaki karakter sayısına en az 3'ten az olmamak üzere bir sınır koymanızı tavsiye ederim çünkü. veritabanında çok sayıda kaydınız varsa, 1-2 karakter aramak veritabanı üzerindeki yükü önemli ölçüde artıracaktır.
Filtreleme. Hata #4.
Değişken değerler filtrelenmez $_ÇEREZ. Bazı insanlar, bu değişken formdan geçirilemeyeceği için bunun bir güvenlik garantisi olduğunu düşünüyor.
Bu değişken, sitenin çerezlerini düzenleyerek herhangi bir tarayıcı tarafından taklit edilmesi çok kolaydır.
Örneğin, iyi bilinen bir CMS'de kullanılan site şablonunun kontrolü vardı:
if (@is_dir (MAIN_DIR . "/template/" . $_COOKIE["skin"]))( $config["skin"] = $_COOKIE["skin"]; ) $tpl->dir = MAIN_DIR . "/şablon/" . $config["skin"];
Bu durumda değişkenin değerini değiştirebilirsiniz. $_COOKIE["cilt"] ve bunun sonucunda site klasörünün mutlak yolunu göreceğiniz bir hata oluşturun.
Veritabanına kaydetmek için çerezlerin değerini kullanırsanız, yukarıda açıklanan filtrelemelerden birini kullanın, aynısı değişken için de geçerlidir. $_SERVER.
Filtreleme. Hata #5.
Direktif dahil register_globals. Açıksa kapattığınızdan emin olun.
Bazı durumlarda, geçirilmemesi gereken bir değişkenin değerini iletebilirsiniz, örneğin, sitenin grupları varsa, o zaman grup 2 için $group değişkeni boş veya 0'a eşit olmalıdır, ancak sahte olması yeterlidir. kodu ekleyerek formu:

PHP betiğinde değişken $grup komut dosyasında varsayılan bir değerle bildirilmemişse 5'e eşit olacaktır.
Filtreleme. Hata #6.
İndirilen dosyaları kontrol edin.
Aşağıdakileri kontrol edin:
  1. Dosya uzantısı. Uzantıları olan dosyaların yüklenmesini devre dışı bırakmanız önerilir: php, php3, php4, php5, vb.
  2. Dosya, move_uploaded_file sunucusuna yüklendi mi?
  3. Dosya boyutu
muayene 1 numaralı hata.
Bir AJAX isteği için (örneğin: itibarın artması) bir kullanıcı adı veya kimliğin (itibarın artırıldığı) iletildiği, ancak PHP'nin böyle bir kullanıcının varlığını kontrol etmediği durumlarla karşılaştım.
Örneğin:
$user_id = intval($_REQUEST["user_id"]); ... REPLOG'A EKLE SET uid = "($user_id)", artı = "1" ... ... Kullanıcıları GÜNCELLE SET itibarı = itibar+1 WHERE user_id = "($user_id)" ...
Görünüşe göre veritabanında bizim için tamamen yararsız olan bir kayıt oluşturuyoruz.
muayene Hata #2.
Verilerle çeşitli işlemler (ekleme, düzenleme, silme) gerçekleştirirken, kullanıcının bu işleve erişim haklarını kontrol etmeyi ve Ek özellikler(html etiketlerini kullanma veya materyali doğrulama olmadan yayınlama yeteneği).

Uzun bir süre, herhangi bir kullanıcının yönetim mesajını düzenleyebildiği bir forum modülünde benzer bir hatayı düzelttim.

muayene Hata #3.
Çoklu kullanırken php dosyaları basit bir kontrol yapın.
Dosyada index.php(veya başka bir ana dosyaya) diğer php dosyalarını eklemeden önce bu satırı yazın:
define("READFILE", true);
Diğer php dosyalarının başına şunu yazın:
tanımlı ("READFILE")) ( çıkış ("Hata, dosyanın yanlış yolu.
ana sayfaya git."); }
Bu, dosyalara erişimi kısıtlayacaktır.
muayene Hata #4.
Kullanıcılar için karma kullanın. Bu, belirli bir işlevin XSS tarafından çağrılmasını önlemeye yardımcı olacaktır.
Kullanıcılar için bir karma derleme örneği:
$secret_key = md5(strtolower("http://site.ru/" . $üye["isim"] .sha1($parola) .date("Ymd"))); // $secret_key hash'imizdir
Ardından, tüm önemli biçimlerde, girişi kullanıcının mevcut karma değeriyle değiştirin:

Komut dosyası yürütme sırasında şunları kontrol edin:
if ($_POST["secret_key"] !== $secret_key) ( çıkış ("Hata: secret_key!"); )
muayene Hata #5.
SQL hatalarının çıktısını alırken, bilgiye erişim konusunda basit bir kısıtlama yapın. Örneğin, GET değişkeni için parolayı ayarlayın:
if ($_GET["passsql"] == "password") ( ... SQL hata çıktısı... ) else ( ... Sadece hata bilgisi, detay yok... )
Bu, siteyi hacklemesine yardımcı olabilecek bilgisayar korsanı bilgilerinden gizlenecektir.
muayene Hata #5.
Dosya adlarını dışarıdan alarak dosya eklememeye çalışın.
Örneğin:
if (isset($_GET["dosya_adı"])) ( $_GET["dosya_adı"] .php"; içerir)
bir anahtar kullanın

Bir değişken olup olmadığını kontrol etmek istiyorum. Şimdi şöyle bir şey yapıyorum:

Deneyin: NameError dışında myVar: # Bir şeyler yapın.

İstisnasız başka yollar var mı?


2018-05-09 13:10

Yanıtlar:

Yerel bir değişkenin varlığını kontrol etmek için:

Yerellerde () "myVar" varsa: # myVar var.

Global bir değişkenin olup olmadığını kontrol etmek için:

Globals() içindeki "myVar" ise: # myVar var.

Bir nesnenin bir niteliği olup olmadığını kontrol etmek için:

Eğer hasattr(obj, "attr_name"): # obj.attr_name var.


2018-05-09 13:16

Tanımlanmamış veya ayarlanmamış (örtülü veya açık olarak) değişkenleri kullanmak neredeyse her zaman kötüdür. Herhangiçünkü program mantığının gerektiği gibi düşünülmediğini ve tahmin edilemez davranışlara yol açmasının muhtemel olduğunu gösterir.

Sizinkine benzer bir sonraki numara, değişkenin biraz kullanımdan önceki değer:

Deneyin: NameError hariç myVar: myVar = Yok # Artık Python'dan şikayet etmeden myVar'ı kullanmakta özgürsünüz.

Ancak yine de bunun iyi bir fikir olduğunu düşünmüyorum - bence bu durumun meydana gelmemesi için kodunuzu yeniden düzenlemelisiniz.


2018-05-09 13:19

try/except kullanarak En iyi yol Bir değişkenin varlığını kontrol edin. Ancak, yaptığınız şeyi yapmanın global değişkenleri ayarlamak/test etmekten neredeyse kesinlikle daha iyi bir yolu var.

Örneğin, bir işlev ilk kez çağrıldığında bir modül düzeyinde değişken başlatmak istiyorsanız, aşağıdaki gibi bir kodla daha iyi durumdasınız:

Değişkenim = Yok def InitMyVariable(): my_variable Yok ise global my_variable: my_variable = ...


2018-05-09 13:27

nesneler/modüller için ayrıca

dir(obj) içindeki "var"

Örneğin,

>>> class Bir Şey(nesne): ... pass ... >>> c = Bir Şey() >>> ca = 1 >>> "a" in dir(c) True >>> "b" in dir (c) Yanlış


2017-10-28 18:39

Kolay yol, önce onu başlatmaktır myVar = Yok

Daha sonra:

myVar Hiçbiri değilse: # Bir şeyler yapın


2018-06-04 18:46

Testin user97370'in cevabına benzer bir fonksiyonda kullanılacağını varsayıyorum.Bu cevabı sevmiyorum çünkü global isim alanını kirletiyor. Bunu düzeltmenin bir yolu, bunun yerine bir sınıf kullanmaktır:

Sınıf InitMyVariable(object): my_variable = Yok def __call__(self): self.my_variable ise None: self.my_variable = ...

Kodu karmaşık hale getirdiği ve Singleton programlama modelini doğrular mı gibi soruları açtığı için sevmiyorum. Neyse ki Python bir süreliğine fonksiyonların özniteliklere sahip olmasına izin verdi ve bu da bize şu basit çözümü verdi:

Def InitMyVariable(): InitMyVariable.my_variable Yok ise: InitMyVariable.my_variable = ... InitMyVariable.my_variable = Yok


2018-03-25 20:31

2018-05-09 13:12

Bu tür bir durumla başa çıkmak için genellikle iyi çalışan bir yol, değişkenin var olup olmadığını açıkça kontrol etmek değil, devam etmek ve muhtemelen var olmayan değişkenin ilk kullanımını bir try/hariç NameError içine sarmaktır.

boş işlev(11)

Sorgu dizgimden gelen bir $_GET["myvar"] değişkenim var (veya yok) ve bu değişkenin var olup olmadığını ve ayrıca değerin if ifademdeki bir şeyle eşleşip eşleşmediğini kontrol etmek istiyorum:

Yaptığım ve düşündüğüm şey, bunu yapmanın en iyi yolu değil:

if(isset($_GET["myvar"]) && $_GET["myvar"] == "bir şey") : bir şeyler yap

Bu basit bir durum, ancak bu $myvar değişkenlerinin çoğunu karşılaştırmanız gerektiğini hayal edin.

Yanıtlar

Bu, kabul edilen cevaba benzer, ancak bunun yerine in_array kullanır. Bu durumda boş() kullanmayı tercih ederim. Ayrıca PHP 5.4.0+ sürümünde bulunan yeni dize dizisi bildirimini kullanmanızı öneririm.

$izin verildi = ["bir şey", "hiçbir şey"]; if(!empty($_GET["varlığım"]) && in_array($_GET["varlığım"],$izin verildi))(..)

İşte aynı anda birden fazla değeri kontrol etmek için bir fonksiyon.

$diziKeys = array_keys($_GET); $izin verildi = ["bir şey", "hiçbir şey"]; function checkGet($arrKeys,$allowed) ( foreach($arrKeys as $key) ( if(in_array($_GET[$key],$allowed)) ( $values[$key]; ) ) return $values; )

hepsini kendim kullanıyorum kullanışlı özellik dış(), hangi otomatik olarak değişkenleri bildirir.

$element1 = exst($dizi["anahtar1"]); $val2 = exst($_POST["anahtar2"], "değersiz"); /** * İşlev exst() - Değişkenin ayarlanıp ayarlanmadığını kontrol eder * (kodunuzun herhangi bir yerine kopyala/yapıştır) * * Değişken ayarlanmış ve boş değilse değişkeni döndürür (dönüşüm yok) * Değişken varsa ayarlanmamış veya boş değil, $varsayılan değeri döndürür * * @param karışık $var * @param karışık $varsayılan * * @dönüş karışık */ işlev exst(& $var, $varsayılan = "") ( $t = "" ; if (!isset($var) || !$var) ( if (isset($default) && $default != "") $t = $varsayılan; ) else ( $t = $var; ) if (is_string ($t)) $t = kırp($t); dönüş $t; )

Peki, sadece if($_GET["myvar"] == "something") ile kurtulabilirsiniz, çünkü bu koşul değişkenin de var olduğunu varsayar. Değilse, ifade ayrıca false olarak değerlendirilir.

Yukarıdaki gibi koşullu olarak yapmanın uygun olduğunu düşünüyorum. Gerçekten zararı yok.

Sorum şu, değişkeni iki kez bildirmeden bunu yapmanın bir yolu var mı?

Hayır, bunu iki kontrol yapmadan doğru şekilde yapmanın bir yolu yok. Ben de ondan nefret ediyorum.

Bunu aşmanın bir yolu, ilgili tüm GET değişkenlerini tek bir merkezi noktada belirli bir türdeki bir diziye veya nesneye aktarmak (çoğu MVC bunu otomatik olarak yapar) ve daha sonra ihtiyaç duyulan tüm özellikleri ayarlamaktır. (Sorgu değişkenlerine kod aracılığıyla erişmek yerine.)

If (isset($_GET["myvar"]) == "bir şey")

Mellowsoon ve Pekka sayesinde burada biraz araştırma yaptım ve şunu buldum:

  • Kullanmadan önce (önerildiği gibi) her bir değişkeni (eğer öyleyse) kontrol edin ve boş olarak bildirin:
!isset($_GET["benimvar"]) ? $_GET["myvar"] = 0:0;

* tamam, basit ama harika çalışıyor, bu satırdan sonra değişkeni her yerde kullanmaya başlayabilirsiniz.

  • Tüm durumlar için bir dizi kullanma:
$myvars = dizi("var1", "var2", "var3"); foreach($vars as $anahtar) !isset($_GET[$anahtar]) ? $_GET[$anahtar] =0:0;

* bundan sonra değişkenlerinizi kullanabilirsiniz (var1, var2, var3 ... vb.)

Not: Bir JSON nesnesini alan bir işlev daha iyi olmalıdır (veya patlama/patlama için basit bir sınırlandırılmış dize);

Daha iyi yaklaşımlar açığız :)

GÜNCELLEME:

$_GET yerine $_REQUEST kullanın, bu şekilde $_GET ve $_POST değişkenlerini kapsarsınız.

İsset($_REQUEST[$anahtar]) ? $_REQUEST[$anahtar] =0:0;

Oynarken bulduğum çözüm yapmaktır:

If($x=&$_GET["myvar"] == "bir şey") ( // $x ile bir şeyler yapın)

İstem olarak, bu yaklaşımı düşünebilirsiniz:

Gerekli = array("myvar" => "defaultValue1", "foo" => "değer2", "bar" => "değer3", "baz" => "değer4"); $eksik = array_diff($gerekli, array_keys($_GET)); foreach($eksik olarak $anahtar => $varsayılan) ( $_GET[$anahtar] = $varsayılan ; )

Varsayılan değerleri ayarlarsınız ve alınmayan parametreleri varsayılan değere ayarlarsınız :)

Ne yazık ki, bunu yapmanın tek yolu bu. Ancak büyük dizilerle çalışmaya yönelik yaklaşımlar var. Örneğin, şöyle bir şey:

$gerekli = dizi("myvar", "foo", "bar", "baz"); $eksik = array_diff($gerekli, array_keys($_GET));

$eksik değişken artık gerekli olan ancak $_GET dizisinde bulunmayan değerlerin bir listesini içerir. Ziyaretçiye bir mesaj göstermek için $missing dizisini kullanabilirsiniz.

Veya şöyle bir şey kullanabilirsiniz:

$gerekli = dizi("myvar", "foo", "bar", "baz"); $eksik = array_diff($gerekli, array_keys($_GET)); foreach($m eksik) ( $_GET[$m] = null; )

Artık gerekli her öğenin varsayılan olarak bir varsayılan değeri vardır. Artık anahtarın ayarlanmaması konusunda endişelenmeden if($_GET["myvar"] == "something") kullanabilirsiniz.

Yenile

Kodu temizlemenin başka bir yolu, değerin ayarlanıp ayarlanmadığını kontrol eden bir işlev kullanmaktır.

function getValue($key) ( if (!isset($_GET[$key])) ( false döndür; ) return $_GET[$key]; ) if (getValue("myvar") == "bir şey") ( / /Bir şey yap)

neden bunun için bir fonksiyon yaratmıyorsunuz, kontrol etmek istediğiniz değişkeni gerçek bir değişkene dönüştürün, örn.

İşlev _FX($name) ( if (isset($$name)) $$name döndürür; yoksa null döndürür;)

sonra _FX("param") == "123" yaparsınız, sadece bir düşünce

buldum (çok) en iyi kod Bir şeyi kontrol etmek istiyorsanız bunu yapmak için .

[[ $1 = "" ]] ise echo "$1 boş" değilse echo "$1 dolu" fi

Bütün bunlar neden? Bash'de bulunan her şey var, ancak varsayılan olarak boştur, bu nedenle test -z ve test -n size yardımcı olamaz.

[ $(#1) = 0 ] ise echo "$1 boştur" aksi takdirde echo "$1 doldurulur" fi

Verilen değişkenin var olup olmadığını (yani başlatılıp başlatılmadığını) kontrol edebilirsiniz. Bunun için aşağıdaki fonksiyon kullanılır:

isset(değişken);

içindeki değişken ise şu an mevcut değil (daha önce hiçbir yere bir değer atanmamıştı veya işlev tarafından kaldırıldı ayarsız () ), ardından fonksiyon isset () İadeler YANLIŞ , Öte yandan - doğru :

$x = 5;

eğer (isset($x))

Eko ‘< BR >Değişken $ x var, ', “değeri $ x < BR >”;

Ekran şunları gösterecektir:

Değişken $ x var, değeri 5

Programda başlatılmamış bir değişken kullanamayacağımızı hatırlamak önemlidir - bu, yorumlayıcıdan bir uyarı üretecektir. PHP .

Bir değerin değişken olup olmadığını öğrenmek için boş , işlev kullanılır:

boş( değişken);

Değişkenin değeri ise sıfır ,“0”, BOŞ , boş satır (“” ), false, değişken bildirilmedi veya boş dizi , sonra bu işlev döner doğru , Öte yandan - YANLIŞ .

Kontrol etmek tip değişken, işlevler kullanılır:

is_string(değişken);

dır-dir _ int (değişken);

dır-dir _ batmadan yüzmek (değişken);

dır-dir _ boş (değişken);

dır-dir _ dizi (değişken);

dır-dir _ sayısal (değişken); - değişken sayısal ise ( tam sayı , batmadan yüzmek ) veya yalnızca sayıları içeren bir dize.

Bu işlevler geri döner doğru değişken belirtilen türdeyse.

Veri çıkışı

biçimlendirilmemiş çıktı

biçimsiz dizilerin veya değişkenlerin değerlerinin çıktısı şu fonksiyon tarafından gerçekleştirilir:

Eko değişken listesi;

Eko astar;

nerede değişkenler listesi – virgülle ayrılmış çıktı değişkenlerinin adları.

Bir web tarayıcısı ile çalışıyorsak, bu fonksiyon çıktıyı tarayıcının istemci tarafına (penceresine) yönlendirir.

Daha önce de belirtildiği gibi, içine alınmış bir satırda ise ikili alıntı, değişken isimleri vardır, daha sonra bu isimler yerine bunlara karşılık gelen değerler görüntülenir. Ayrıca, böyle bir satırda etiketler varsa HTML (tanımlayıcılar açılı ayraç içine alınır), ardından tarayıcı bunu görüntüler HTML - yorumlandığında olması gerektiği gibi kodlayın HTML -belge:

$yıl = 2012;

$mesaj = " Dilek herkes mutluluk !”;

Eko"

Benim Tebrikler !

”;

Eko" Geldi $yıl yıl !
$mesaj
”;

?>

Seviyenin başlığı ekranda görüntülenecektir. H 3 ve müteakip selamlama, "kelimesiyle mutluluk!" kalın italik olarak basılacaktır:

Tebrikler!

2012 yılı geldi! herkese diliyorum mutluluk!

Dinamik web siteleri bu şekilde oluşturulur.

biçimlendirilmiş çıktı

biçimlendirilmiş çıktı, görüntülenen sayıları farklı sayı sistemlerinde ve ondalık sistemde - farklı biçimlerde ( formatlar ). Biçimlendirilmiş çıktıya benzer Xi ve işlevler tarafından gerçekleştirilir:

baskı (“format”, çıktı listesi);

sprintf (“format”, çıktı listesi);

İlk işlev, biçimlendirilmiş verileri tarayıcı penceresinde görüntüler ve numaralarını döndürür.

İkinci işlev yalnızca çıktı verilerini biçimlendirir, ancak çıktı vermez.

Biçim çıktı değerleri için bir dönüşüm tanımlayıcı dizisidir.

Dönüşüm Tanımlayıcısı her değer için şöyle görünür:

% PlaceholderAlignmentLength.PrecisionType

- Toplama verilen sonuca dönüştürme sonucunu doldurmak için kullanılacak karakterdir. uzunluk (varsayılan - uzay ); başka bir karakterse, önüne tek bir alıntı gelir ( kesme işareti ),

- hizalama - varsayılan olarak - tarafından Sağ çıktı alanının kenarı; eksi varsa ( - ), ardından ayrıldı ,

- Uzunluk – çıktı alanı genişliği - bu değerin çıktısı için ayrılan karakter boşluklarının sayısı. Çıktı değeri, verilen değerden daha az karakter boşluğu içeriyorsa uzunluk , sonra kalan alan doldurulacak boşluklar veya karakterleri doldurun,

- Kesinlik - sayının kesirli kısmındaki ondalık basamak sayısı,

- Tip – çıkış değeri türü:

B ikili ,

itibaren sembol ,

D tüm ondalık sayı sisteminde,

e gerçek üstel biçimde (kayan nokta),

F gerçek sabit nokta formunda,

s astar ,

hakkında tüm sekizli sayı sisteminde,

x tüm onaltılık sayı sisteminde.

Örnek vermek:

php

$ zarp _1 = 6543.21;

$ zarp _2 = 45321.67;

$ dostum _1 = "Balaganov";

$ dostum _2 = "Bükücü";

baskı ("< H 1>Bordro H 1>");

printf("%".-12s%".10.2f ov.", $fam_1, $zarp_1);

Eko "
";

printf("%".-12s%".10.2f ov.", $fam_2, $zarp_2);

Eko "
";

?>

Yer tutucu olarak bir nokta seçildi ( ‘. ) . Soyadı sola hizalı ( - ) bir alan genişliğinde 12 karakterler. Sayılar, bir genişlik alanında sabit nokta biçiminde temsil edilir 10 karakterler ve hassasiyetle 2 ondalık nokta, sağa dayalı.