![]() |
Автоматичная закачка файла - альтернатива FTP ?
Таак, написал automatic remote backup tool, PHP скрипт дампит MySQL базы, записывает их локально и закачивает на удаленный FTP...
Только вот проблем... Хост ругается: ftp_put() [function.ftp-put]: php_connect_nonb() failed: Operation now in progress (115) (2) Саппорт отвечает: We do not allow the FTP functions to be used against remote FTP servers. Так вот ищу простую альтернативу ftp_*, есть идея передавать имя файла (которое генерируется разное!) GET запросом удаленному скрипту, а тот скачает и запишет файл. Но как реализовать, вообще не думается :confused: Буду благодарен за куски кода, примеры, обяснения... Спасибо что дочитали :D |
Ну например так:
1 хост, который делает дамп: PHP код:
PHP код:
Ну думаю схема понятна. ))) Если файл большой, то во втором скрипте скачивай "побайтово". функция fread() //практикуем убийство серверов?))) |
Ожидается что будет большой, и еще 50 штук таких... Базы phpBB3 =)
Иначе все понятно, спасибо огромное, щас в репу стукну Няя, я не убиец =) Я наемный убиец =) ...а так, сайто строитель... |
скрипт, который дампит (в переменной $server указать путь до скрипта, который скачивает):
Код:
<?phpКод:
<?php |
^_WhitE_DeMoN_^ если блокируются только функции ftp_*, напишите свой класс на сокетах, благо FTP - простейший протокол
Или еще проще: PHP код:
|
Цитата:
|
Цитата:
Цитата:
|
У никого ?
|
Цитата:
allow_url_fopen=on; |
Нет доступа к php.ini
Ищу обход... |
Обязательно ftp ?
1. Пробуй через сокеты, если не запрещено. 2. Напрямую через 80-й порт. |
Цитата:
или читай через сокет http://ru2.php.net/manual/en/function.fsockopen.php |
FTP - не обязательно.
Нужно только реализовать закачку файла с одного сервера на другой, а как ето уже проблем... Со сокетами не знаком, но придется доки курить... ini_set('allow_url_fopen', 'On'); не помогло... |
И через сокеты не пашет - URL file-access is disabled in the server configuration (2)
Другие идеи..? |
слать через POST, если файлы большие (или ограничение на POST), то кусками с указанием сегментов :)
вначале сделать запрос на передачу файла, в POST параметрах указать имя файла, логин/пароль, хэш всего файла, его размер. Далее, получив согласие получателя и код сессии начинаем передавать сегменты файла: указать только начало, конец, контрольную сумму (на всякий) обрывка; сессию на файл Принимающий собирает по кускам, проверяет получившуюся контрольную сумму и всё. Ну и написать проверку, что если были ранее начаты сессии с незаконченными передачами, которые не обновлялись более часа, то их стоит удалить. куски файла можно зипировать.. а если и в base64 закодировать, то можно и GET-ом передать xD правда там на заголовки больше уйдёт трафика, но система будет работать :D |
Вообще не врубил...
|
Цитата:
^_WhitE_DeMoN_^, Ты сокетами, надеюсь, отправлял заголовки? |
Цитата:
^_WhitE_DeMoN_^, написл для тебя функцию с коментами. Если не новиш в php, то дальше сам разрулишь (функцию можешь не изучать, просто используй как надо, хотя в ней многое не учтено, но для простых запросов хватит) PHP код:
|
Цитата:
|
@LStr1ke, неа...
@roxblnfk, возвращает "1" =( @|qbz|, и .htaccess не прокатил... |
^_WhitE_DeMoN_^, ошибка есть, тут: $str{4}="\n";
надо $str{3}="\n"; А где возвращает 1? :) я тут RFC протокола перечитал, увидел следующее на счёт Content-Length: Длина тела объекта (entity-body) - это длина тела сообщения (message-body), полученного после декодирования всех кодирований передачи. Т.е., как я понял, сюда надо вписывать не длину закодированного контента, а длину контента до кодирования. В нэте в примерах показывают обратное, т.е. указывают длину закодированного контента. Вобщем немного переделал функцию (тут длина до кодирования): PHP код:
Кстати, чтобы передавать бинарные данные, лучше использовать MIME без всякого кодирования. Этим же способом передают фотки с текстом за 1 раз. С момента прошлого поста я успел написать функцию, реализующую MIME в POST, только не закончил. В функции нет возможности аутентификации (Digest Authentication), но эти заголовки несложно дописать вручную. Если надо, могу поделиться. |
Цитата:
PHP код:
Вот из за какогото [censored] и его [censored] настройки сервака, должен извращатся а не радоватся file_get_contents() Ну никак не пашет ! |
Да сделай по изврату ) Обычно, когда делать совсем нех. пользуешься извратом )
Короче ) На сайте, где хочешь сохранить файл (куда закачивать) делаешь форму, ну обычную, типа закачать файл. PHP код:
PHP код:
Ну это конечно извращенно, вообщем хз, что еще посоветовать ) |
Цитата:
HTTP_request() вернёт МАССИВ, где первый элемент с ключем 0 будет true или false, второй элемент с индексом 1 — текст ошибки (в случае, если первый false) или ответ сервера (если первый элемент - true, т.е. коннект удался) присвой значение переменной и бери условие... PHP код:
|
Цитата:
|
считай, готовое решение
^_WhitE_DeMoN_^,
написал передачу файла по посту по кускам (ограничение размера файла - 2 гига ровно минус 1 байт) Да и пост у меня по кускам :) собирай.. PHP код:
|
Код скрипта, отправляющего файл: (форум может поставить пробелы где не надо, но я старался делить длинные строки)
<? PHP код:
|
зы: функция pro_HTTP_() ещё не доделана, но в заданном условии работает как надо. Надо ещё сделать прокси и Digest (который всё-равно не сделаю, намудрили в спецификации, да и апач не поддерживает полностью)
Скрипт, принимающий файл: (там попутно указаны некоторые опции типа логина и пароля, имени файла... лучше изучить) <? PHP код:
В ходе теста файл отлично передался, вот мой результат Цитата:
|
ТС уже забил на тему? :(
|
Цитата:
Скоро активизируюсь. echo tpl_l() - выводит результат в теплейте (оформлен) |
Цитата:
Еще не тестил, но из форума хоста понел что курл наш :) |
Цитата:
PHP код:
|
Цитата:
а вобще, в трёх своих предыдущих постах текущей темы я всю твою задачу решил... (там уже другая функция) |
Цитата:
Но я никуда не спешу (уже...), все протестирую (что как заработает) и репу колотить буду, спасиб ;) |
| Время: 18:07 |