データベース レコードのコンテンツを要求/インクルードしたいのですが、要求/インクルードはファイルしか受け付けません。これはキャッシングに関連しているため、ファイルに何も書き込みたくありません (衝突など)。それをかわす方法は?
4 に答える
データベースから PHP コードを取得していますか? もしそうなら、あなたはおそらくそれを間違っています。理想的には、コードではなく、データベース内にデータのみを保存する必要があります。
データベースから PHP 構造を取得する場合は、serialize()
'd バージョン (またはjson_encode()
'd) を使用することを検討してください。
あなたが達成しようとしていることの正確な目的を見逃している可能性があります。私の答えが間違っている場合はお知らせください。
eval
何をするにしても、本当に必要でない限り、頼らないでください。それでも、しないでください:)
他の人がカバーeval()
していて、これは悪い考えであるという事実があるので、この「コンテンツ」をファイルに書き込むというトピックに触れます。を使用しtempnam
ます。これにより、0600 パーミッションを持つ、作成されたばかりの一意のファイル名が表示されます。次に、それを開いてコンテンツを書き込み、閉じてから、require/include を実行できます。tempnam
man ページの例 #1 を参照してください。
tempnam
の戻り値がfalse でないことを確認してください。unlink
完了後にファイルを確認してください。
コードの場合は、を使用する必要がありますが、eval()
関連する多くのアンチパターンがありますeval()
マニュアルには次のように書かれています。
注意 eval() 言語構造は、任意の PHP コードを実行できるため、非常に危険です。したがって、その使用はお勧めできません。この構文を使用する以外に選択肢がないことを慎重に確認した場合は、ユーザーが提供したデータを事前に適切に検証せずに渡さないように特に注意してください。