Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie plików...
Forum PHP.pl > Forum > Przedszkole
Kamis
Mam cos takiego...
  1. <?php
  2.  
  3. <a target=&#092;"_blank\" 
  4. href=&#092;"http://www.mojastrona.pl/dokwww/komunikaty/$nazwapliku\">PLIK!</a>
  5.  
  6. ?>

Gdzie $nazwapliku to jest plik *.doc (nazwa) pobierany przez formularz php, nazwa pochodzi z bazy... nie wazne.

Chodzi o to czy jest jakas mozliwosc w php by nie otwierał się ten plik w przeglądarce ale jako pobierz/ zapisz? Czy ew. da się to zrobić w zwykłym html (raczej nie) czy coś trzeba kombinować z php.

Co Wy na to?
bela
wyślij nagłowek z odpowiednim typem mime, listę masz przyklejoną w dziale php
Kamis
W pliku przesyłającym mam tak:
  1. <b><u>&nbsp<font color=\"black\">ZAَCZ DOKUMENT</font>&nbsp;</u></b>
  2. <form enctype=\"multipart/form-data\" action=\"plik.php3\" method=\"POST\">
  3. <input type=\"hidden\" name=\"MAX_FILE_SIZE\" value=\"5000000\">
  4. <input name=\"userfile\" type=\"file\">
  5. <input name=\"dodawacz\" value=\"$nowy_id\" type=\"hidden\">
  6. <input type=\"submit\" value=\"Wyslij\">
  7. </form>

jak mam to zmienić? domyślam się ze enctype... ale jak zrobic zeby to byly pliki zarówno *.doc jak i *.xls ? Czy da sie to razem pogodzić? Czy trzeba wpisać jeszcze raz form'a ? - nie wydaje mi sie sad.gif
PHP5wymiatacz
Wygląda na to, że masz wszystko dobrze... nie wiem jak Ci pomóc...
scanner
Cytat(PHP5wymiatacz @ 2004-09-29 08:41:34)
nie wiem jak Ci pomóc...

No.. Z takim nickiem to powinieenś wiedzieć.

Kamis: nagłówki w pliku wysyłającym plik do downloadu, a nie w formularzu uploadu.
Pozatym jeszcze raz nie uzyjesz BBCode, to dostaniesz odemnie warning.
Kamis
scanner -> Pozmieniałem.

Mimo to nadal nie wiem jak to zrobić...

Ten pierwszy mój wpis to właśnie download. Jako form mam wstawic te mime? Nie wiem sad.gif
PHP5wymiatacz
Cytat
scanner:No.. Z takim nickiem to powinieenś wiedzieć.


Nie ma ludzi wszechwiedzących.

Kamis: to pewnie wstawiasz gdzieś w metaznakach... ale nie pytaj się mnie jak winksmiley.jpg
scanner
Cytat
Cytat
No.. Z takim nickiem to powinieenś wiedzieć.
Nie ma ludzi wszechwiedzących.
Ale podstawy są proste.

Kamis: zawsze jeśli dasz bezpośredni link do pliku wykona się domyślna akcja systemowa (w tym przypadku Open). Aby tego uniknąć masz dwa wyjścia:

1. "Zapisz jako..." - piszesz przy pliku informację, iż aby pobrać plik na dysk nalezy kliknąć prawym klawiaszem na link i wybrać "Zapisz element docelowy jako..."

2. Użyć pliki download.php lub innego, w którym wyślesz odpowiednie nagłowki i zawartość pliku.
Jak to zrobić znajdziesz na forum.
Kamis
Czyli zrobic to jakos tak:
  1. <?php
  2.  
  3. header('Content-Type: application/costam');
  4.  
  5. ?>


no tak ale wstawiac to przed tym liniem czy jak? Da sie wpisać dwa headery? bo przecie nie wiadomo czy to doc czy xls a to sa ruzne mime.

Ad 1. Nie bedzie ok. bo baby w mojej pracy otwieraja normalnie w tym nowym oknie w przegladarce... wpisuja caly dzien a potem... naciskaja X i sie dziwia, ze im wszystko znika... a przecie jest informacja jak to robic...

Ad 2. czyt na górze
PHP5wymiatacz
scanner:
Cytat
Ale podstawy są proste.


Jasne, ale swoimi wypowiedziami ani nie pomagasz ani nic... jak wiesz jak to zrobic to po prostu napisz to a nie piszesz

