PHP въпрос

27 отговора 0 прегледа
#1

PHP въпрос

имам на сайта си файл /test.zip и в .php страница линк към него
<a href ='test.zip'>download test</a>

Има ли начин линка да продължава са сочи към /test.zip , но при определени условия юзъра да даунлоудва друг файл, примерно /some_dir/test.zip ?
Същото трябва да работи и при директно искане на файла, примерно си пейства в адрес бар [линк] , но сваля /some_dir/test.zip

10х

Отговор
в отговор на Гpиrop-ът #2

Re: PHP въпрос

Да, като сложиш в папката на test.zip един .htaccess файл и вътре опишеш условията, при които усера да даунлоудва друг файл. Изискване е само mod_rewrite да е активиран и условията да са възпроизводими на езика на .htaccess файловете.

Кофти е, че писането на .htaccess файлове е едно от най-противните занимания в уеб програмирането. Синтаксиса е кошмарен, а дебъгване няма. Ето ти един рефърънс към синтаксиа им: [линк]

Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне. Това е по-лесния вариант.

Отговор
в отговор на Гpиrop-ът #3

Re: PHP въпрос

Аз се сещам друг начин - чрез джава скрипт, който да проверява кликането на мишката и посредством кейсове да пренасочва.

Тънкият момент във всички варианти е начинърт на задаване и съответно проверяване на тези условия.

С каква цел искаш да се свали файл "У" вместо файл "Х"?

Отговор
в отговор на croesus #4

Re: PHP въпрос

Благодаря за отговорите.

С джаваскрипт няма да стане, защото искам файла да се сваля и при директно поискване, т.е. и без кликване на линк към него - ако директно пейстнеш УРЛ-то му в браузър или даунлоуд мениджър.
Причината да искам това е, че досега имаше един файл и адреса му е известен, линкнат е от други сайтове и т.н. , и не искам да му сменям адреса. Сега обаче файловете са няколко, и искам при определени условия да се свали не тоя по дефолт, а някой от другите.

В отговор на:

Другият вариант е самият test.zip да е всъщност php файл (а не zip), който може да проверява за най-разнообразни условия и после чрез header() да указва кой файл да се даунлоудне.




Точно това ми трябва, но още съм начинаещ в ПХП , как и какви хедъри да използвам? Ще е възможно ли да се продължи прекъснат даунлоуд?

10х

Отговор
в отговор на Гpиrop-ът #5

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

Виж тук и друг пример: [линк]

Отговор
в отговор на Гpиrop-ът #6

Re: PHP въпрос

с други думи вместо към файла може да сложиш линк към РНР/Java/Perl/etc

който да се занимава със сваляне на файла и праща файл по желание, на части и т.н.

вече какво и как зависи какво си написал ...

People just don't make sense anymore
Отговор
в отговор на Гpиrop-ът #7

Re: PHP въпрос

Това видео ще ти помогне изключително много.

------------------------------------------

Отговор
в отговор на croesus #9

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 {
//тук пишеш какво да стане ако нямат право да го свалят.
}

?>

Не съм го тествал, но би трябвало да работи.

Поздрави

:)))
Отговор
в отговор на sashometallico #10

Re: PHP въпрос

хахаха "Не съм го тествал, но би трябвало да работи. "

дали може да си представиш че някои из този форум са правили подобни неща много пъти?

толкова изписа за нещо дето става с няколко реда на РНР/Java



People just don't make sense anymore

Редактирано от wiz на

Отговор
в отговор на wiz #11

Re: PHP въпрос

В отговор на:


дали може да си представиш че някои из този форум са правили подобни неща много пъти?




Има си сефте за всичко :)

В отговор на:


толкова изписа за нещо дето става с няколко реда на РНР/Java




И как точно ще стане с няколко реда?

:)))
Отговор
в отговор на sashometallico #12

Re: PHP въпрос

Предполагам че става с регулярен израз. Аз лично засега не бих казал, че ги разбирам тези изрази, но в тях има голяма сила.

Отговор
в отговор на UbuHtu Man 11x #13

Re: PHP въпрос

С регулярен израз да се изпрати файл към браузъра?

------------------------------------------

Отговор
в отговор на Дaвaщия и взимaщия #14

Re: PHP въпрос

Умничък съм, нали?

Операциите за отваряне и т.н. за файл са други. Имах за идея с изразите да се прави проверката "zip" <-> "php".

Аз даже не зацепвам защо се налага такава гимнастика в htacess файла. Толкова ли няма достъп сорс-кода и нещата да се направят по-елегантно?

Отговор
в отговор на sashometallico #15

Re: PHP въпрос

ами препращаш при липстващ файл(404) към РНР файла
слагаш зип файла някъде извън document root
и с код според случая четеш и пращаш файл по твои избор със съответни headers

общо около 5-6 реда сигурно

ако предпочиташ може и с regular expressions

People just don't make sense anymore

Редактирано от wiz на

Отговор
в отговор на UbuHtu Man 11x #16

Re: PHP въпрос

Аз малко прочетох мненията отгоре-отгоре.

Черпя те един регулярен израз:

preg_match('/^[a-z0-9\_\-]{5,55}\.zip$/i', $string);

Проверява дали подаденият низ се състои от големи и малки латински букви, долна черта и тире с дължина между 5 и 55 символа и дали завършва на .zip

------------------------------------------

Отговор
в отговор на Дaвaщия и взимaщия #17

Re: PHP въпрос

Всички имаме проблем с концентрацията... а програмистите (между другото) са най-разсеяните хора на планетата.

Като намериш свободно време можем да пием по кафе или бира.

Отговор
в отговор на UbuHtu Man 11x #18

Re: PHP въпрос

В отговор на:

Всички имаме проблем с концентрацията... а програмистите (между другото) са най-разсеяните хора на планетата.



Вярно е.

В отговор на:

Като намериш свободно време можем да пием по кафе или бира.



Нямаш ли скътана някоя бутилка домашно винце, ракийка, ликьорче? Особено домашен ликьор унищожавам от раз.

------------------------------------------

Отговор
в отговор на Дaвaщия и взимaщия #19

Re: PHP въпрос

Нямам.

Нито у дома, нито в квартирата.

Даже не се пуши при мен.

Отговор
в отговор на Дaвaщия и взимaщия #20

Re: PHP въпрос

според вас редно ли е да се гледат кучета и котки в апартамент или къща, като под къща нямам предвид на двора, а вътре при хората

Понеже в другия клуб не мога да пиша ти отговарям тук:
Кучо е на почти 19г. като сме си го взели когато бе на 30 дена.
Котарака се появи преди 6 години, но преди 2 години го пуснахме на свобода. Чисто и просто не свикна къде да пишка, а да вони навсякъде и особено дрехите, които след 5 минути ще ги облечеш за да отидеш на работа, някак си не се търпеше повече.

Иначе много готино се разбираха гадинките. А съседите, разбира се, нямат думата защото всичко това бе заварено положение.

Сега според новия закон могат спокойно да ти наложат глоба на всеки "новодомец".

Отговор