Am 10.05.2013 01:52, schrieb David Beveridge:
> [egreshko@meimei try]$ find /tmp/try -type f -name \*.php -exec
grep -l -i -n -G "<?$" '{}' \;
> /tmp/try/one.php
>
> The only thing worse than a poorly asked question is a cryptic answer.
>
So you want all the <? but not the <?php, <?xml, <?= in text files?
grep -r "<?" * | grep -v "Binary file" | grep -v
"<\?php" | grep -v
"<\?xml" | grep -v "<\?="
i finally solved it with a php-script itself using a years ago written
PHP-SPL-wrapper for recursive listing of files started in the dir the
php-cli-script is living
relevant is <? followed by space, LF, CR, TAB to catch also files with
windows or OSX line-breaks
you must not list here files containing value="<?=(int)$id?>" because
this
short echo-variant is starting with PHP 5.4 always supported and no longer
in context with "short_open_tag" from php.ini
well, i found 7 files out of some thousand written in the last 10 years :-)
script and 3 test-files below
__________________________________________________________________________________
#!/usr/bin/php
<?php
if(PHP_SAPI != 'cli')
{
exit('Forbidden');
}
require('global.inc.php');
$fs = new rh_filesystem();
$liste = $fs->ListFilesRecursive(/**$path*/__DIR__, /**$details*/false,
/**$excludes*/array());
foreach($liste as $file)
{
if($file != __FILE__ && strtolower(pathinfo($file, PATHINFO_EXTENSION)) ==
'php' && is_readable($file))
{
$content = file_get_contents($file);
if(strpos($content, '<? ') !== false || strpos($content,
"<?\r") !== false || strpos($content, "<?\n") !== false
|| strpos($content, "<?\t") !== false)
{
echo $file . MY_LE;
flush();
}
}
}
?>
__________________________________________________________________________________
$fs->ListFilesRecursive() is basically this:
$spl_objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
try
{
foreach($spl_objects as $filename=>$spl_object)
{
if(!$spl_object->isDir())
{
if(DIRECTORY_SEPARATOR === "\\")
{
$filename = str_replace(DIRECTORY_SEPARATOR, '/', $filename);
}
if(substr($filename, 0, 2) === './')
{
$filename = substr($filename, 2);
}
if(empty($pattern) || !preg_match($pattern, $filename))
{
if(!$ignore_svn || strpos($filename, '/.svn') === false)
{
$enumerate_list[] = $filename;
}
}
}
}
}
catch(UnexpectedValueException $e)
{
error_log('Directory "' . $path . '" contained a directory we
can not recurse into');
return false;
}
sort($enumerate_list);
__________________________________________________________________________________
[harry@srv-rhsoft:/www]$ cat test-short-open-1.php
<?
echo 'TEST';
?>
__________________________________________________________________________________
[harry@srv-rhsoft:/www]$ cat test-short-open-2.php
<?php
echo 'TEST';
?>
<form action="<? echo "TEST"?>"></form>
__________________________________________________________________________________
[harry@srv-rhsoft:/www]$ cat test-short-open-3.php
<?
echo 'TEST';
?>
<td>
<?
echo 'TEST';
?>
</td>
__________________________________________________________________________________