PHP въпрос
27 отговора
0 прегледа
PHP въпрос
имам на сайта си файл /test.zip и в .php страница линк към него
<a href ='test.zip'>download test</a>
Има ли начин линка да продължава са сочи към /test.zip , но при определени условия юзъра да даунлоудва друг файл, примерно /some_dir/test.zip ?
Същото трябва да работи и при директно искане на файла, примерно си пейства в адрес бар [линк] , но сваля /some_dir/test.zip
10х
<a href ='test.zip'>download test</a>
Има ли начин линка да продължава са сочи към /test.zip , но при определени условия юзъра да даунлоудва друг файл, примерно /some_dir/test.zip ?
Същото трябва да работи и при директно искане на файла, примерно си пейства в адрес бар [линк] , но сваля /some_dir/test.zip
10х
Re: PHP въпрос
Да, като сложиш в папката на test.zip един .htaccess файл и вътре опишеш условията, при които усера да даунлоудва друг файл. Изискване е само mod_rewrite да е активиран и условията да са възпроизводими на езика на .htaccess файловете.
Кофти е, че писането на .htaccess файлове е едно от най-противните занимания в уеб програмирането. Синтаксиса е кошмарен, а дебъгване няма. Ето ти един рефърънс към синтаксиа им: [линк]
Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне. Това е по-лесния вариант.
Кофти е, че писането на .htaccess файлове е едно от най-противните занимания в уеб програмирането. Синтаксиса е кошмарен, а дебъгване няма. Ето ти един рефърънс към синтаксиа им: [линк]
Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне. Това е по-лесния вариант.
Re: PHP въпрос
Аз се сещам друг начин - чрез джава скрипт, който да проверява кликането на мишката и посредством кейсове да пренасочва.
Тънкият момент във всички варианти е начинърт на задаване и съответно проверяване на тези условия.
С каква цел искаш да се свали файл "У" вместо файл "Х"?
Тънкият момент във всички варианти е начинърт на задаване и съответно проверяване на тези условия.
С каква цел искаш да се свали файл "У" вместо файл "Х"?
Re: PHP въпрос
Благодаря за отговорите.
С джаваскрипт няма да стане, защото искам файла да се сваля и при директно поискване, т.е. и без кликване на линк към него - ако директно пейстнеш УРЛ-то му в браузър или даунлоуд мениджър.
Причината да искам това е, че досега имаше един файл и адреса му е известен, линкнат е от други сайтове и т.н. , и не искам да му сменям адреса. Сега обаче файловете са няколко, и искам при определени условия да се свали не тоя по дефолт, а някой от другите.
Точно това ми трябва, но още съм начинаещ в ПХП , как и какви хедъри да използвам? Ще е възможно ли да се продължи прекъснат даунлоуд?
10х
С джаваскрипт няма да стане, защото искам файла да се сваля и при директно поискване, т.е. и без кликване на линк към него - ако директно пейстнеш УРЛ-то му в браузър или даунлоуд мениджър.
Причината да искам това е, че досега имаше един файл и адреса му е известен, линкнат е от други сайтове и т.н. , и не искам да му сменям адреса. Сега обаче файловете са няколко, и искам при определени условия да се свали не тоя по дефолт, а някой от другите.
В отговор на:Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне.
Точно това ми трябва, но още съм начинаещ в ПХП , как и какви хедъри да използвам? Ще е възможно ли да се продължи прекъснат даунлоуд?
10х
Re: PHP въпрос
Виж тук е обяснено добре: [линк]
Кодът на 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
Виж тук и друг пример: [линк]
Кодът на 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
Виж тук и друг пример: [линк]
Re: PHP въпрос
с други думи вместо към файла може да сложиш линк към РНР/Java/Perl/etc
който да се занимава със сваляне на файла и праща файл по желание, на части и т.н.
вече какво и как зависи какво си написал ...
People just don't make sense anymore
който да се занимава със сваляне на файла и праща файл по желание, на части и т.н.
вече какво и как зависи какво си написал ...
People just don't make sense anymore
Re: PHP въпрос
Това видео ще ти помогне изключително много.
------------------------------------------
------------------------------------------
Re: PHP въпрос
Проблемът със предложеното решение е, че 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 {
//тук пишеш какво да стане ако нямат право да го свалят.
}
?>
Не съм го тествал, но би трябвало да работи.
Поздрави
:)))
Вместо това, имам друга идея:
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 {
//тук пишеш какво да стане ако нямат право да го свалят.
}
?>
Не съм го тествал, но би трябвало да работи.
Поздрави
:)))
Re: PHP въпрос
хахаха "Не съм го тествал, но би трябвало да работи. "
дали може да си представиш че някои из този форум са правили подобни неща много пъти?
толкова изписа за нещо дето става с няколко реда на РНР/Java

