|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
Тема
|
PHP въпрос
|
|
Автор |
Гpиrop-ът (новак) |
Публикувано | 12.02.12 23:25 |
|
имам на сайта си файл /test.zip и в .php страница линк към него
<a href ='test.zip'>download test</a>
Има ли начин линка да продължава са сочи към /test.zip , но при определени условия юзъра да даунлоудва друг файл, примерно /some_dir/test.zip ?
Същото трябва да работи и при директно искане на файла, примерно си пейства в адрес бар http://domain.com/test.zip , но сваля /some_dir/test.zip
10х
| |
|
Да, като сложиш в папката на test.zip един .htaccess файл и вътре опишеш условията, при които усера да даунлоудва друг файл. Изискване е само mod_rewrite да е активиран и условията да са възпроизводими на езика на .htaccess файловете.
Кофти е, че писането на .htaccess файлове е едно от най-противните занимания в уеб програмирането. Синтаксиса е кошмарен, а дебъгване няма. Ето ти един рефърънс към синтаксиа им:
Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне. Това е по-лесния вариант.
| |
|
Аз се сещам друг начин - чрез джава скрипт, който да проверява кликането на мишката и посредством кейсове да пренасочва.
Тънкият момент във всички варианти е начинърт на задаване и съответно проверяване на тези условия.
С каква цел искаш да се свали файл "У" вместо файл "Х"?
| |
|
Благодаря за отговорите.
С джаваскрипт няма да стане, защото искам файла да се сваля и при директно поискване, т.е. и без кликване на линк към него - ако директно пейстнеш УРЛ-то му в браузър или даунлоуд мениджър.
Причината да искам това е, че досега имаше един файл и адреса му е известен, линкнат е от други сайтове и т.н. , и не искам да му сменям адреса. Сега обаче файловете са няколко, и искам при определени условия да се свали не тоя по дефолт, а някой от другите.
В отговор на:
Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне.
Точно това ми трябва, но още съм начинаещ в ПХП , как и какви хедъри да използвам? Ще е възможно ли да се продължи прекъснат даунлоуд?
10х
| |
|
Виж тук е обяснено добре:
Кодът на test.zip:
<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
readfile('example.zip');?> --- тук указваш кой точно файл да се даунлоудне.
"Content-Type" може да е application/zip, application/x-zip, application/x-zip-compressed, application/octet-stream, application/x-compress, application/x-compressed, multipart/x-zip
Виж тук и друг пример:
| |
|
с други думи вместо към файла може да сложиш линк към РНР/Java/Perl/etc
който да се занимава със сваляне на файла и праща файл по желание, на части и т.н.
вече какво и как зависи какво си написал ...
People just don't make sense anymore
| |
|
ще ти помогне изключително много.
------------------------------------------
| |
|
Това видео и на Наков ще помогне.
| |
|
Проблемът със предложеното решение е, че web сървърът няма да знае, че новият test.zip всъщност е PHP и няма да го parse-не (освен ако web сървърът не е настроен по този начин, което е малко вероятно за shared хостинг).
Вместо това, имам друга идея:
1. Забраняваш директен http достъп до zip файла:
1.1 Създаваш нова директория (например /data)
1.2 Преместваш zip файла в нея
1.3. Забраняваш достъп до нея като:
Създаваш нов .htaccess файл в нея, със съдържание "deny from all" (без кавичките)
1.4. Така в новата директория трябва да има два файла (test.zip и .htaccess)
2. Правиш пренасочване на стария URL на zip файла към нов php файл чрез .htaccess:
ако преди zip-ът се е казвал test.zip и е бил във root директорията на сайта, примерен redirect във .htaccess би изглеждал така:
Redirect 301 test.zip test.php
Тоест създаваш .htaccess файл със това съдържание във папката където беше test.zip преди.
3. Правиш нов файл test.php и във него си правиш проверките и логиките:
<?php
if ( /* условията при които те могат да свалят файла */ ) {
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="./data/test.zip"');
header('Content-Transfer-Encoding: binary');
readfile('./data/test.zip');
}
else {
//тук пишеш какво да стане ако нямат право да го свалят.
}
?>
Не съм го тествал, но би трябвало да работи.
Поздрави
:)))
| |
|
хахаха "Не съм го тествал, но би трябвало да работи. "
дали може да си представиш че някои из този форум са правили подобни неща много пъти?
толкова изписа за нещо дето става с няколко реда на РНР/Java
People just don't make sense anymoreРедактирано от wiz на 03.03.12 17:45.
| |
|
Страници по тази тема: 1 | 2 | 3 | (покажи всички)
|
|
|