Страница 1 из 2

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

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

P.S. я не очень опытен в php, но мне кажется что это не важно - формат файлов - mp3

Добавлено: 24 окт 2005, 20:14
Oscar
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. Пробовал на разных кодировках на отправителе/получателе, проблем не возникло.

Добавлено: 24 окт 2005, 20:38
Oscar
Тю, блин, дурак я.

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

Это я думал на тот случай, если файл ниже Веб-видимой области))

Добавлено: 24 окт 2005, 22:27
berkut
>>> Oscar, Пробовал на разных кодировках на отправителе/получателе, проблем не возникло.
а причём тут кодировка :)

Добавлено: 25 окт 2005, 02:44
Oscar
berkut, мало ли ))

Добавлено: 25 окт 2005, 08:46
shpi0
Спасибо, все круто работает и без первого скрипта :)

Добавлено: 25 окт 2005, 08:48
shpi0
Только есть одно "но" - чтоб файл перенести, надо создать файл с таким же именем на сервере, куда переносят...

Добавлено: 25 окт 2005, 10:14
Oscar
shpi0,
а как ты узнаёшь какой файл ты скачиваешь с отдающего сервера?
Передавай это в переменной $_REQUEST['toget'] (getfile.php?toget=test.mp3)

Добавлено: 25 окт 2005, 10:18
shpi0
мне-то известно, какой файл мне надо перекачать, т.к. это оба моих сервера, я хостинг меняю и не хочу свой трафик тратить.
Я о том говорил, что чтобы перекачать файл 1.mp3 с передающего сервара, надо на сервере-приемнике создать файл с именем 1.mp3

Добавлено: 25 окт 2005, 10:24
Oscar
shpi0, кажется, я понимаю.

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

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