People just don't make sense anymore
дали може да си представиш че някои из този форум са правили подобни неща много пъти?
толкова изписа за нещо дето става с няколко реда на РНР/Java
People just don't make sense anymore
Редактирано от wiz на
Re: PHP въпрос
В отговор на:
дали може да си представиш че някои из този форум са правили подобни неща много пъти?
Има си сефте за всичко :)
В отговор на:
толкова изписа за нещо дето става с няколко реда на РНР/Java
И как точно ще стане с няколко реда?
:)))
Re: PHP въпрос
Предполагам че става с регулярен израз. Аз лично засега не бих казал, че ги разбирам тези изрази, но в тях има голяма сила.
Re: PHP въпрос
С регулярен израз да се изпрати файл към браузъра?
------------------------------------------
------------------------------------------
Re: PHP въпрос
Умничък съм, нали?
Операциите за отваряне и т.н. за файл са други. Имах за идея с изразите да се прави проверката "zip" <-> "php".
Аз даже не зацепвам защо се налага такава гимнастика в htacess файла. Толкова ли няма достъп сорс-кода и нещата да се направят по-елегантно?
Операциите за отваряне и т.н. за файл са други. Имах за идея с изразите да се прави проверката "zip" <-> "php".
Аз даже не зацепвам защо се налага такава гимнастика в htacess файла. Толкова ли няма достъп сорс-кода и нещата да се направят по-елегантно?
Re: PHP въпрос
ами препращаш при липстващ файл(404) към РНР файла
слагаш зип файла някъде извън document root
и с код според случая четеш и пращаш файл по твои избор със съответни headers
общо около 5-6 реда сигурно
ако предпочиташ може и с regular expressions
People just don't make sense anymore
слагаш зип файла някъде извън document root
и с код според случая четеш и пращаш файл по твои избор със съответни headers
общо около 5-6 реда сигурно
ако предпочиташ може и с regular expressions
People just don't make sense anymore
Редактирано от wiz на
Re: PHP въпрос
Аз малко прочетох мненията отгоре-отгоре.
Черпя те един регулярен израз:
preg_match('/^[a-z0-9\_\-]{5,55}\.zip$/i', $string);
Проверява дали подаденият низ се състои от големи и малки латински букви, долна черта и тире с дължина между 5 и 55 символа и дали завършва на .zip
------------------------------------------
Черпя те един регулярен израз:
preg_match('/^[a-z0-9\_\-]{5,55}\.zip$/i', $string);
Проверява дали подаденият низ се състои от големи и малки латински букви, долна черта и тире с дължина между 5 и 55 символа и дали завършва на .zip
------------------------------------------
Re: PHP въпрос
Всички имаме проблем с концентрацията... а програмистите (между другото) са най-разсеяните хора на планетата.
Като намериш свободно време можем да пием по кафе или бира.
Като намериш свободно време можем да пием по кафе или бира.
Re: PHP въпрос
В отговор на:Всички имаме проблем с концентрацията... а програмистите (между другото) са най-разсеяните хора на планетата.
Вярно е.
В отговор на:Като намериш свободно време можем да пием по кафе или бира.
Нямаш ли скътана някоя бутилка домашно винце, ракийка, ликьорче? Особено домашен ликьор унищожавам от раз.
------------------------------------------
Re: PHP въпрос
според вас редно ли е да се гледат кучета и котки в апартамент или къща, като под къща нямам предвид на двора, а вътре при хората
Понеже в другия клуб не мога да пиша ти отговарям тук:
Кучо е на почти 19г. като сме си го взели когато бе на 30 дена.
Котарака се появи преди 6 години, но преди 2 години го пуснахме на свобода. Чисто и просто не свикна къде да пишка, а да вони навсякъде и особено дрехите, които след 5 минути ще ги облечеш за да отидеш на работа, някак си не се търпеше повече.
Иначе много готино се разбираха гадинките. А съседите, разбира се, нямат думата защото всичко това бе заварено положение.
Сега според новия закон могат спокойно да ти наложат глоба на всеки "новодомец".
Понеже в другия клуб не мога да пиша ти отговарям тук:
Кучо е на почти 19г. като сме си го взели когато бе на 30 дена.
Котарака се появи преди 6 години, но преди 2 години го пуснахме на свобода. Чисто и просто не свикна къде да пишка, а да вони навсякъде и особено дрехите, които след 5 минути ще ги облечеш за да отидеш на работа, някак си не се търпеше повече.
Иначе много готино се разбираха гадинките. А съседите, разбира се, нямат думата защото всичко това бе заварено положение.
Сега според новия закон могат спокойно да ти наложат глоба на всеки "новодомец".