Передача файла на поддомен для сохранения с основного домена

usergeyv

Знаток
Регистрация
5 Июл 2013
Сообщения
152
Реакции
25
В файле download.php основного домена код для сохранения файла браузером
PHP:
header('Content-type: application/octetstream');
header('Content-Length: ' . filesize("./storage/".$validdownload[0]));
header('Content-Disposition: attachment; filename="'.$validdownload[1].'"');
readfile("./storage/".$validdownload[0]);
, а как сделать, чтобы файл не сохранялся, а передавался на поддомен для сохранения.
То есть когда пользователь на основном домене жмет ЗАГРУЗИТ , открывается поддомен и начинается скачка файла
 
пользователь на основном домене жмет ЗАГРУЗИТ , открывается поддомен и начинается скачка файла
Вы определитесь — или у Вас открывается поддомен, либо начинается скачка файла. Окно-то одно.
Когда сможете одной клавиатурой писать в 2 местах экрана одновременно, тогда и получится сделать фокус на 2 окна.
Можно разместить скачку на поддомене, а на главном домене — пересылку на поддомен, ПОСЛЕ перехода на поддомене сделать отдачу файла. Но не одновременно.
 
пока делаю на основном домене download.php
PHP:
$filesize = filesize("./storage/".$validdownload[0]);
$filename = $validdownload[1];
$file = ("./storage/".$validdownload[0]);

header("HTTP/1.1 301 Moved Permanently");
header("Location: test.php?filename=$filename&filesize=$filesize&file=$file");
die("Redirect");
данные передаются на test.php
PHP:
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$file = $_GET["file"];



if(file_exists($file) === TRUE)
{
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . basename($filename));
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($filesize));
        ob_clean();
        flush();
        readfile($file);
        exit;
}
но не качается файл:conf:

и так тож делал
PHP:
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$file = $_GET["file"];

header('Content-type: application/octetstream');
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile(.$file);
не качает

Разобрался , вот так качает
PHP:
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$file = $_GET["file"];



// заставляем браузер показать окно сохранения файла
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $filename);
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . $filesize);
        // читаем файл и отправляем его пользователю
        readfile($file);
        exit;

теперь надо все ето проделать на поддомене

download.php
PHP:
header("HTTP/1.1 301 Moved Permanently");
header("Location: test.php?filename=$filename&filesize=$filesize&file=$file");
die("Redirect");
поменял на
PHP:
header("HTTP/1.1 301 Moved Permanently");
header("Location: tes.domen.ru/test.php?filename=$filename&filesize=$filesize&file=$file");
die("Redirect");
работает, но насколько ето все безопасно?

Блин, качает , но качает "0" mb , помогите
 
Последнее редактирование модератором:
Тебе надо на основном домене сделать ссылку на поддомен, а поддомен будет переадресовывать на файл.

Тут описана отправка файла: Для просмотра ссылки Войди или Зарегистрируйся
 
Спасибо всем за помощь,но download.php у меня делает подсчет скачки и т.п , пото и прописал ниже
PHP:
$filesize = filesize("./storage/".$validdownload[0]);
$filename = $validdownload[1];
$file = ("./storage/".$validdownload[0]);
$filename = base64_encode ($filename);

$n = $validdownload[0];

header("HTTP/1.1 301 Moved Permanently");
header("Location: test.php?filename=$filename&n=$n&filesize=$filesize&file=$file"); 
die("Redirect");
в файле test.php отправка файла методом
PHP:
<?php

$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$file = $_GET["file"];
// Задаем скрипт на сайте B, который примет наш запрос и обработает его
$url = 'http://поддомен/import.php';

// Указываем файл, который мы хотим передать сайту B
// Если файл находится не в текущей дирректории, то необходимо
// указать путь до файла


// Узнаем размер передаваемого файла

// Узнаем имя файла (в случае, если в $file указан полный путь до файла)
$pathinfo = pathinfo($file);

// Открываем передаваемый файл на чтение
// для дальнейшей его передачи
$fp = fopen($file, 'r');

// Инициализируем сеанс CURL
$ch = curl_init();

// Задаем параметры для открытого сеанса CURL

// Указываем URL скрипта, который примет наш запрос
// К имени скрипта добавляем переменную, содержащую имя передаваемого файла
// Чтобы это имя было доступно в принимающем скрипте из массива $_GET
curl_setopt($ch, CURLOPT_URL, $url . '?filename=' . $filename);

// Указываем файл (а вернее дескриптор открытого на чтение файла), 
// который собираемся передать
curl_setopt($ch, CURLOPT_INFILE, $fp);

// Указываем предполагаемый размер отправляемого файла
curl_setopt($ch, CURLOPT_INFILESIZE, $filesize);

// Указываем, что файл передается методом PUT
curl_setopt($ch, CURLOPT_PUT, true);

// Указываем, что будет производиться закачка на удаленный сервер
curl_setopt($ch, CURLOPT_UPLOAD, true);

// Выполняем запрос CURL
curl_exec($ch);

// Завершаем сеанс CURL
curl_close($ch);
header("refresh: 5; url=http://поддомен/test.php?filename=$filename");

$n = $_GET["n"];
 
?>
import.php на поддомене
PHP:
<?php
$filename = base64_decode ($_GET["filename"]);


// Получаем содержимое входящего потока
$content = file_get_contents('php://input');

// Записываем содержимое потока в файл
$file = fopen($filename, 'w+');
fwrite($file, $content);
fclose($file);
?>

и для скачки с поддомена, а также удаления после скачивания Для просмотра ссылки Войди или Зарегистрируйся
PHP:
<?php

$filename = base64_decode ($_GET["filename"]);




// 2007 (c) 440hz
// отдаваемое файло

// есл файла нет
if (!file_exists($filename)) {
     header ("HTTP/1.0 404 Not Found");
     exit;
}
// получим размер файла
$fsize = filesize($filename);
// дата модификации файла для кеширования
$ftime = date("D, d M Y H:i:s T", filemtime($filename));
// смещение от начала файла
$range = 0;
// пробуем открыть
$handle = @fopen($filename, "rb");
// если не удалось
if (!$handle){
   header ("HTTP/1.0 403 Forbidden");
   exit;
}
// Если запрашивающий агент поддерживает докачку
if ($_SERVER["HTTP_RANGE"]) {
     $range = $_SERVER["HTTP_RANGE"];
     $range = str_replace("bytes=", "", $range);
     $range = str_replace("-", "", $range);
     // смещаемся по файлу на нужное смещение
     if ($range) {
         fseek($handle, $range);
     }
}
// если есть смещение
if ($range) {
   header("HTTP/1.1 206 Partial Content");
} else {
   header("HTTP/1.1 200 OK");
}
header("Content-Disposition: attachment; filename=\"{$filename}\"");
header("Last-Modified: {$ftime}");
header("Content-Length: ".($fsize-$range));
header("Accept-Ranges: bytes");
header("Content-Range: bytes {$range}-".($fsize - 1)."/".$fsize);
// подправляем под IE что б не умничал
if(isset($_SERVER['HTTP_USER_AGENT']) and strpos($_SERVER['HTTP_USER_AGENT'],'MSIE'))
   Header('Content-Type: application/force-download');
else
   Header('Content-Type: application/octet-stream');
while(!feof($handle)) {
     $buf = fread($handle,512);
     print($buf);
}
fclose($handle);
if (@readfile($filename)) {
        unlink($filename);
    }
?>

Решил выложить свою схему,может помогу кому то .Вот так и решил свой вопрос, тему можно закрыть
 
Последнее редактирование модератором:
Назад
Сверху