Punkt 1... o tym kazdy wie.
Punkt 2... nie daje zadnej odpowiedzi... jak wiesz to napisz mu konkretnie kod jak to podstawa (pewnie jest to jedna linijka) a nie tak - poszukaj sobie... widzisz, ze chłop sobie nie radzi.

Z resztą... nie wazne... moze mnie poniosło... sorry.

Kamis: wydaje mi sie, że da sie wstawic te dwie linijki.
bregovic
Ok, wiec po koleji:

Masz plik z lista plikow do downloadu:
  1. ...
  2. <a href="download.php?plik=Plik 1.doc">Plik 1.doc</a>
  3. <a href="download.php?plik=Plik 2.doc">Plik 2.doc</a>
  4. ...

I masz plik download.php (skopiowane z sekcji manuala header" title="Zobacz w manualu PHP" target="_manual):
  1. <?php
  2. header('Content-type: application/msword');
  3. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  4. readfile($_GET['plik']);
  5. ?>

I tyle.
Kamis
Dziękuję bardzo smile.gif

1. Dziala dziala... jeszcze jedno pytanko czy da sie jakos ustawic by nazwa sciaganego pliku (ta wpisana w okienku zapisu pliku) nie miala nazwy "download" a nazwe pliku jaka byla pierwotnie?
2. To dziala na worda a jesli dodam mime exela to jest to blad (bo potrzebuje na te dwa formaty).... czy istnieje mozliwosc dodania listy plikow ktore maja byc obslugiwane... czy dla kazdego konkretnego formatu trzeba osobny plik download.... ? da sie jakos to pogodzic w jednym pliku?
scanner
Przecież MIME możesz modyfikowąc w zalezności od chociażby rozszerzenia pliku.
Kamis
Czyli da sie to zrobić if'em? Moglibyście pokazać to na przykładzie skryptu bregovic'a? Tak zeby lapal *doc i *xls. Wielkie dzieki za ew. pomoc.
PHP5wymiatacz
Kamis -> jak wstawisz dwa po sobie header'y to bedzie Ci brał tego ostatniego... moze z tym if'em przejdzie... mad.gif
bregovic
Cytat(Kamis @ 2004-09-30 07:24:25)
Moglibyście pokazać to na przykładzie skryptu bregovic'a?

A moze bys skorzystal z manuala i nauczyl sie programowac sam? My ci tu mozemy poweidzec co i jak krok po kroku - ale jesli sam nie wysuniesz inicjatywy to naprawde nic z tego nie wyjdzie winksmiley.jpg
Kamis
Moje pytania są raczej z nie wiedzy niz z lenistwa... rolleyes.gif

Wstawiam:
  1. <?php
  2. header('Content-type: application/msword');
  3. header('Content-type: application/vnd.ms-excel');
  4. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  5. readfile($_GET['plik']);
  6. ?>

To nie dziala... więc robilem z if...
  1. <?php
  2. if
  3. {
  4. header('Content-type: application/msword');
  5. }
  6. else
  7. {
  8. header('Content-type: application/vnd.ms-excel');
  9. }
  10. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  11. readfile($_GET['plik']);
  12. ?>


