Каква е разликата?

kopura

Registered
Добър ден съфорумници.

Разработвам сайт и стигнах до там, че трябва потребителите да свалят файлове. И така целта е когато някой свали файл във БД да се ъпдейтва полето downloaded но това лесно. Така имам един download.php файл, чрез който става свалянето. Пробвах два варянта.

Първия е моят варянт , който сам измислих:
PHP:
<?php

include "include/config.php";
@$id = $_GET["id"];
$dw_query = "SELECT link FROM `files` WHERE id='$id'";
$dw_zaqvka = mysql_query($dw_query);
$dw_row = mysql_fetch_array($dw_zaqvka,MYSQL_ASSOC);
if(file_exists($dw_row[link])){
mysql_query("UPDATE `files` SET `downloaded`=`downloaded` + 1 WHERE id='$id'");
header("Location:".$dw_row[link].);
}

?>

И втория варянт, който видях в php.net:

PHP:
<?php

include "include/config.php";
@$id = $_GET["id"];
$dw_query = "SELECT link FROM `files` WHERE id='$id'";
$dw_zaqvka = mysql_query($dw_query);
$dw_row = mysql_fetch_array($dw_zaqvka,MYSQL_ASSOC);
if(file_exists($dw_row[link])){
mysql_query("UPDATE `files` SET `downloaded`=`downloaded` + 1 WHERE id='$id'");
   header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($dw_row[link]));
    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($dw_row[link]));
ob_clean();
flush();
readfile($dw_row[link]);
}

?>

Каква е разликата между двете?
Предполагам , че втория варянт е по-удачен.
Но работата е там , че не обичам да слагам така неща без да съм ги разбрал и немога да разбера за какво са всичките тези header-и и какво правят функциите ob_clean() и flush() и въобще кво ще рече термина "output buffer".

Благодаря за отделеното време.
Поздрави.
 
Всичките тези header-и казват на browser-а, че това е файл и ти искаш да дадеш на потребителят да го изтегли. Тей като ако ги няма browser-а или ще го отвори като файл да го четат потребителите или да го слушат. Мисля, че много пъти си виждал как като отвориш .pdf файл през browser-а той ти изкарва самото съдържание в него. А с тези header-и той няма да изкара съдържанието ами ще даде да го изтеглиш файла. :)
 
Ev0luti0N каза:
Всичките тези header-и казват на browser-а, че това е файл и ти искаш да дадеш на потребителят да го изтегли. Тей като ако ги няма browser-а или ще го отвори като файл да го четат потребителите или да го слушат. Мисля, че много пъти си виждал как като отвориш .pdf файл през browser-а той ти изкарва самото съдържание в него. А с тези header-и той няма да изкара съдържанието ами ще даде да го изтеглиш файла. :)

В моя случай няма PDF , txt и т.н. файлове, които биха могли да се отворят така. От моя сайт ще могат да се дърпат само "zip" файлове.
 
kopura каза:
Ev0luti0N каза:
Всичките тези header-и казват на browser-а, че това е файл и ти искаш да дадеш на потребителят да го изтегли. Тей като ако ги няма browser-а или ще го отвори като файл да го четат потребителите или да го слушат. Мисля, че много пъти си виждал как като отвориш .pdf файл през browser-а той ти изкарва самото съдържание в него. А с тези header-и той няма да изкара съдържанието ами ще даде да го изтеглиш файла. :)

В моя случай няма PDF , txt и т.н. файлове, които биха могли да се отворят така. От моя сайт ще могат да се дърпат само "zip" файлове.
Според мене, тогава няма да имаш нужда от този вторият вариянт, но се пак е по-удачен и е хубаво да се ползва. :)
 

Back
Горе