読者です 読者をやめる 読者になる 読者になる

PHPのショートオープンタグ'<?'を正規表現以外で置き換える

3v4lでもやっぱりディレクティブしてできなかったので、こっちに。。

以下を php -d short_open_tag=1 test.php などで試してください

<?php

$source = <<<'CODE'
<?

$sql = <<<SQL
select * from table_a where id <?
SQL;

CODE;

$tokens = token_get_all($source);

$new_source = '';
foreach ($tokens as $token) {
    if (is_array($token) && $token[0] === T_OPEN_TAG) {
        $new_source .= '<?php';
    } else {
        $new_source .= is_array($token) ? $token[1]: $token;
    }
}

var_dump($new_source);

なんで未だにPHPParserつかってないのかふしぎ☆