На сайте есть большие файлы хочу перенести на другой сервер где больше места. Проблем в том что функция readfile($file); работает только с локальными файлами если пытаться обратиться к файлу https://site.ru/for.mp4 она уже не может отработать!
Так и не понял, зачем для переноса использовать readfile с https, но эта ф-ция, как и пых в целом вам не помогут. Размещайте файлы в подходящем месте и юзайте wget, ftp и т.п. Пусть трудятся проги, которые для этого предназначены. --- Добавлено --- SSH-доступ есть или новый хостинг – полнейший отстой?
Я отдаю файл через специальную страничку PHP: header('Content-Type: video/mp4'); header('Expires: 0'); header('Accept-ranges: bytes'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file);
Этот код я положил на удалённый сервер теперь вопрос. Как прописать что бы на сайте выполнился код удалённого сервера? https://site.ru/1.php чёт типо этого)))) PHP: include 'https://site.ru/1.php';
Если и код на удаленном сервере, и файл, то для кода $file – локальный Или у вас разные удаленные? И чего непонятного в словах «readfile вам не поможет»? Эту ф-цию можно использовать для выдачи контента в пару килобайт. Для чего-то серьезного используются другие методы. Что мешает напрямую скачивать файл, т.е. чтобы сам Web-сервер его отдавал? --- Добавлено --- Бинарь втыкать в код. Реально смешно.
Это видео файл я его в плеер отдаю поэтому читаю файл readfile. Сейчас на файловый сервер я поместил это PHP: header('Content-Type: video/mp4'); header('Expires: 0'); header('Accept-ranges: bytes'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); readfile($file); С сайта в плеере я запрашиваю файл vasya вот так Код (Text): http://site.ru/file.php?name=vasya Я в идеале я бы не хотел показывать адрес файлого сервера и подключиться к нему на стороне сервера
Мы на одном проекте сделали монтирование средствами linux удалённой файловой системы. Тогда readfile будет работать. Хотя у нас его и нет, там вообще не на пыхе проект.
Буквальный ответ на вопрос "почему не работает функция" — вероятно потому, что на твоём хостинге запрещен url fopen Если я прав (а я прав), то эта настройка также не даст тебе открыть файл по URL-у никакой другой функцией типа file_get_contents или fopen. Поэтому искать альтернативы бесполезно. Исправляй настройку/меняй хостинг. [offtopic] Отдавать большие файлы таким вот образом это ужасно! Надо таки скопировать их или к себе или в облако и отдавать ссылку на них. [/offtopic]
А если надо ограничить их отдачу только аутентифицированным пользователям? Хотя, тут мне нашего джависта подход тоже нравится: он считает, что если мы уникализировали имя файла, то хрен кто его случайно угадает, и главное, чтоб это уникализированное имя видел только аутентифицированным пользователь
@AnteFil тогда попробуй аналогичным образом отдать мелкий файл. Это будет хорошим тестом. Видео же по определению большие там свои проблемы могут быть с памятью и таймаутами. Оно пока не скачается полностью, отдаваться не будет! Подход ужасен. Видео надо стримить или давать прямую ссылку на хранилище, чтобы оно долго отдавало, а не твой бекенд.
Можно авторизованному пользователю для приватного объекта генерировать публичную ссылку. Опионально с устареванием. Это уже вопрос API сервиса на котором хранятся ресурсы. Надо избегать нагружать свой сервер долгими запросами.