私は、スクリプトのいたるところで php ショート タグを使用した別の人のプロジェクトを編集する予定です。サーバーで短いタグを無効にしています。サーバーで短いタグを有効にするのではなく、すべての短いタグを変換する方が良いと思います。
では、どちらの方法がよいか:
すべての短いタグを変換しますか?
サーバーで短いタグを有効にしますか?
すべての短いタグをバッチで完全なタグに変換するにはどうすればよいですか
変換はhttp://php.net/manual/en/function.token-get-all.phpを使用して記述できます。find&replace とは異なり、これは XML 宣言などには影響しません。変換と ST の有効化: 状況によります。多くのプログラマーはおそらく <?php よりも <?php を好むため、変換すると、コードはより「標準的」になります。ただし、https: //meta.stackoverflow.com/「標準」の重要性は状況によって異なります。
他の人にとって、KoolKabin は、通常、この省略形で使用される php コードの開始タグとしての<?代わりにの使用について言及しています。<?php
<?= $myvar1, $myvar2 ?>
これはこれと同等です:
<? echo $myvar1, $myvar2 ?>
サーバーがphp.iniでshort_open_tag = onで構成されている場合、これはこれと同等です。
<?php echo $myvar1, $myvar2 ?>
個人的には、短いタグしかないページが多くない限り、すべての短いタグを変換します。
token_get_all()の周りにコードを書くのが最も安全な方法ですが (こちらの別の回答で詳しく説明しています)、単純なsedスクリプトで回避できる場合があります。
sed -e 's/<?\([ \t\r]\)/<?php\1/g' \
-e 's/<?$/<?php/g' \
-e 's/<?=\([ \t\r]\)\?/<?php echo \1/g'
コード内の文字列 (特に正規表現) には、<?シーケンスの後に空白文字が続く可能性があることに注意してください。参照: sed の便利な 1 行スクリプト 。sed構文が異なり、コードをサポートしていないものもあることが指摘されてい\tます (ただし、実際のタブ文字を入力することはできます)。
nb sedは Perl 正規表現を使用せず、ここでの他の応答の少なくとも 1 つが無効なsed構文\?を持って?いることに注意してください。(彼はまた、誤って「エコー」を省略して に<?=置き換えます。)<?php
もう少し調べて、以前の回答を「間違いなく変換する」に変更します。以下の PHP-CLI コンバーターを使用すると簡単です。これを実行するシステムが で構成されていることを確認してくださいshort_open_tag=on。
#!php-cli
<?php
global $argv;
$contents = file_get_contents($argv[1]) or die;
$tokens = token_get_all($contents);
$tokens[] = array(0x7E0F7E0F,"",-1);
foreach($tokens as $ix => $token) {
if(is_array($token)) {
list($toktype, $src) = $token;
if ($toktype == T_OPEN_TAG) {
if (($src == "<?") && ($tokens[$ix+1][0] != T_STRING)) {
$src = "<?php";
if ($tokens[$ix+1][0] != T_WHITESPACE) {
$src .= " ";
}
}
}
else if($toktype == T_OPEN_TAG_WITH_ECHO) {
$src = "<?php echo";
if($tokens[$ix+1][0] != T_WHITESPACE) {
$src .= " ";
}
}
print $src;
}
else {
print $token;
}
}
Eclipse PDT を使用して、プロジェクト内のすべてを検索および置換 (CTRL + H) して、すべての短いタグを完全なタグに置き換えることができます。
タグは必ず差し替えます。
コードが Unix/Linux/posix 上にある場合は、次のようになります。
find ${BASEDIR} -iname \*.php -exec rep_sht_tags.sh {} \;
rep_sht_tags.sh には次のようなものが含まれています。
#!/bin/bash
destdir=`dirname $1`
mkdir -p /backup/${destdir}
cp $1 /backup/$1
sed 's/<\?=/<?php /' /backup/$1 >$1
(NB テストされていません)
サーバー構成を変更すると、おそらく高速になります。通常のタグを使用することを好みますが、それは好みの問題であるため、個人的にはわざわざ検索して置換するつもりはありません。XML 宣言と競合する短いタグは、文字列内に宣言を入れることができるため、深刻な問題ではありません。