За последние 24 часа нас посетили 18087 программистов и 1668 роботов. Сейчас ищут 2063 программиста ...

Ф-ия file_get_contents($url) не видит файлы на своём сервере

Тема в разделе "Настройка веб-сервера", создана пользователем mFrance, 29 ноя 2015.

  1. mFrance

    mFrance Активный пользователь

    С нами с:
    4 сен 2013
    Сообщения:
    14
    Симпатии:
    0
    Какая это может быть настройка сервера, что не отдаёт свои же файлы по запросу с url ?
    Например, команда, выполняющаяся на сервере http://www.example.com,

    Код (PHP):
    1. file_get_contents("http://www.example.com/digit.txt")
    выдаёт ошибку: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found,

    когда тот же запрос в браузере открывает этот файл: http://www.example.com/digit.txt, то есть файл существует.
    И другой адрес открывается, например, file_get_contents("http://www.yandex.ru"); - открывается, а свой -
    Код (PHP):
    1. file_get_contents("http://www.example.com/digit.txt"); 
     - не открывается.
    В файле .htaccess:
    Код (PHP):
    1. php_flag allow_url_fopen on
    2. php_flag allow_url_include off
    Причём на других серверах file_get_contents отдаёт свои файлы.

    Подскажите, пожалуйста, хоть в каком направлении смотреть, всю голову уже сломали... :-(

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Ф-ия file_get_contents($url) не видит файлы на своём сер

    фактический код можно увидеть? там точно работа с файловой системой сервера а не стриммер?
     
  3. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Re: Ф-ия file_get_contents($url) не видит файлы на своём сер

    зачем со своего сервера файлы по http тянуть?
     
  4. mFrance

    mFrance Активный пользователь

    С нами с:
    4 сен 2013
    Сообщения:
    14
    Симпатии:
    0
    http://www.landkit.ru/digit.txt - существует - в броузере видим.

    <a class="postlink" href="http://www.landkit.ru/test.php">http://www.landkit.ru/test.php</a> - запускаем - ответ: Warning: file_get_contents(http://www.landkit.ru/digit.txt) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/landkit/domains/landkit.ru/public_html/test.php on line 2

    test.php:
    Код (PHP):
    1. <?php
    2.     echo file_get_contents("http://www.landkit.ru/digit.txt");
    3. ?>
    Почему "HTTP/1.1 404 Not Found" - когда этот файл есть??? :)

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Re: Ф-ия file_get_contents($url) не видит файлы на своём сер

    ага, то есть локальный файл зачем-то читается через лишний запрос по протоколу гипертекста. что мешает файл из файловой системы прочитать?
     
  6. mFrance

    mFrance Активный пользователь

    С нами с:
    4 сен 2013
    Сообщения:
    14
    Симпатии:
    0
    Re: Ф-ия file_get_contents($url) не видит файлы на своём сер

    Это нужно для целей проверки, на разрешённом ли сервере запускается скрипт.
    Создаём временный файлик, потом обращаемся к нему через $_SERVER["SERVER_NAME"] - то есть по url - если он открывается - то значит, файлик создан именно на том сервере, чей домен в переменной $_SERVER["SERVER_NAME"] (задача была этой переменной не доверять, а проверить другим способом)

    Этот алгоритм прекрасно работает на других серверах.

    Вот нашёлся один ... который не отдаёт свои файлы по url..

    Подскажите по сути вопроса - почему?
     
  7. mFrance

    mFrance Активный пользователь

    С нами с:
    4 сен 2013
    Сообщения:
    14
    Симпатии:
    0
    Файл 01.txt с числом 777 внутри и скрипт test.php
    Код (PHP):
    1. echo file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/01.txt") . "<br>";
    2. echo file_get_contents("http://" . $_SERVER["SERVER_NAME"] . "/01.txt") . "<br>"; 
    кладу на один сервер, запускаю, получаю:
    Код (PHP):
    1. 777
    2. 777
    и те же файлы 01.txt и test.php кладу на другой сервер и запускаю, получаю:
    Код (PHP):
    1. 777
    2.  
    3. Warning: file_get_contents(http://www.landkit.ru/01.txt) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/landkit/domains/landkit.ru/public_html/test.php on line 26 
    Посоветовали обратить внимание на директивы open_basedir, allow_url_fopen - с ними всё нормально.
    Советовали такое:
    - "На хостинге - доноре что то не отдает, если нет хидеров браузера."
    - "значит из-за пустого реферера. (mod_rewrite)"

    Немного непонятно, как проверить эти два совета...

    PHP, JavaScript, SQL и другой код пишите внутри тегов
    Код ( (Unknown Language)):
    1. [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]