i nic... bo bierze to co jest ostatnie... gdzie robię błąd?
bregovic
Nie zakladam ze jestes leniwy - bron boze. Chcialbym tylko abys wzglednie w przyszlosci troche sie rozejrzal zanim zadasz pytanie. Twoim problemem jest brak znajomosci 'if' - wiec naturalnym rozwiazaniem powinno byc wejscie na strone http://php.net/ i wpisanie w wyszukiwarke slowa 'if' i wybranie opcji 'online documentation' - znajdziesz tam gdzies link do strony http://pl.php.net/manual/pl/control-struct...l-structures.if na ktora powinienes wejsc i przeczytac, i zrozumiec, i wyprobowac.
Wtedy powinienes byc w stanie zrozumiec czego ci brakuje dalej do rozwiazania problemu...
Kamis
  1. <?php 
  2. if (header('Content-type: application/msword')==header('Content-type: application/msword') )
  3. {
  4. header('Content-type: application/msword');
  5. }
  6. else
  7. {
  8. if (header('Content-type: application/vnd.ms-excel')==header('Content-type: application/vnd.ms-excel'))
  9. {
  10. header('Content-type: application/vnd.ms-excel');
  11. }
  12. else {echo(&#092;"Brak odpowiedniego formatu !\");
  13. }
  14. }
  15. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  16. readfile($_GET['plik']);
  17. ?>


sadsmiley02.gif można jeszcze jakąś uzyskać wskazówkę? Nie rozwiązanie...
bregovic
To czego potrzebujesz, to sprawdzenie czy w nazwie pliku znajduje sie ciag '.doc' lub '.xls'.
Twoja konstrukcja if jest zbyt zagmatwana. Wystarczy ci taki algorytm:

if( nazwa pliku zawiera .doc )
{
ustaw header dla .doc
}
else
{
ustaw header dla .xls
}

Aby sprawdzic czy ciag zawiera inny ciag mozesz wykorzystac funkcje strpos" title="Zobacz w manualu PHP" target="_manual - np w ten sposob:
  1. <?php
  2.  
  3. strpos($_GET['plik'], '.doc') !== false
  4.  
  5. ?>
scanner
O w mordę jeża...
kamis.. nikt Ci nie powiedział, zebyś lepiej został ogrodniekiem?
To ja mówię...
Powaznie. zastanów się co ty chcesz zrobić i po co Ci to, bo mnie z takimi wątkami jak ten nagła cholera weżmie...

Programiści psia mać...

  1. <?php
  2. switch( substr( $_GET['plik'], 0, -) )
  3. {
  4. case 'doc':
  5. $sMime = &#092;"msword\";
  6. break;
  7. case 'xls':
  8. $sMime = &#092;"vnd.ms-excel\";
  9. break;
  10. default:
  11. die('Unknown file type.' );
  12. break;
  13. {
  14. header('Content-type: application/'.$sMime);
  15. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  16. readfile($_GET['plik']);
  17. ?>


Update:
Solucja 2:
  1. <?php
  2. $aMimes['doc'] = &#092;"msword\";
  3. $aMimes['xls'] = &#092;"vnd.ms-excel\"; 
  4.  
  5. $sFileType = substr( $_GET['plik'], 0, -);
  6.  
  7. if( isset($aMimes[$sFileType])
  8. {
  9. header('Content-type: application/'.$sMime);
  10. header('Content-Disposition: attachment; filename=\"'.$_GET['plik'].'\"');
  11. readfile($_GET['plik']);
  12. }
  13. else
  14. {
  15. die('Unknown file type.' );
  16. }
  17. ?>
bregovic
scanner: kazdy kiedys zaczynal, a to wciarz jest forum php Poczatkujacy winksmiley.jpg
Jestem pewien ze zaden z doswiadczonych programistow nie zalapal od razu co to jest if lub while lub co tam innego - przychodzi z czasem i treningiem winksmiley.jpg
Kamis
scaner:
Cytat
scaner:Kamis.. nikt Ci nie powiedział, zebyś lepiej został ogrodniekiem?
To co napisałeś jest obelżywe w stosunku do mnie. Dział nazywa się php Początkujący i mam prawo nie wiedzieć, popełniać błędy... Pytać się... dochodzic do rozwiązań...

Wiem, że jesteś z zarządu, ale nie znaczy to, że masz prawo mnie obrażać... i innych:
Cytat
Programiści psia mać...
Jeśli masz problemy emocjonalne to nie czytaj tego działu.

Twoje rozwiązanie jest ok.

bregovic -> powoli do wszystkiego dojdę... dzięki za wskazówki i motywację napiszę jeszcze raz skrypcik od podstaw i sprawdzę czy dobrze wychodzi.
scanner
Owszem, jest to php początkujacy.
Co nie zmienia faktu, że konstrukcja IF jest dla średnio inteligentnej doniczki na moim oknie zrozumiała po pierwszym przedyktownaiu jej manuala. O ile oczywistym jest, że nie każdy zrozumie rekurencję, pętle czy inne elementy języka, o tyle elementarne mechanizmy sa tak intuicyjne, że aż boli, gdy ktos próbuje wpisać
  1. <?php
  2. if( true )
  3. {
  4. // do something;
  5. }
  6. else
  7. {
  8. if( true )
  9. {
  10. // do something;
  11. }
  12. else
  13. {
  14. // do something;
  15. }
  16. }
  17.  
  18. ?>
To takie coś już na chłopski rozum nie działa...

Bycie początkujacym nie zwalnia od myślenia.
A wracajac do Kamisa.. Mam nadzieję, kolego, ze przeanalizujesz podaje dwa przykłady z Manualem w ręce i wyjaśnisz mi za kilka dni, co i dlaczego się tam dzieje.
Taka praca domowa.
Kamis
scaner: wcale nie muszę czytać Twoich obelg, że jestem głupszy od Twojej doniczki itp.

Prawda jest taka, że zaczynam dopiero wkęcać się w php... dochodzić powoli do wszystkiego... wiec nie denerwuj się tak bardzo...

Tak czy inaczej php jest ciekawym językiem i będę się starał, pomimo moich błedow poznac go w miare dobrze...

Istnieje nawet powiedzenie, ze czlowiek uczy sie na swoich bledach... Wszyscy poczatkujacy nie bójcie się mylić!

Ps. Scaner i tak mnie nie zniechęcisz do php bo czym bardziej to robisz tym mam większą motywację do nauki.
scanner
1. Proszę, pokaż mi, gdzie napisałem, ze jesteś głupszy od czego/kogo -kolwiek. Nie zrobisz tego, bo nic takiego nie napisałem. Ergo: EOT.

2. Każdy zaczynał. Ale nalezy przy tym wykazywac odrobinę myślenia abstrakcyjnego. Twoje IF'y, były tak bardzo nieprzemyślane, że czytając je nasuwa się tylko jedna myśl: "Nawet nie zajrzał do dokumentacji." Stąd mój ostry ton w poprzedniej wypowiedzi, którego nie neguję i nie mam zamaru łagodzić.

3. Prosże pokaż mi, w jaki to niby sposób (uwzględniając podanie dwu działających przykładów) próbuję zniechęcić Cię do php? Ja kopniakiem próbuje zachęcić Cię (tak jak wiel;e innych osób tutaj) do myślenia. Pozostaje mi sie tylko cieszyć, że moje ostre metody skutkują zwiększeniem Twojej motywacji i jeśli to tak działa, to bardzo proszę, abyś na złość temu cholernemu scannerowi (niech go piekło pochłonie) stał się super-mega-hiper masta od php.

Szczerze i prosto z serca i Tobie i innym tego życzę.

P.S. W kontaktach między ludzkich jest taki potocznie zwany termin "Wjeżdzanie na ambicję" - jak widac na Twoim przykładzie (Twoje P.S.) dzieła to znakomicie.

Peace.
smile.gif
Kamis
Ad1.(ten dzial jest na temat php nie na nasze spory)
Ad2. Chcialem zastosowac petle w petli... no teraz wiem, ze to błąd... jeszcze jest cos takiego jak ifelse... chmm, ale to innt temat.
Ad3. Rozumiem.

Uczmy się, pomagajmy sobie i rozwijajmy php - bo warto! smile.gif

Wyciągam rękę na zgodę.

==============================
======DODANE DZISIAJ=============
==============================

Taraz to naprawde nie wiem...
Wstawilem dwa Twoje skrypty scanner... i mi nie działają! sad.gif Nie wiem... moze to co napisales dziala w tylko w PHP5 albo nie wiem... w dokumentacji PHP4 wszystkie uzyte wyrazenia znalazlem... moze ustawienia php.ini mam zrabane? Ale chyba nie... bo w tedy nie dzialalby mi skrypt pobierania na pojedynczy plik *.doc bregovic'a... z reszta ten skrypty pobiera wszystkie rozszerzenia... ale chce je zapisac w *.doc'u...

Czy istnieje jakas mozliwosc /komenda/ by php wywalal bledy nie modyfikujac nic w php.ini (spolszczone - "pokarz_wszystkie_bledy = ON") ? Uzywam do sprawdzenia
  1. <?php
  2. echo(&#092;"$zmienna\");
  3. ?>
ale w tym przypadku cos jest nie tak wewnatrz programu... Dodam, ze nie mam uprawnien do takiej zmiany czegokolwiek w php.ini.

Zapuscilem jeszcze
  1. <?php phpinfo(); ?>

Mam tam tylko:
upload_max_filesize: 2M 2M
upload_tmp_dir: no value no value
ale tego nie przekraczaja moje pliki...
sad.gif
PHP5wymiatacz
Śledze Twoje poczynania Kamis od samego początku tego tematu... jedno słowo - jesteś BEZNADZIEJNY!

Myśle, ze przy zapisie pliku nie ustawiasz chmod na 0666.... mam racje?
Kamis
Nie masz racji... Ustawiam chmod na 0666 a nawet ryzykowalem z chmod 0777 i nic... tak wiec porada - chybiona winksmiley.jpg
scanner
php5wymiatacz: co ma chmod do problemu?

Kamis: odezwij się do mnie na GG lub Jabberze, bo chyba za bardzo nie rozumiem co chcesz w końcu zrobić a nie ma sensu tutaj czata robić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.