У меня есть хост для хранения данных и хоста загрузки (у этого хоста нет базы данных). Я хочу прочитать файл из хоста загрузки в хосте на хостинге и предоставить его пользователю для загрузки, но я не хочу использовать ежемесячную передачу полосы пропускания хоста магазина при загрузке файла пользователем и просто использовать передачу пропускной способности хоста .
Я знаю два способа:
ftp_get
загружает файл и сохраняет его в локальном файле, а затем устанавливает header
для загрузки. Я не хочу использовать этот способ, потому что загружаем файл в хранилище.
// in store host $local_file = 'app.apk'; $ftp_file = '/uploads/2015/06/1eb6a628c60bb69a6b6092d03e252c29.apk'; // download file and save it in local ftp_get($conn_id , $local_file, $ftp_file, FTP_BINARY); $file_name = 'app.apk'; $file_size = filesize($local_file); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $file_name); header('Content-Transfer-Encoding: binary'); header('Connection: Keep-Alive'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $file_size); readfile($local_file);
Я не знаю, что file_get_contents
используют передачу пропускной способности хоста хранилища при загрузке файла пользователем или нет.
// in store host header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $file_name); header('Content-Transfer-Encoding: binary'); header('Connection: Keep-Alive'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $file_size); // readfile($local_file); $c = file_get_contents('ftp://login:pass@download-host.com/uploads/2015/06/app.apk'); echo $c;
Я не хочу использовать пропускную способность в хосте на хостинге ; Какой способ я могу использовать? Путь 2 или другой способ?
Невозможно загрузить содержимое с «загрузочного узла» непосредственно на клиент, не предоставляя клиенту всю информацию, необходимую для загрузки («ссылка для загрузки»).
Если вам нужно скрыть информацию о загрузке от клиента, вам необходимо загрузить файл на «хост-хранилище», а затем отправить его клиенту. Следовательно, вы потребляете данные полосы пропускания «хозяина магазина». Неважно, какую технологию, протокол или функцию вы используете. И ftp_get
и file_get_contents("ftp://...")
в любом случае используют одинаковый код.
Просто сказано, что нет возможности как скрывать информацию загрузки от клиента, так и не использовать данные полосы пропускания «хозяина магазина».