2012-01-06 4 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; 
} 

Однако, вот проблема, с которой я столкнулся. Определенный пользовательский хост заблокировал функцию file_get_contents от доступа к файлам в целом, оставив allow_url_fopen включенным. Ничто не будет работать, относительные пути, абсолютные пути, ничего. Поэтому я обратился к другому решению, и выяснить, что это сработало:

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 (что вы неявно в зависимости от) отключено по умолчанию.

Это также невероятно неуверенно. Если ваш веб-сервер взломан, и кто-то изменяет один из файлов, загружаемых вашим плагином, чтобы включить PHP-код в вывод, каждый с вашим плагином будет запускать этот код. Это было бы ДЕЙСТВИТЕЛЬНО ПЛОХО.

+0

Хорошо. Знаете ли вы какие-либо другие способы, чтобы я мог это сделать? Действительно застрял в этом конкретном пользователе. Его хозяин ответил на письмо, которое они ему прислали, говоря, что file_get_contents будет работать, если я попробую его локально. Я не совсем уверен, что они означают, что локальный путь в file_get_contents не будет работать (в моей автономной настройке в любом случае с использованием MAMP на Mac). –

+0

Я предлагаю попробовать метод 'curl' перед' file_get_contents'.Если 'curl' включен, он, скорее всего, будет работать для загрузки содержимого. (Иначе это было бы совершенно бесполезно!) – duskwuff

Смежные вопросы