0

phpタグ()が含まれている場合と含まれていない場合があるファイルがたくさんあります<?php... ?>

まず、phpタグがそれらのファイルに存在するかどうかを確認する必要があります。ここでは問題ありません。私はfopenを使用し、コンテンツを変数に保存し、これを行うためにstrposを使用します。

次に、phpタグがある場合は、それを一時ファイルに保存してからob_start()includeを使用ob_get_clean()し、出力を変数に保存してさらに処理します。

この方法に代わる方法はありますか?それを一時ファイルに保存する必要はなく、代わりに変数から処理するなど、おそらくもっと単純なものですか?

私が考えているもう1つの方法は、fopenとstrposを使用してタグがファイルに存在するかどうかを確認してから、、ob_start()include(元のファイル)を使用ob_get_clean()し、出力を変数に保存してさらに処理することです。

コメントはありますか?

返信やコメントをいただければ幸いです。

ところで、あなたが尋ねるかもしれませんが、私はphpタグを含むかもしれないし含まないかもしれないユーザーからの入力を受け入れるバックエンドに取り組んでいます。

4

2 に答える 2

0

これは私が考えることができる最も簡単な方法です:

<?php
  function fileHasPHPTags($fileName) {
    return strpos(file_get_contents($fileName),"<?php")!==false;
  }
?>
于 2013-02-09T15:44:56.857 に答える
0

あなたの質問は実際に何をしているのかについては言及していないので、信じられないほど危険な「 <?php ?> ブロック内のコードを解析して実行できるようにする」ことを行っていると思います。短い答え:これをしないでください。

わかりました、それは答えではなく、もっと声明だと思います。しかし、その理由は次のとおりです。ユーザーがすべて信頼できるユーザーであり、すべてがあなたの個人的な友達の輪の中にいて、全員が専門家であるとしても、システム全体を台無しにするたった 1 つの失敗が必要です。偶発的な unlink()? 残念ながら、あなたはすべてめちゃくちゃです。いいえ、「そんなこと気にしなくていいよ、みんないいから」なんて言い返しはよくありません。ある時点で誰かが台無しになり、時間がかかればかかるほど、失う可能性が高くなります =)

そうは言っても、それはあなたが何をしたいかによって異なります。すべてをその場で実行したい場合は、入力を一時ファイルに保存し、そのファイルを include() してから、もう一度 unlink() します。全体がスコープ内で実行され、システム上の通常の PHP ファイルであるかのように処理されます。

警告 これは信じられないほど危険です。イントラネット上であっても、サンドボックス化されていないパブリック サーバーでは決してこれを行わないでください。このアプローチは、文字通り、完全な匿名リモート アクセス ソリューションの 警告です。

コードと非コードを取り除いて、それらが互いに何の関係もないかのように別々に処理したい場合は、貪欲でないシンプルな preg_match_all を実行してコード ブロックを見つけ、次に str_replace を実行してそれらを削除します。元の送信されたコンテンツは、コード ブロックの配列と、それらのブロックが削除された入力文字列を提供します。ジョブは完了しました (ただし、コンテンツとコードは互いに独立しているため、その場合、コンテンツとコードに別々の送信プロセスを使用しない理由はわかりません)。

于 2013-02-09T15:39:19.673 に答える