Başlangıç ​​/ bitiş etiketleri olmadan php?

5 Cevap

Is it possible to have php not to require the begin/end tags (<?php ?>) for some of the files? The code should be interpreted as php by default.

Ben bitiş etiketi dışarı bırakabilirsiniz farkındayım (?>).

5 Cevap

Hayır tercüman ayrıştırmak ve ne değil bilmek için etiketleri gerekiyor.

Eğer komut satırından PHP komut aramak istiyorsanız, size -r anahtarını kullanarak komut dosyası etiketleri bırakabilirsiniz. Özü man php:

   -r code        Run PHP code without using script tags ’<?..?>’

Şimdi aşağıdaki şekilde sizin komut çağırabilirsiniz:

php -r "$(cat foo.php)"

Bu bitiş etiketi kullanmak daha iyidir. Etiketi karşılaşılmasına olduğunu başlayın.

MaoTseTongue belirtildiği gibi, Zend belgelerde yazılıdır:

For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it´ prevents the accidental injection of trailing white space into the response.

Aynı şekilde bir. Php uzantısı olan bir metin dosyası yapmak, ve gibi, bu dosyayı yüklemek için başka, 'gerçek' php dosyası kullanabilirsiniz

Fake PHP file

php_info();

Real PHP file

<?
// file_contents returns a string, which can be processed by eval()
eval(file_get_contents('/path/to/file/'.urldecode($_GET['fakefile'])));
?>

Buna ek olarak, onlar php dosyasını kendisi atıyor (örneğin http://example.com/fakefile.php) gibi web kullanıcı hissettirmek için bazı mod_rewrite hile kullanabilirsiniz

.htaccess file:

RewrieEngine On
RewriteRule ^(.*)$ realfile.php?fakefile=$1 [QSA]

Eğer doğru hatırlıyorum Ancak, sizin işlem biraz daha yavaş olacak ve nasıl eval ed kod kolları $GLOBALS, $_SERVER, {[ile bazı sorunlar vardır (3)]}, $_GET ve diğer değişkenler. Eğer değerlendirildi koduna bu süper küresellerle geçmek için global bir değişken yapmak zorunda kalacaktır.

Örneğin:

<?
global $passed_post = $_POST;
// only by converting $_POST into a global variable can it be understood by eval'ed code. 
eval("global $passed_post;\n print_r($passed_post);");
?>

Sen (<?php ?> olmadan) bir dosya veya veritabanında PHP kodu saklamak ve daha sonra kullanarak etkinleştirebilirsiniz eval(). Kod yavaş gerçekleştirir, dikkat edin. Bir eval() örnek buraya geliyor:

// Data layer (array, database or whatever).
$arr = array("a","b","c");

// Code layer - hint: you can get the code from a file using file_get_contents().
$str = 'foreach($arr as $v) { echo $v . " "; }';

// Shake + Bake
eval($str);

Sonuç: a b c