Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Dostęp do katalogu tylko ze skryptu php / jednorazowe linki
dudek90
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.07.2011

Ostrzeżenie: (0%)
-----


Witam,

Mam pytanie: Czy istnieje możliwość zablokowania dostępu z zewnątrz do katalogu na serwerze?
Chodzi mi o to aby po wpisaniu bezpośredniego adresu w przeglądarce nie było do tego folderu dostępu, natomiast aby skrypt PHP, który znajduje się na serwerze miał do tego folderu swobodny dostęp.

I jeszcze jedno pytanie:
Mam skrypt, który po zapłaceniu odpowiedniej kwoty przez dotpay wyświetla link do pobrania pliku na serwerze.
Chciałbym natomiast zrobić tak aby po zapłaceniu odpowiedniej kwoty tak jak dotychczas wyświetlał się ten link natomiast już po pobraniu pliku link by wygasał.
Podobnie jeśli ktoś nie dokonał opłaty a wkleił link do paska adresu w przeglądarce to aby link był niekatywny (w efekcie czego nie można było by pobrać pliku).

Jak takie coś rozwiązać ?

Za wszelką pomoc z góry dziękuję (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kużdo
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 14
Dołączył: 4.06.2008

Ostrzeżenie: (0%)
-----


Możesz skorzystać z mojego skryptu:
  1. <?php
  2. require_once 'db.php';
  3.  
  4. if(!isset($_GET['hash']) OR !preg_match('/^[a-f0-9]{32}$/', $_GET['hash']) OR !isset($_GET['id']) OR !preg_match('/^[0-9]+$/', $_GET['id']))
  5. {
  6. header('Location: ' . $settings['domain']);
  7. }
  8. elseif(isset($_GET['hash']) AND preg_match('/^[a-f0-9]{32}$/', $_GET['hash']) AND isset($_GET['id']) AND preg_match('/^[0-9]+$/', $_GET['id']))
  9. {
  10. $hash = $_GET['hash'];
  11. switch($_GET['id'])
  12. {
  13. case '1':
  14. $settings['pdf_name'] = '1pdf';
  15. $settings['pdf_path'] = 'sciezka/do/pliku/1pdf.pdf';
  16. break;
  17. case '2':
  18. $settings['pdf_name'] = '2pdf';
  19. $settings['pdf_path'] = 'sciezka/do/pliku/2pdf.pdf';
  20. break;
  21. case '3':
  22. $settings['pdf_name'] = '3pdf';
  23. $settings['pdf_path'] = 'sciezka/do/pliku/3pdf.pdf';
  24. break;
  25. case '4':
  26. $settings['pdf_name'] = '4pdf';
  27. $settings['pdf_path'] = 'sciezka/do/pliku/4pdf.pdf';
  28. break;
  29. case '5':
  30. $settings['pdf_name'] = '5pdf';
  31. $settings['pdf_path'] = 'sciezka/do/pliku/5pdf.pdf';
  32. break;
  33. default:
  34. $error = 'Nieprawidlowy link! Jesli nic nie zmieniales w adresie, to skorzystaj z formularza kontaktowego na stronie i poinformuj o bledzie Administratora.';
  35. break;
  36. }
  37. if(isset($error) AND $error != '')
  38. {
  39. exit($error);
  40. }
  41. $query = "SELECT `dodatki` FROM `" . PREFIX . "zamowienia` WHERE `control` = '{$hash}' LIMIT 1";
  42. $result = mysql_query($query);
  43. if(!mysql_num_rows($result))
  44. {
  45. exit('Nieprawidlowy link! Jesli nic nie zmieniales w adresie, to skorzystaj z formularza kontaktowego na stronie i poinformuj o bledzie Administratora.');
  46. }
  47. $row = mysql_fetch_array($result);
  48. if($row['dodatki'] < '10')
  49. {
  50. $ile = $row['dodatki'] + 1;
  51. $query = "UPDATE `" . PREFIX . "zamowienia` SET `dodatki` = '{$ile}' WHERE `control` = '{$hash}'";
  52. $result = mysql_query($query);
  53. {
  54. $name = basename($settings['pdf_path']);
  55.  
  56. $size = filesize($settings['pdf_path']);
  57.  
  58. header('Pragma: public');
  59. header('Pragma: no-cache');
  60. header('Expires: 0');
  61. header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  62. header('Cache-Control: public ');
  63. header('Content-Description: File Transfer');
  64.  
  65. header('Content-Type: application/force-download');
  66.  
  67. header('Content-Disposition: attachment; filename="' . $settings['pdf_name'] . '.pdf"');
  68.  
  69. header('Content-Transfer-Encoding: binary');
  70. header('Content-Length: ' . $size);
  71.  
  72. readfile($settings['pdf_path']);
  73. }
  74. }
  75. else
  76. {
  77. exit("Nistety, ale wykorzystałeś swój limit pobierania.");
  78. }
  79. }
  80. ?>

Jest to wycinek całego skryptu, ale z pewnością wystarczy Ci do zastosowania u siebie. User nigdy nie pozna prawdziwej ścieżki do pliku, a Ty możesz generować mu nazwy plików dowolne, nie zmieniając przy tym nazwy prawdziwego pliku. Dodatkowo jest tu wymuszone pobieranie pliku, więc nie otworzy się on w przeglądarce. A nawet jeżeli otworzyłby się w przeglądarce, to link i tak nie będzie prawdziwy do pliku. Linki są generowane po zapłacie i wysyłane na maila do klienta, natomiast rozwiązać możesz to w dowolny sposób. Generować i wyświetlać, wysyłać, etc... Ważnym jest tylko to, aby linki (a w sumie sumy kontrolne) były generowane po poprawnej zapłacie (kod OK z dotpaya) i wtedy wysyłane/pokazywane klientowi. Link nawet gdyby został skopiowany, to po wykorzystaniu limitu jest bezużyteczny. W skrypcie też ustawiasz ile razy można pobrać plik, akurat tutaj wkleiłem Ci część od dodatków do głównego produktu i tutaj jest limit 10 pobrań na wszystkie łącznie dodatki, czyli jak pobierze 1 plik 10 razy, to żadnego innego już nie pobierze. Wyliczyć można łatwo, że można każdy plik pobrać 2 razy (IMG:style_emoticons/default/wink.gif) 2 razy to limit zapasowy, gdyby np. klientowi padł net, przerwało się połączenie lub sam przypadkowo anulował pobieranie.

Ten post edytował Kużdo 2.05.2012, 13:43:37
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 16:20