Last 5.3 release ever available: PHP 5.3.29 - 5.3 now EOL

انتقال از HTML

زمانی که PHP یک فایل را پردازش می‌نماید بدنبال برچسب شروع و پایان می‌گردد تا کد میان آنها را تفسیر کند. تحلیل به این شکل به PHP این امکان را می‌دهد تا تا در تمام انواع اسناد بکار رود زیرا هر چیزی خارج از آن برچسب‌ها نادیده گرفته می‌شود. بیشتر اوقات شما PHP را در داخل فایل‌های HTML خواهید دید همانطور که این مثال نشان داده است.

<p>This is going to be ignored.</p>
<?php echo 'While this is going to be parsed.'?>
<p>This will also be ignored.</p>

شما همچنین می‌توانید از شاختارهای پیشرفته‌تری نیز استفاده کنید:

Example #1 انتقال پیشرفته

<?php
if ($expression) { 
    
?>
    <strong>This is true.</strong>
    <?php 
} else { 
    
?>
    <strong>This is false.</strong>
    <?php 
}
?>
این کد همانطور که انتظار می‌رود عمل خواهد کرد زیرا برچسب پایان PHP ?> را مشاهده می‌نماید و بسادگی هر چه را مشاهده نمود به خروجی می‌فرستد (به جز خط جدید بلافاصله پس از آن جداسازی دستورالعمل‌ها را ببینید ) تا زمانی که به برچسب شروع جدیدی رسد. مثال داده شده در این جا مثال داده شده مصنوعی است اما برای ارسال یک بلوک بزرگ از داده‌ها خروج از حالت PHP بهینه‌تر از ارسال تمام متن از طریق echo() یا print() است.

چهار زوج مختلف برچسب شروع و پایان برای استفاده در PHP وجود دارد. دو تای آنها <?php ?> و <script language="php"> </script>, همیشه موجود هستند. دو تای دیگر برچسب‌های خلاصه شده و برچسب‌های استایل ASP هستند که می‌توان آنها را در فایل تنظیمات php.ini خاموش یا روشن نمود. با وجود مناسب بودن برچسب‌های کوتاه و برچسب‌های شیوه ASP برای بعضی از افراد آنها قابلیت حمل کمتری داشته و عموما توصیه نمی‌شوند.

Note:

همچنین توجه نمایید اگر می‌خواهید PHP را در XML و XHTML قرار دهید شما باید از برچسب‌های <?php ?> برای پیروی از استانداردها استفاده نمایید.

Example #2 برچسب‌های شروع و پایان PHP

1.  <?php echo 'if you want to serve XHTML or XML documents, do like this'?>

2.  <script language="php">
        
echo 'some editors (like FrontPage) don\'t
              like processing instructions'
;
    
</script>

3.  <? echo 'this is the simplest, an SGML processing instruction'?>
    <?= expression ?> This is a shortcut for "<? echo expression ?>"

4.  <% echo 'You may optionally use ASP-style tags'; %>
    <%= $variable; # This is a shortcut for "<% echo . . ." %>

با وجود این که برچسب‌های نشان داده شده در مثال اول و دوم هر دو موجود هستند برچسب استفاده شده در مثال اول معمول‌تر است و استفاده از آن توصیه می‌گردد.

برچسب‌های کوتاه (مثال سوم) تنها زمانی در اختیار شما قرار دارد که از طریق شبه جمله فایل تنظیمات short_open_tag در php.ini فعال شده باشد و یا گزینه --enable-short-tags در PHP بکار رود.

برچسب‌های شیوه ASP (مثال چهار) تنها در صورتی موجود است که از طریق شبه جمله فایل تنظیمات asp_tags در php.iniفعال شده باشد.

Note:

استفاده از برچسب‌های کوتاه در حین تولید کتابخانه‌ها برنامه‌های برای فروش مجدد خودداری گردد. زیرا برچسب‌های کوتاه ممکن است در سرور مقصد پشتیبانی نشده باشند. برای قابلیت حمل کد ارائه شده از برچسب کوتاه استفاده ننمایید.

Note:

