Объясню ситуацию. Случилось так, что на сервере после обновлений перестала работать функция file_get_contents()
Вываливается сообщение в логах Apache:
wrapper is disabled in the server configuration by allow_url_fopen=0
и в добавок
failed to open stream: no suitable wrapper could be found
Warning: file_get_contents() URL file-access is disabled in the server configuration.
Такая ошибка возникает, если обращения к собственным файлам или сторонним ресурсам реализованы через функцию file_get_contents.
К сожалению, функция allow_url_fopen, которая предоставляла такую возможность, была заблочена разработчиками PHP по причинам безопасности, описанным на консорциуме PHP Security
Рекомендую заменить ее на новую. То есть меняем file_get_contents() на new_file_get_contents()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
function new_file_get_contents( $file_or_url_data ) { if ( file_exists( $file_or_url_data ) ) { // если существует и файл не пустой, то открываем как файл if( filesize( $file_or_url_data ) ) { $handle = fopen( $file_or_url_data, "r" ); $contents = fread( $handle, filesize( $file_or_url_data ) ); fclose($handle); } else { return ''; } } else { // Открываем при помощи Curl // и настраиваем курл $curl = curl_init(); curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curl, CURLOPT_TIMEOUT, 30 ); curl_setopt( $curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; en; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1' ); curl_setopt( $curl, CURLOPT_FOLLOWLOCATION, 1 ); curl_setopt( $curl, CURLOPT_REFERER, 'http://google.com/' ); curl_setopt( $curl, CURLOPT_URL, $file_or_url_data ); $contents = curl_exec( $curl ); curl_close($curl); // теперь закрываем курл } return $contents; } // Далее вставляем в код вывод этой функции echo new_file_get_contents( 'myconent.txt' ); // Открываем файл echo new_file_get_contents( 'http://rbc.ru' ); // Или URL с http echo new_file_get_contents( 'google.com' ); // Можно урл без http |
Могут возникнуть трудности и библиотеки Curl не будет на вашем сервере, тогда ее можно установить. Здесь вы можете узнать как это сделать на Ubuntu . Если у вас свой сервер или запросить установку у хостера.
.