[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Передача файлов на другой сервер
EvilDev
Доброго времени суток!
На данный момент пишу фотохостинг, остаются последние штрихи т.к. он уже "функционирует" в сети
Проблема в том, что не представляю, как можно средствами php отправить файл на другой сервер, если например на главном закончилось место. Как послупить в данной ситуации? Возможно ли сделать это на php?



Спустя 6 часов, 23 минуты, 30 секунд (20.03.2011 - 13:56) fallow написал(а):
сокеты и CURL, только что пробежался по гуглу, примеры есть)
Один из них

<?php
//открываем сокет к www.example.loc на 80-й порт
//с таймаутом в 30 секунд

$socket = fsockopen('www.example.loc', 80, $errno, $errstr, 30);
//если fsockopen вернула false, то завершаем работу
//скрипта и выводим текст
//и номер ошибки

if(!$socket)die("$errstr($errno)");
//разделитель
$boundary = md5(uniqid(time()));
/*собираем часть с файлом:
сначала разделитель\r\n
со следующей строки заголовки\r\n
потом пустая строка\r\n
после чего сам файл\r\n
*/

$file = "--$boundary\r\n".
"Content-Disposition: form-data; name=\"my_file\";".
" filename=\"test_file.jpg\"\r\n".
"Content-Type: image/jpeg\r\n".
"Content-Transfer-Encoding: binary\r\n\r\n";
$file.= file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.
'test_file.jpg');
$file.="\r\n";
/*
как и файл, собираем переменные
сначала разделитель\r\n
со следующей строки заголовки\r\n
пустая строка\r\n
потом значение переменной\r\n
*/

$var1 = "--$boundary\r\nContent-Disposition: '.
'form-data; name=
\"name\"\r\n\r\n".
urlencode("John")."\r\n";
$var2 = "--$boundary\r\nContent-Disposition:'.
'form-data;name=
\"surname\"\r\n\r\n".
urlencode("Smith")."\r\n";
//пишем в сокет метод, URI и протокол
fwrite($socket, "POST /test.php HTTP/1.1\r\n");
//а также имя хоста
fwrite($socket, "Host: www.example.loc\r\n");
//представимся оперой
fwrite($socket,"User-agent:Opera 10.00\r\n");
fwrite($socket, "Connection: close\r\n");
//теперь отправляем заголовки
//Content-type должен быть multipart/form-data,
//также должен быть указан разделитель,
//который мы сгенерировали выше

fwrite($socket,"Content-Type: '.
'multipart/form-data; boundary=
$boundary\r\n");
//размер передаваемых данных передаем в заголовке
//Content-length

fwrite($socket,"Content-length:".(strlen($file)+strlen($var1)+
strlen($var2))."\r\n");
//типы принимаемых данных. */*
//означает, что принимаем все типы данных

fwrite($socket,"Accept:*/*\r\n");
fwrite($socket,"\r\n");
//теперь передаем данные
//передаем файл

fwrite($socket,"$file");
//и переменные
fwrite($socket, "$var1$var2");
//в конце разделитель
fwrite($socket,"--$boundary--\r\n");
//и пустая строка
fwrite($socket, "\r\n");
//теперь читаем и выводим ответ
$answer = '';
while(!feof($socket)){
$answer= fgets($socket, 4096);
echo $answer;
}
//закрываем сокет
fclose($socket);
?>

Спустя 5 минут, 35 секунд (20.03.2011 - 14:02) Семён написал(а):
По мне если серьёзный проект и пока не требующий сверх умных вещей - для начала стоило бы просто в основной сервер примонтировать нужные вспомогательные сетевые диски. и распределять файлы между ними.

Спустя 41 минута, 4 секунды (20.03.2011 - 14:43) EvilDev написал(а):
Цитата (fallow @ 20.03.2011 - 10:56)
сокеты и CURL, только что пробежался по гуглу, примеры есть)
Один из них

<?php
//открываем сокет к www.example.loc на 80-й порт
//с таймаутом в 30 секунд

$socket = fsockopen('www.example.loc', 80, $errno, $errstr, 30);
//если fsockopen вернула false, то завершаем работу
//скрипта и выводим текст
//и номер ошибки

if(!$socket)die("$errstr($errno)");
//разделитель
$boundary = md5(uniqid(time()));
/*собираем часть с файлом:
сначала разделитель\r\n
со следующей строки заголовки\r\n
потом пустая строка\r\n
после чего сам файл\r\n
*/

$file = "--$boundary\r\n".
"Content-Disposition: form-data; name=\"my_file\";".
" filename=\"test_file.jpg\"\r\n".
"Content-Type: image/jpeg\r\n".
"Content-Transfer-Encoding: binary\r\n\r\n";
$file.= file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.
'test_file.jpg');
$file.="\r\n";
/*
как и файл, собираем переменные
сначала разделитель\r\n
со следующей строки заголовки\r\n
пустая строка\r\n
потом значение переменной\r\n
*/

$var1 = "--$boundary\r\nContent-Disposition: '.
'form-data; name=
\"name\"\r\n\r\n".
urlencode("John")."\r\n";
$var2 = "--$boundary\r\nContent-Disposition:'.
'form-data;name=
\"surname\"\r\n\r\n".
urlencode("Smith")."\r\n";
//пишем в сокет метод, URI и протокол
fwrite($socket, "POST /test.php HTTP/1.1\r\n");
//а также имя хоста
fwrite($socket, "Host: www.example.loc\r\n");
//представимся оперой
fwrite($socket,"User-agent:Opera 10.00\r\n");
fwrite($socket, "Connection: close\r\n");
//теперь отправляем заголовки
//Content-type должен быть multipart/form-data,
//также должен быть указан разделитель,
//который мы сгенерировали выше

fwrite($socket,"Content-Type: '.
'multipart/form-data; boundary=
$boundary\r\n");
//размер передаваемых данных передаем в заголовке
//Content-length

fwrite($socket,"Content-length:".(strlen($file)+strlen($var1)+
strlen($var2))."\r\n");
//типы принимаемых данных. */*
//означает, что принимаем все типы данных

fwrite($socket,"Accept:*/*\r\n");
fwrite($socket,"\r\n");
//теперь передаем данные
//передаем файл

fwrite($socket,"$file");
//и переменные
fwrite($socket, "$var1$var2");
//в конце разделитель
fwrite($socket,"--$boundary--\r\n");
//и пустая строка
fwrite($socket, "\r\n");
//теперь читаем и выводим ответ
$answer = '';
while(!feof($socket)){
$answer= fgets($socket, 4096);
echo $answer;
}
//закрываем сокет
fclose($socket);
?>

Благодарю, но это пересылка файла опять таки через нэт - немного не то.

Вроде нашел вариант использовать системные комманды

Спустя 2 часа, 18 минут, 20 секунд (20.03.2011 - 17:01) Animi написал(а):
Цитата (EvilDev @ 20.03.2011 - 11:43)
Вроде нашел вариант использовать системные комманды

Решайте вопрос на уровне файловой системы, а не на уровне кода, который ею пользуется.


_____________
HTML5, CSS3, jQuery, Node.js, PHP, Yii, Joomla, MySQL, MongoDb, GIMP
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.