我对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])
?>
非常感谢你!
答案 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;
}
?>