0

我在 linux (redhat) 文件系统上有一堆 php 文件,大多数文件似乎没问题,因为它们使用抽象数据库交互的函数,但是我发现一些使用内联查询而不是抽象层的地方功能

这些查询似乎设计为与 mysql 一起运行,但我们正在运行 Oracle,因此它们在检查空值时会产生故障,例如:

select name from user where name !=''

在 Oracle 中,此查询永远不会返回任何行,我需要像这样更改它:

select name from user where name !=' ' 

我已经能够在我现在浏览的文件中解决这个问题我想主动找到其他文件中出现这种情况的任何地方;但是有很多 .php 文件需要检查许多目录

是否可以在某个目录下的所有 .php 文件中搜索出现的文本,例如 ='' 或 != ''

这是 /lib/ 中使用嵌入式查询的文件之一的真实示例

$rs = $DB->get_recordset_sql (
"SELECT *
    FROM {user}
        WHERE confirmed = 1 AND lastaccess > 0
        AND lastaccess < ? AND deleted = 0
        AND (lastname = '' OR firstname = '' OR email = '')"

我正在考虑寻找嵌套在双引号中的双撇号,沿着这些行 \".*\''.*\" 但我对 linux 使搜索工作并能够迭代多个文件!

\$DB->.*".*''.*"

如果它在单行上但显然不在我给出的示例中:现在正在查看使用 SED 在多 (n) 行上进行此匹配

4

1 回答 1

1
find topdir -type f -name '*.php' -exec grep -l "= *''" {} +

grep一次操作一行,因此它无法通过在双引号内查找撇号来匹配您的示例,因为它们位于不同的行上。所以我只是在检查= ''.

-l选项打印匹配文件的名称,而不是打印匹配行。

于 2013-05-30T19:02:38.987 回答