در PHP 5.2 و پیش از آن پارسر اجازه نمی‌دهد که برچسب شروع <?php تنها مورد موجود در فایل باشد. این کار در PHP 5.3 ممکن است.

add a note add a note

User Contributed Notes 7 notes

up
72
quickfur at quickfur dot ath dot cx
4 years ago
When the documentation says that the PHP parser ignores everything outside the <?php ... ?> tags, it means literally EVERYTHING. Including things you normally wouldn't consider "valid", such as the following:

<html><body>
<p<?php if ($highlight): ?> class="highlight"<?php endif;?>>This is a paragraph.</p>
</body></html>

Notice how the PHP code is embedded in the middle of an HTML opening tag. The PHP parser doesn't care that it's in the middle of an opening tag, and doesn't require that it be closed. It also doesn't care that after the closing ?> tag is the end of the HTML opening tag. So, if $highlight is true, then the output will be:

<html><body>
<p class="highlight">This is a paragraph.</p>
</body></html>

Otherwise, it will be:

<html><body>
<p>This is a paragraph.</p>
</body></html>

Using this method, you can have HTML tags with optional attributes, depending on some PHP condition. Extremely flexible and useful!
up
18
ravenswd at gmail dot com
5 years ago
One aspect of PHP that you need to be careful of, is that ?> will drop you out of PHP code and into HTML even if it appears inside a // comment. (This does not apply to /* */ comments.) This can lead to unexpected results. For example, take this line:

<?php
  $file_contents 
= '<?php die(); ?>' . "\n";
?>

If you try to remove it by turning it into a comment, you get this:

<?php
//  $file_contents  = '<?php die(); ?>' . "\n";
?>

Which results in ' . "\n"; (and whatever is in the lines following it) to be output to your HTML page.

The cure is to either comment it out using /* */ tags, or re-write the line as:

<?php
  $file_contents 
= '<' . '?php die(); ?' . '>' . "\n";
?>
up
11
mike at clove dot com
3 years ago
It's possible to write code to create php escapes which can be processed later by substituting \x3f for '?' - as in echo "<\x3fphp echo 'foo'; \x3f>";

This is useful for creating a template parser which later is rendered by PHP.
up
4
sgurukrupa at gmail dot com
5 months ago
Although not specifically pointed out in the main text, escaping from HTML also applies to other control statements:

<?php for ($i = 0; $i < 5; ++$i): ?>
Hello, there!
<?php endfor; ?>

When the above code snippet is executed we get the following output:

Hello, there!
Hello, there!
Hello, there!
Hello, there!
up
9
snor_007 at hotmail dot com
4 years ago
Playing around with different open and close tags I discovered you can actually mix different style open/close tags

some examples

<%
//your php code here
?>

or

<script language="php">
//php code here
%>
up
8
david dot jarry at gmail dot com
5 years ago
Shorts tags and ASP tags are unportables and should be avoided.

<script /> tags are a waste of time and simply inefficient in some simple cases :
<body>
  <p style="color: <script language="php"> echo $text_color </script>;">
  (...) VERY long text (...)
  </p>
</body>
To render this example in a basic XHTML editor, you need to "echo()" all the content or break the XML rules.

The solution seems obvious to me : Why not add the shortcut "<?php= ?>" to be used within XML and XHTML documents ?
<?php='example1'?>
<?php=$example2?>
up
2
admin at furutsuzeru dot net
5 years ago
These methods are just messy. Short-opening tags and ASP-styled tags are not always enabled on servers. The <script language="php"></script> alternative is just out there. You should just use the traditional tag opening:

<?php?>

Coding islands, for example:

<?php
$me
'Pyornide';
?>
<?=$me
;?> is happy.
<?php
$me
= strtoupper($me);
?>
<?=$me
;?> is happier.

Lead to something along the lines of messy code. Writing your application like this can just prove to be more of an
inconvenience when it comes to maintenance.

If you have to deal chunks of HTML, then consider having a templating system do the job for you. It is a poor idea to rely on the coding islands method as a template system in any way, and for reasons listed above.
To Top