Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[PHP] Ilość pobrań zapisana w folderze określonej stałą.

11111olo 22 Mar 2012 11:36 3014 42
  • #1 22 Mar 2012 11:36
    11111olo
    Poziom 43  

    Witam.
    Chciałbym aby do pliku tekstowego, znajdującego się w folderze, zapisywała się ilość pobrań plików. Niestety coś mi nie wychodzi.

    pobierz.php

    Kod: php
    Zaloguj się, aby zobaczyć kod


    pobran.php
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Jeśli w pliku pobran.php zmienię linie ze stałą DATA_DIR na "test" to wszystko działa ok. Jednak strona nie jest tworzona za pomocą jakiegoś automatu typu Joomla itd. Testując poprawność linków do pobrania chciałbym aby plik odpowiadający za ilość pobrań znajdował się w folderze zdefiniowanym stałą DATA_DIR. Spowoduje to wypatrzenie ilości pobrań testowych wykonanych przeze mnie.

    http://c64.com.pl/pobierz.php
    Jak widać po kliknięciu odnośnika Pobierz plik, że niby jest ok, jednak licznik pobrań nie jest aktualizowany.
    Na czym polega problem?

    0 29
  • #2 22 Mar 2012 13:45
    arnoldziq
    Moderator Programowanie

    Utwórz na serwerze katalog, którego nazwa powinna być na tyle skomplikowana, żeby nikt jej nie odgadł. W moim przypadku jest to : plikiwjakimsukrytymkatalogu/. Skopiuj do niego pliki, które chcesz udostępniać.
    Następnie "odpal" zamieszczony poniżej skrypt. Jest to modyfikacja skryptu z tego wątku : [PHP] Ukrycie linku do pliku, wraz z dodanymi procedurami, które zapisują ilość pobrań.
    Teraz będziesz miał kontrolę nad tym, co i ile razy jest pobierane, a poza tym nikt nie będzie pobierał plików "na lewo", zapamiętując bezpośredni do nich link.
    Możesz nawet łatwo ograniczyć ilość pobrań...
    Przyjemnej zabawy.

    Kod: php
    Zaloguj się, aby zobaczyć kod

    0
  • #3 22 Mar 2012 14:14
    11111olo
    Poziom 43  

    Wkleiłem ten kod i nie jest to do końca o co mi chodziło, choć muszę przyznać, że pokazywanie losowego adresu URL jest fajne.

    Zmieniłem jedynie nazwę katalogu.

    Code:
    //tajemniczy katalog zawierajacy pliki
    $katalog_zrodlowy = "test/";


    Jednak chciałbym jakoś odwoływać się do tego pliku (pobierz.php) z innego pliku lub kawałka kodu.
    Napiszę, jak to jest teraz zrobione.

    Przykładowo - chcę dodać jakiś plik do pobrania, więc:

    Code:
    <?php
    $id = 'adrespliku.rar';
    include ('download.php');
    ?>


    Jeszcze jedna rzecz, jaka mi się nie podoba, to komunikat "Kliknij, aby pobrać", czyli dwukrotne klikanie.

    Najlepsze jest to, że po kliknięciu linku plik się nie pobiera, jest tylko komunikat, że nie znaleziono strony.

    0
  • #4 22 Mar 2012 14:43
    arnoldziq
    Moderator Programowanie

    A jak to umieściłeś ten skrypt na stronie ? Coś pokręciłeś z nazwami katalogów.
    Zmodyfikuj ten fragment :

    Kod: php
    Zaloguj się, aby zobaczyć kod

    Tak, żeby pokazywał nazwę pliku, rozmiar i ilość pobrań i możesz wywołać skrypt tak :
    Cytat:

    Może to wyglądać np. tak :
    Kod: php
    Zaloguj się, aby zobaczyć kod


    Jak ja to umieszczę na swojej stronie, to działa to tak : Link.

    Dodano po 16 [minuty]:

    A błąd, który pokazuje się na twojej stronie, wynika z zablokowania pliku pobran.dat za pomocą flock.
    Umieść pliki które chcesz udostępniać w innym katalogu, niż plik pobrań.dat i wszystko będzie grało. Chyba że chcesz wszystkim udostępnić informację, jakie pliki i ile razy ktoś pobierał z twojego serwera :/

    0
  • #6 22 Mar 2012 15:33
    arnoldziq
    Moderator Programowanie

    Dokładnie.
    Teraz możesz sobie wywołać ten skrypt np. tak :

    Cytat:
    pobranie.php?przygotuj=nazwa_pliku.zip

    0
  • #7 22 Mar 2012 15:40
    11111olo
    Poziom 43  

    I nie działa właściwie.
    Plik się nie pobiera.

    Napisałem w nowym pliku html

    Kod: html4strict
    Zaloguj się, aby zobaczyć kod


    I na 200% plik zawierający ilość pobrań oraz plik pobierany jest w innych folderach.

    Czy problemem mogą być atrybuty plików, choć ich nie zmieniałem?

    http://c64.com.pl/test.html

    0
  • Pomocny post
    #8 22 Mar 2012 15:48
    arnoldziq
    Moderator Programowanie

    Ja dostaję taki komunikat na twojej stronie :
    [PHP] Ilość pobrań zapisana w folderze określonej stałą.
    Co mniej więcej oznacza, ze plik nie może być odczytany z twojego serwera.
    Może masz ograniczone prawa odczytu z tego folderu, gdzie jest ten plik ?
    U mnie, ten skrypt działa bez problemu. Co możesz sobie sprawdzić pod jednym z linków, które podałem wcześniej.
    http://arnold.elektroda.eu/pobieranie/?przygotuj=index_O3.zip

    0
  • #9 22 Mar 2012 15:54
    11111olo
    Poziom 43  

    Nie wiem na czym polega problem, że to nie działa.
    http://c64.com.pl/index.php/cafan0.html
    Jak widać plik się pobiera.
    Skrypt wygląda nie mal identycznie jak ten z mojego pierwszego postu, z ta różnicą że zamiast

    Code:
    DATA_DIR . "/

    jest " oraz $id i definicja DATA_DIR znajdują się w innych plikach.
    $id w pliku ze stroną pobierania a DATA_DIR w index.php.

    0
  • Pomocny post
    #10 22 Mar 2012 16:06
    arnoldziq
    Moderator Programowanie

    Słuchaj...
    To twoja strona i zrobisz co zechcesz...
    Tylko się nie zdziw, jak zamiast twojego skryptu :
    http://c64.com.pl/down.php?id=downloads/ca-fan/CAfAN0.rar
    Znajdziesz gdzieś u kogoś na stronie, albo na forum :
    http://c64.com.pl/downloads/ca-fan/CAfAN0.rar
    I zostaniesz darmowym "udostepniaczem" plików i nawet się o tym nie dowiesz... :/
    Co do definicji tego DATA_DIR, to nie mogę zrozumieć po co ci to, skoro to jest tylko katalog w którym składujesz plik pobran.dat.
    Zapisz ścieżkę do tego pliku na stałe i po kłopocie.

    0
  • #12 22 Mar 2012 16:13
    arnoldziq
    Moderator Programowanie

    Masz na stronie jakieś chore przekierowania... pewnie dlatego.
    Wszystkie strony u ciebie wyświetlają się dziwnie :c64.com.pl/index.php/aktualizacja2009.html
    Albo namieszałeś coś z katalogami.

    0
  • #13 24 Mar 2012 08:40
    11111olo
    Poziom 43  

    Skoro Tobie to działa, jak to widać na przykładzie, to może jednak ja coś zrobiłem nie tak lub nie mam czegoś ustawionego w .htaccess.
    Może podeślij wszystkie pliki z przykładu. Jeśli po wysłaniu uch do jakiegoś folderu, nie związanego ze strona nadal to nie bedzie działało, to nie wiem w czym tkwi problem.

    0
  • Pomocny post
    #14 06 Lip 2012 13:24
    arnoldziq
    Moderator Programowanie

    Zgodnie z prośbą autora tematu, zamieszczam cały katalog "pobieranie". Katalog zawiera cały projekt PHP oraz podane przeze mnie przykładowe pliki. Link do uruchomionego projektu jest zamieszczony w jednym z linków we wcześniejszych postach.

    0
    Załączniki:
  • Pomocny post
    #16 06 Lip 2012 13:38
    arnoldziq
    Moderator Programowanie

    11111olo napisał:
    Kod:
    ob_clean();


    To pod koniec listingu.
    Co robi ta linia kodu?

    To jest funkcja która czyści tzw. Output Buffer, czyli bufor wyjściowy, przed zapisaniem do niego szukanego pliku i wysłaniem go do użytkownika.

    0
  • #18 06 Lip 2012 14:01
    arnoldziq
    Moderator Programowanie

    Ta linia powoduje przygotowanie bufora servera, do wysłania pliku.
    Nie jest to niezbędne, to tylko środek bezpieczeństwa. Takie czyszczenie powoduje, że żadne "śmieci" nie będą się pałętać w buforze, w czasie wysyłania.
    Jeżeli dział to, na twojej stronie, to pomiń to czyszczenie.

    0
  • #20 06 Lip 2012 17:20
    arnoldziq
    Moderator Programowanie

    Uruchom to u siebie, z jednym lub dwoma plikami i podaj jeszcze raz link.
    Na czym polega ten błąd?

    0
  • #22 06 Lip 2012 17:46
    arnoldziq
    Moderator Programowanie

    Czyli, najprawdopodobniej, w buforze wyjściowym jest ciągle "kawałek" strony, albo wartości nagłówków.

    0
  • #23 06 Lip 2012 17:51
    11111olo
    Poziom 43  

    Coś naknociłem, bo Twój przykład, który dziś zamieściłeś działa prawidłowo nawet po odznaczeniu ob_clean();

    Nie podoba mi się to że jest wyświetlana lista plików więc to odznaczyłem.

    Kod wygląda tak.

    Kod: php
    Zaloguj się, aby zobaczyć kod


    oraz plik pobierz.php

    Kod: php
    Zaloguj się, aby zobaczyć kod


    DATA_DIR jest definiowana na początku.
    Rozmiar pliku i ilość pobrań działa poprawnie.

    Co tym razem zrobiłem nie tak?

    A teraz z tego co wysłałeś.
    Nie wiem w czym tkwi problem oraz czy nawet jak ta linia z czyszczeniem buforu jest wykonywana, czy działa to poprawnie.


    http://c64.com.pl/pobieranie/

    Link

    Pobierz najpierw ten plik za pomocą Twojego skryptu a później bezpośrednim linkiem.

    Ciekawe jest to że zip-y się pobierają poprawnie, natomiast pliki z innymi rozszerzeniami już nie.

    0
  • #24 09 Lip 2012 10:04
    arnoldziq
    Moderator Programowanie

    U mnie, jak pobieram plik bezpośrednio z linku, otwiera się on w formie krzaczków na ekranie przeglądarki.
    Pierwsze od czego bym zaczął, to usunięcie znaków spacji z nazwy.
    Potem, jak to nie pomoże, przepakowanie tego pliku do normalnego ZIP-a...

    0
  • #26 09 Lip 2012 10:25
    arnoldziq
    Moderator Programowanie

    Link tworzony skryptem, nie pobiera mi niczego.
    Może uruchom skrypt, tylko na razie, tak, żeby pokazywał prawdziwy link do pliku i jego rozmiar.
    Rozumiem, że ten pierwszy skrypt, który pokazuje listę plików, działa w miarę normalnie.
    Zmień proszę końcówkę tego skryptu w ten sposób :

    Kod: php
    Zaloguj się, aby zobaczyć kod
    I zobaczymy, czy program wskazuje na poprawną ścieżkę i nazwę pliku, oraz rozmiar.

    0
  • #28 09 Lip 2012 11:14
    arnoldziq
    Moderator Programowanie

    Powiem Ci, że nie mam żadnego pomysłu :(
    Niepokoi mnie tylko brak możliwości użycia ob_clean();
    Możesz sprawdzić jaką wersje PHP posiadasz?

    0
  • #30 09 Lip 2012 11:33
    arnoldziq
    Moderator Programowanie

    Umieść gdzieś na serwerze taki skrypt :

    Kod: php
    Zaloguj się, aby zobaczyć kod

    W pierwszym okienku, na samej górze, pokaże Ci się wersja PHP.
    A poniżej wszystkie informacje o twojej konfiguracji PHP.

    0