PHP'de </script> neden bir ayrıştırma hatası göstermiyor?


193

Aşağıdaki PHP kodunu çalıştırıyordum :

<?php 
    </script>
?>

Ayrıştırma hatası olmadı ve çıktı " ?>" idi ( örnek ).

Benzer durumlarda ayrıştırma hatası alıyorum:

<?php 
    </div>
?>

Ayrıştırma hatası: sözdizimi hatası, içinde beklenmeyen '<' ...

Neden <?php </script> ?>aynı hatayı vermiyor?


Sadece merak. Neyi başarmaya çalışıyordunuz veya neyi deniyordunuz?
asprin

8
Aslında durum dün gece farklıydı php kapanış etiketi kaçırdım.Ve bundan sonra bir </script> etiketi vardı ve bunun neden herhangi bir hata olmadığını ama yine de çıktı arzu olarak olmadığını anlamak için 30 dakikadan fazla harcadım .
Irfan

7
Artık bu gezegende yaşamak istemiyorum.
Kzqai

2
PHP bunu insanlara yapar.
xiankai

Yanıtlar:


273

Bunun nedeni , bir PHP kodu bloğunu başlatmanın çeşitli yolları olması gerektiğidir :

  • <? ... ?>(olarak bilinir short_open_tag)

  • <?php ... ?> (standart gerçekten)

  • <script language="php"> ... </script> (tavsiye edilmez)

  • <% ... %> (5.3.0'dan sonra kullanımdan kaldırıldı ve ASP stili etiketi kaldırıldı)

Görünüşe göre, bir PHP bloğunu bir şekilde açabilir ve diğerini kapatabilirsiniz. Bunu bilmiyordum.

Kodunuzda bloğu kullanarak açtınız, <?ancak PHP </script>daha yakın olarak tanıyor . Neler oldu:

<?php       <----- START PHP
</script>   <----- END PHP
?>          <----- JUST GARBAGE IN THE HTML

31
Kullanmanın <script language="php">tavsiye edilmediğini unutmayın .
John Dvorak

4
Kısa not, çünkü short_open_tagdirektifte bir değişiklik olduğunu hatırladım . PHP 5.4 <?=için <?php echoartık kısa gerektirir short_open_tag. <?=Mevcut olan ve bulunmayan sistemler arasında geçiş yapmak beni her zaman hayal kırıklığına uğrattı. php.net/manual/tr/ini.core.php#ini.short-open-tag
Chris

1
@thatmiddleway Resmi belgenin de önerdiğini unutmayın <?php ... ?>: php.net/manual/en/language.basic-syntax.phpmode.php
John Dvorak

37

PHP'de scriptetiketi bir PHP bloğu açmak için kullanabilirsiniz .

Böylece kullanabilirsiniz

<script language="php">
    echo 'hello world';
</script>

Böylece örneğinizde normal açık etiketi, <?phpkapanış etiketi ile karıştırdınız </script>. Ayrıştırıcı, kapanış komut dosyası etiketinden sonraki tüm metnin normal olduğunu varsayar HTML.

HTML'den kaçma bölümünde daha fazla bilgi edinin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.