2012-01-06 19 views
3

私は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'などのローカルパスを使用しています。

トップコードをこれに置き換えることにした場合、どのようなホスティング設定が機能しなくなる可能性がありますか?この方法を使用しても何か問題がないかどうかを確認する方法はありません。

+1

あなたは何を達成しようとしていますか?あなたのコードを実行しているPHPインスタンスがallow_url_fopenを有効にしていない場合、それを尊重し、それをバイパスしないようにしてください。これによりコードの操作が妨げられた場合は、必要な構成が設定されるまでコードを無効にするだけです。 – FrozenFire

+0

プラグインはCSSファイルの内容を取得しようとします。それを修正して、新しい単一のCSSファイルを作成します。さまざまなCSSプロパティは、管理パネルから設定されます。また、アクセスされるファイルはすべて、プラグイン自体と同じディレクトリ内にあります。スタイリングはjQueryスライドショーに適用されます。スタイリングがなければ機能しません。 –

+0

HTTP経由でアプリケーションツリーに格納されているファイルを取得しようとしないでください。ローカルで利用できるので、allow_url_fopenは無関係です。 HTTPを使用してファイルの内容を取得すると、オーバーヘッドが大きくなり、プロセス全体がエラーを起こしやすくなります。 – FrozenFire

答えて

2

あなたinclude方法はあまり信頼できます。 file_get_contentsを無効にすることはまれですが、暗黙的に依存しているallow_url_includeはデフォルトではオフになっています。

それはまた非常に安全です。 Webサーバーがハッキングされ、プラグインがロードしているファイルのうちの1つを変更して出力にPHPコードを組み込むと、プラグインがインストールされているすべてのユーザーがそのコードの実行を開始します。それは本当に悪いです。

+0

私はそれについて行くことができる他の方法を知っていますか?本当にこの1人の特定のユーザーと付き合っています。彼のホストは、私がローカルで試してみたら、file_get_contentsがうまくいくと言ったメールに返答しました。 file_get_contentsにローカルパスを設定すると、(MacのMAMPを使用しているオフラインの設定で)機能しないという意味がどういうものなのか分かりません。 –

+0

私は 'file_get_contents'の前に' curl'メソッドを試してみることをお勧めします。'curl'が有効になっていると、コンテンツをダウンロードするのにかなり効果があります。 (そうでなければ、まったく役に立たないだろう!) – duskwuff