Перенос файлов [php]

Обсуждение серверного программирования.

Модераторы: Duncon, Yurich

shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

Подскажите мне как сделать скрипт для переноса файла с одного сервака на другой? Вроде скрипт-то должен быть простой, а у меня что-то не получается...
Исходный файл будет открываться по http-протоколу и сохраняться в директорию там, где сам скрипт находится, как это сделать?

P.S. я не очень опытен в php, но мне кажется что это не важно - формат файлов - mp3
Даже самое длинное путешествие начинается с первого шага.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

shpi0, тебе нужно два скрипта, на каждом сервере по одному.

Тот, с которого переносится: читает файл и просто выводит его (посимвольно на экран).

Тот, который читает: обращается по адресу того, кто выдаёт, считывает полностью страницу и сохраняет её в файл.

Если не будет проблем с кодировкой и чтение с URLа (или Socket-Connection) не закрыто - то должно быть довольно просто.



sendfile.php

Код: Выделить всё

<?php

$filename = "test.mp3";

$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
fclose($handle);
echo $contents;

?>

getfile.php

Код: Выделить всё

<?php

$filename = "test.mp3";

$handle = fopen("http://yourServer/sendfile.php", "rb");


$contents = '';
while (!feof($handle)) {
  $contents .= fread($handle, 8192);
}
fclose($handle);



if (is_writable($filename)) {

   if (!$handle = fopen($filename, 'w')) {
         echo "Cannot open file ($filename)";
         exit;
   }

   if (fwrite($handle, $contents) === FALSE) {
       echo "Cannot write in file ($filename)";
       exit;
   }
  
   echo "File successfully written! ($filename)";
  
   fclose($handle);

} else {
   echo "File $filename is not writable!";
}

?>
P.S. Это если на получающем сервере разрешено чтение файла по HTTP протоколу, если нет - нужно попробовать создать SocketConnection.

P.P.S. Пробовал на разных кодировках на отправителе/получателе, проблем не возникло.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

Тю, блин, дурак я.

На отправителе PHP-скрипт не обязателен ))
Можно ж ведь сразу читать по нужному адресу ))))

Это я думал на тот случай, если файл ниже Веб-видимой области))
berkut
Сообщения: 82
Зарегистрирован: 26 авг 2004, 19:07

>>> Oscar, Пробовал на разных кодировках на отправителе/получателе, проблем не возникло.
а причём тут кодировка :)
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

berkut, мало ли ))
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

Спасибо, все круто работает и без первого скрипта :)
Даже самое длинное путешествие начинается с первого шага.
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

Только есть одно "но" - чтоб файл перенести, надо создать файл с таким же именем на сервере, куда переносят...
Даже самое длинное путешествие начинается с первого шага.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

shpi0,
а как ты узнаёшь какой файл ты скачиваешь с отдающего сервера?
Передавай это в переменной $_REQUEST['toget'] (getfile.php?toget=test.mp3)
shpi0
Сообщения: 53
Зарегистрирован: 29 сен 2004, 16:14
Откуда: оттуда
Контактная информация:

мне-то известно, какой файл мне надо перекачать, т.к. это оба моих сервера, я хостинг меняю и не хочу свой трафик тратить.
Я о том говорил, что чтобы перекачать файл 1.mp3 с передающего сервара, надо на сервере-приемнике создать файл с именем 1.mp3
Даже самое длинное путешествие начинается с первого шага.
Аватара пользователя
Oscar
Сообщения: 963
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

shpi0, кажется, я понимаю.

Теоретически, ф-ция "fopen('w')": ... Если файл не существует - пробует его создать.
Практически же, мне тоже пришлось создать файл на сервере приёмнике.

Но это должно зависеть от глобально разрешения пользователю, под которым запускается с Веба скрипт "getfile", писать на сервер (в свою папку).
Ответить