私はfile_get_contentsを使用してWordpressのプラグインを介してファイルをリクエストしています。他のユーザーに配布しています。PHP include vs file_get_contents
とにかく、私はユーザーが「allow_url_fopenを」有効になっているかどうかをチェックしてやってた元々どのようなので、ストレートのfile_get_contentsのために行く場合。そうでない場合は、ユーザーがcURLを有効にしているかどうかを確認し、そうであればそのルートを使用します。コードは次のとおりです。
if (ini_get('allow_url_fopen') == 1) {
$content = file_get_contents($file);
return $content;
}
elseif (function_exists('curl_version')) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, riva_slider_pro_dir(true) . $file);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($curl);
curl_close($curl);
return $content;
}
ただし、これは私が遭遇した問題です。特定のユーザーホストは、allow_url_fopenを有効にしたまま、file_get_contents関数がファイルにアクセスするのをブロックしました。相対パス、絶対パス、何も動作しません。だから私は別の解決策になって、これが働いていることを見つける:
ob_start();
include $file;
$content = ob_get_contents();
ob_end_clean();
私の質問は、この方法でどのように信頼性の高い、ありますか?これで、私は 'admin/file.css'などのローカルパスを使用しています。
トップコードをこれに置き換えることにした場合、どのようなホスティング設定が機能しなくなる可能性がありますか?この方法を使用しても何か問題がないかどうかを確認する方法はありません。
あなたは何を達成しようとしていますか?あなたのコードを実行しているPHPインスタンスがallow_url_fopenを有効にしていない場合、それを尊重し、それをバイパスしないようにしてください。これによりコードの操作が妨げられた場合は、必要な構成が設定されるまでコードを無効にするだけです。 – FrozenFire
プラグインはCSSファイルの内容を取得しようとします。それを修正して、新しい単一のCSSファイルを作成します。さまざまなCSSプロパティは、管理パネルから設定されます。また、アクセスされるファイルはすべて、プラグイン自体と同じディレクトリ内にあります。スタイリングはjQueryスライドショーに適用されます。スタイリングがなければ機能しません。 –
HTTP経由でアプリケーションツリーに格納されているファイルを取得しようとしないでください。ローカルで利用できるので、allow_url_fopenは無関係です。 HTTPを使用してファイルの内容を取得すると、オーバーヘッドが大きくなり、プロセス全体がエラーを起こしやすくなります。 – FrozenFire