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 (?>
).
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
php_info();
<?
// 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
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