|
|
|
| Есть у кого скрипт для загрузки файла через ПХП с докачкой?
Вот что у меня получилось:
<?
function get_file($url, $name)
{
// Получение размера файла
$filepath = trim($url);
// Делим путь к файлу на хост и "хвост" (для сокетов)
preg_match('/\\b(?P<protocol>https?|ftp):\/\/(?P<domain>[-A-Z0-9.]+)(?P<file>\/[-A-Z0-9+&@#\/%=~_|!:,.;]*)?(?P<parameters>\\?[-A-Z0-9+&@#\/%=~_|!:,.;]*)?/i', $filepath, $path_details);
// Проверяем, верен ли введённый адрес
if(isset($path_details[2]) && !empty($path_details[2]))
{
$filehost = $path_details[2];
}
else
{
echo "Введённый адрес некорректен !";
exit;
}
// Если "хвост" пуст, заполняем пустоту слешем, что бы не сглючили сокеты
if(isset($path_details[3]) && !empty($path_details[3]))
{
$filepath = $path_details[3];
}
else
{
$filepath = "/";
$url .= "/";
}
####################################################################################################
############################ Основная часть скрипта, остальное - "вода" :) #########################
####################################################################################################
// Подключаемся к файлу через сокеты
$getfile = fsockopen($filehost, 80, $errno, $errstr, 30) or die("Ошибка подключения к серверу");
// Добавляем в буффер путь к файлу на сервере и сам хост
fputs($getfile, "HEAD $filepath HTTP/1.0\nHOST: $filehost\n\n");
// Объявляенм буффер-переменную для заголовков
$temp_headers = "";
// Читаем заголовки по 4 кб, пока не дойдём до конца сокет-файла
while(!feof($getfile)) $temp_headers .= fgets($getfile, 4096);
// Ищем в полученных заголовках Content-Length, если находим,читаем его значение
if(ereg("Content-Length: ([0-9]+)", $temp_headers, $matched_array))
{
$filesize = $matched_array[1];
}
else
{
echo "Не могу определить размер этого файла :(";
}
unset($matched_array);
if(ereg("Content-Type: (.*?)", $temp_headers, $matched_array))
{
$filtype = $matched_array[1];
}
$filename = str_replace("/", "", $path_details['file']);
// Закрываем сокет-файла
fclose($getfile);
////////////////////////
header('Content-Type: '.$filtype); // Отправляем тип файла.
header('Content-Length: '.$filesize); // Отправляем его размер.
header( 'Content-Disposition: attachment; filename='.$filename); // Отправляем его имя.
echo file_get_contents($url); // Считывание файла
}
if($_POST['adress'])
{
@get_file($_POST['adress']);
}
?>
<?
echo '<br><br><center><form action="'.$HTTP_SERVER_VARS['PHP_SELF'].'?do" method="post">
<input type="Text" name="adress" size="40" value="http://192.168.0.2/andrychat.zip">
<input type="Submit" value="down">
</form></center>';
?>
|
| |
|
|