PHP включает vs file_get_contents - PullRequest
3 голосов
/ 06 января 2012

Итак, я использовал file_get_contents, чтобы запросить файл через плагин для Wordpress, который я распространяю среди других пользователей.

В любом случае первоначально я проверял, разрешено ли для пользователя '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 Ответ

2 голосов
/ 07 января 2012

Ваш include метод будет гораздо менее надежным.Отключение file_get_contents редко, в то время как allow_url_include (от которого вы неявно зависите) по умолчанию отключено.

Это также невероятно небезопасно.Если ваш веб-сервер взломан, и кто-то изменяет один из файлов, загружаемых вашим плагином, для включения в вывод кода PHP, каждый, у кого установлен плагин, начнет запускать этот код.Это было бы действительно плохо.

...