php - 替换所有旧的<! - ?标签到新的<?php - >

时间:2015-03-09 20:12:26

标签: php regex

我对PHP没有多少经验,但我尝试设计一种简单的方法将旧的不可兼容的php开放标记转换为5.5接受的版本。

convert all <? opening tags to <?php 

我的应用程序有超过2000个php脚本和模块。我编写了这个小代码,以便能够调用递归函数来查找和替换,使用正则表达式将所有旧标记更正为新标记。我的扩展检查逻辑(它试图匹配only.php文件)似乎是一个问题。

有人能指出我做错了什么吗?或者是否有更好的解决方案将旧的PHP文件转换为正确的PHP 5.5标准?

这是我的小replacer.php文件:

#!/usr/bin/php
 <?php

function getItAll($dir) {

$di = new RecursiveDirectoryIterator($dir);

$i=0;

$fileNb = array();

foreach (new RecursiveIteratorIterator($di) as $filename => $file) {

 $fileNb[$i] = $filename;

$i++;

这里我尝试捕获当前浏览目录的文件扩展名

$path_parts = pathinfo($fileNb[$i]);
$ext = $path_parts['extension'];

if($ext == '.php'){

$file = file_get_contents($fileNb[$i], true);
$pattern = '(?=[<]+[?][^<"?"phpa-zA-Z0-9+-.,!@#$%^&<*`?~();:\/\|>"_\\{\]\\[}])\D\W/g';

$replacement = "<?php";

echo preg_replace($pattern, $replacement, $file);
echo "\n Replaced in: ($fileNb[$i]";
}
}
}
echo "\n";
echo "Replacing in $argv[1] directory \n";
getItAll($argv[1])
?>

非常感谢你!

1 个答案:

答案 0 :(得分:0)

使用标记生成器的方法:

#!/usr/bin/php -d short_open_tag=On
<?php
$source = file_get_contents('./tok_testfile.php');

foreach (token_get_all($source) as $token) {
    if (is_array($token))
        echo ($token[0] === T_OPEN_TAG) ? '<?php' : $token[1];
    else
        echo $token;
}
?>