Добър ден съфорумници.
Разработвам сайт и стигнах до там, че трябва потребителите да свалят файлове. И така целта е когато някой свали файл във БД да се ъпдейтва полето downloaded но това лесно. Така имам един download.php файл, чрез който става свалянето. Пробвах два варянта.
Първия е моят варянт , който сам измислих:
И втория варянт, който видях в php.net:
Каква е разликата между двете?
Предполагам , че втория варянт е по-удачен.
Но работата е там , че не обичам да слагам така неща без да съм ги разбрал и немога да разбера за какво са всичките тези header-и и какво правят функциите ob_clean() и flush() и въобще кво ще рече термина "output buffer".
Благодаря за отделеното време.
Поздрави.
Разработвам сайт и стигнах до там, че трябва потребителите да свалят файлове. И така целта е когато някой свали файл във БД да се ъпдейтва полето 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".
Благодаря за отделеното време.
Поздрави.