За последние 24 часа нас посетили 11324 программиста и 794 робота. Сейчас ищут 340 программистов ...

Не работает функция readfile($file);

Тема в разделе "PHP для новичков", создана пользователем AnteFil, 11 июн 2022.

  1. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    518
    Симпатии:
    3
    На сайте есть большие файлы хочу перенести на другой сервер где больше места. Проблем в том что
    функция readfile($file); работает только с локальными файлами если пытаться обратиться к файлу https://site.ru/for.mp4 она уже не может отработать!
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.604
    Симпатии:
    600
    Так и не понял, зачем для переноса использовать readfile с https, но эта ф-ция, как и пых в целом вам не помогут. Размещайте файлы в подходящем месте и юзайте wget, ftp и т.п. Пусть трудятся проги, которые для этого предназначены.
    --- Добавлено ---
    SSH-доступ есть или новый хостинг – полнейший отстой?
     
  3. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    518
    Симпатии:
    3
    Я отдаю файл через специальную страничку
    PHP:
    1. header('Content-Type: video/mp4');
    2. header('Expires: 0');
    3. header('Accept-ranges: bytes');
    4. header('Cache-Control: must-revalidate');
    5. header('Pragma: public');
    6. header('Content-Length: ' . filesize($file));
    7. readfile($file);
     
  4. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    518
    Симпатии:
    3
    Этот код я положил на удалённый сервер теперь вопрос. Как прописать что бы на сайте выполнился код удалённого сервера?
    https://site.ru/1.php
    чёт типо этого))))
    PHP:
    1. include 'https://site.ru/1.php';
     
  5. antoniii

    antoniii Новичок

    С нами с:
    16 мар 2022
    Сообщения:
    315
    Симпатии:
    62
    Попробуй использовать file_get_contents(url) или fopen(url).
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.604
    Симпатии:
    600
    Если и код на удаленном сервере, и файл, то для кода $file – локальный ;) Или у вас разные удаленные? :D

    И чего непонятного в словах «readfile вам не поможет»? Эту ф-цию можно использовать для выдачи контента в пару килобайт. Для чего-то серьезного используются другие методы. Что мешает напрямую скачивать файл, т.е. чтобы сам Web-сервер его отдавал?
    --- Добавлено ---
    Бинарь втыкать в код. Реально смешно.
     
  7. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    518
    Симпатии:
    3
    Это видео файл я его в плеер отдаю поэтому читаю файл readfile.
    Сейчас на файловый сервер я поместил это
    PHP:
    1. header('Content-Type: video/mp4');
    2. header('Expires: 0');
    3. header('Accept-ranges: bytes');
    4. header('Cache-Control: must-revalidate');
    5. header('Pragma: public');
    6. header('Content-Length: ' . filesize($file));
    7. readfile($file);
    С сайта в плеере я запрашиваю файл vasya вот так
    Код (Text):
    1. http://site.ru/file.php?name=vasya
    Я в идеале я бы не хотел показывать адрес файлого сервера и подключиться к нему на стороне сервера
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    Мы на одном проекте сделали монтирование средствами linux удалённой файловой системы. Тогда readfile будет работать.

    Хотя у нас его и нет, там вообще не на пыхе проект.
     
  9. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.817
    Симпатии:
    1.171
    Адрес:
    там-сям
    Буквальный ответ на вопрос "почему не работает функция" — вероятно потому, что на твоём хостинге запрещен url fopen
    Если я прав (а я прав), то эта настройка также не даст тебе открыть файл по URL-у никакой другой функцией типа file_get_contents или fopen. Поэтому искать альтернативы бесполезно. Исправляй настройку/меняй хостинг.

    [offtopic]
    Отдавать большие файлы таким вот образом это ужасно! Надо таки скопировать их или к себе или в облако и отдавать ссылку на них.
    [/offtopic]
     
  10. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    А если надо ограничить их отдачу только аутентифицированным пользователям?

    Хотя, тут мне нашего джависта подход тоже нравится: он считает, что если мы уникализировали имя файла, то хрен кто его случайно угадает, и главное, чтоб это уникализированное имя видел только аутентифицированным пользователь
     
  11. AnteFil

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

    С нами с:
    14 янв 2014
    Сообщения:
    518
    Симпатии:
    3
    PHP:
    1. print_r(ini_get("allow_url_fopen"));
    Пишет 1 следовательно опция включена я уже обрадовался)))
     
  12. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.817
    Симпатии:
    1.171
    Адрес:
    там-сям
    @AnteFil тогда попробуй аналогичным образом отдать мелкий файл. Это будет хорошим тестом.
    Видео же по определению большие там свои проблемы могут быть с памятью и таймаутами. Оно пока не скачается полностью, отдаваться не будет! Подход ужасен. Видео надо стримить или давать прямую ссылку на хранилище, чтобы оно долго отдавало, а не твой бекенд.
     
  13. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    10.817
    Симпатии:
    1.171
    Адрес:
    там-сям
    Можно авторизованному пользователю для приватного объекта генерировать публичную ссылку. Опионально с устареванием. Это уже вопрос API сервиса на котором хранятся ресурсы. Надо избегать нагружать свой сервер долгими запросами.