0

Linux (redhat) ファイルシステムにたくさんの php ファイルがあります。ファイルの大部分は、データベースのやり取りを抽象化する関数を使用しているため、問題ないように見えますが、抽象化レイヤーの代わりにインライン クエリが使用されている場所をいくつか見つけました。機能

これらのクエリは mysql で実行するように設計されているようですが、Oracle を実行しているため、たとえば、空の値をチェックするときにエラーが発生します。

select name from user where name !=''

Oracle では、このクエリは行を返さないため、次のように変更する必要があります。

select name from user where name !=' ' 

私が今調べたファイルでこれを修正できました。他のファイルでこれが発生する場所を積極的に見つけたいと思います。ただし、チェックする必要がある多くのディレクトリにたくさんの .php ファイルがあります。

='' または != '' などのテキストの出現について、特定のディレクトリの下にあるすべての .php ファイルで検索を実行することは可能ですか?

これは、埋め込みクエリが使用されている /lib/ 内のファイルの 1 つからの実際の例です。

$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一度に1行ずつ操作するため、二重引用符内のアポストロフィを探して例と一致させることはできません.それらは異なる行にあるためです. だから私はただチェックしてい= ''ます。

この-lオプションは、一致する行を出力するのではなく、一致するファイルの名前を出力します。

于 2013-05-30T19:02:38.987 に答える