Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Problem z file_get_contents
Skorpion96
post 29.03.2023, 23:07:58
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


Witam, mam pewien problem z kodem, piszę własny sytem licencjonowania i irytuje mnie już ża coś nagle przestało działać... jeszcze do jakiegoś czasu wszystko było ok aż nagle skrypt zaczął wywalać błąd a raczej braku klucza lub jego poprawność....
W module mam taki kod:

  1. <?php
  2. $url = $_SERVER['SERVER_NAME'];
  3. $licencja = $config['activate']; // wynik to RWYY2-E0LAN-0AZHQ-C5CXH
  4. $lic = $licencja;
  5. $result = @file_get_contents("http://moja-strona.pl/api/modul_1/veryfication_license.php?domain={$url}&key={$licencja}");
  6. if($result === $lic){
  7. $message = "<div class=\"alert alert-success alert-green alert-styled-left alert-arrow-left alert-component\">Licencja w Pełni Aktywna dla serwisu <b><span style='color:red'>{$url}</span></b></div>";
  8. $status_licence = "<div style='color:green'><b>Licencja Aktywna - Pełna</b></div>";
  9. }elseif($result !== $licencja) {
  10. $message = "<div class=\"alert alert-danger alert-red alert-styled-left alert-arrow-left \">Brak Klucza Licencyjnego lub podany Klucz licencyjny jest nieprawidłowy</div>";
  11. $status_licence = "<div style='color:red'><b>Klucz Licencyjny jest niepoprawny</b></div>";
  12. }
  13. if($licencja == NULL){
  14. $message = "<div class=\"alert alert-warning alert-orange alert-styled-left alert-arrow-left \">Brak Klucza Licencyjnego. Aby w pełni korzystać z modułu przejdź na stronę <a href='http://moja-strona.pl/api/modul_1/index.php' target=\"_blank\">MOJA Strona</a> aby wykupić klucz licencyjny</div>";
  15. $status_licence = "<div style='color:orange'><b>Brak klucza licencyjnego - Testowa wersja</b></div>";
  16. }
  17.  
  18. // poniższe kody dawałem do wyświetlania zawartości
  19. echo $message;
  20. echo "<br><br>Wynik z strony:<br>";
  21. echo $result;
  22. ?>


W pliku veryfication_license.php mam kod:
  1. <?php
  2. //Walidacja danych przekazanych po adresie (metoda GET)
  3.  
  4. if(isset($_GET['domain']) && trim($_GET['domain']) != '')
  5. $domain = $_GET['domain'];
  6. else
  7. {
  8. //header("Location:http://www.strona_glowna.pl");
  9. echo "niekompletny adres";
  10. exit();
  11. }
  12.  
  13. if(isset($_GET['key']) && trim($_GET['key']) != '')
  14. $key = $_GET['key'];
  15. else
  16. {
  17. //header("Location:http://www.strona_glowna.pl");
  18. echo "niekompletny adres";
  19. exit();
  20. }
  21.  
  22.  
  23.  
  24. //załączamy pliki i łaczymy się z bazą danych
  25.  
  26. include_once('lib/mysqli.php');
  27. include('lib/query_string.php');
  28.  
  29. $mydata = new Tmysqli('lib/config.ini');
  30.  
  31.  
  32. $my_qr = sprintf($query_user_domain_key,$domain, $key);
  33. $mydata -> SetQuery($my_qr);
  34.  
  35. if($mydata->CouRec() > 0){
  36. echo $key;
  37. }
  38. else{
  39. echo "<div class=\"alert alert-warning alert-orange alert-styled-left alert-arrow-left \">Brak Klucza Licencyjnego. Aby w pełni korzystać z modułu Online przejdź na stronę <a href='http://moja-strona/index.php' target=\"_blank\">Moja Strona</a> aby wykupić klucz licencyjny</div>";
  40. }
  41. $mydata->DBClose();


gdy ręcznie w wyszukiwarce się wpisze adres z file_get_content podmieniając tagi na adres strony i klucz to pokazuje wszystko poprawnie natomiast moduł pokazuje mi błąd z funkcji
  1. elseif($result !== $licencja) {


wyświetlanie ręcznie zmiennej $result nie pokazuje dosłownie nic a przy zmiennej $message pokazuje tą informację o błędnej liceencji... co najlepsze sprawdzałem kod na różnych sandboxach dostępnych w internecie, na 3 z pośród kilkunastu stron takich komunikat wyświetlał poprawnie że klucz prawidłowy ale na większości to samo: błędny klucz lub jego brak...

Używam PHP 8.2
Co tutaj mogło się zepsuć?

Dodam że plik sprawdzający klucz łączy się z bazą danych gdzie ten klucz się znajduje a prawa pliku (CHMOD) to 644, nic z tym nie było zmieniane ani ruszane...
Go to the top of the page
+Quote Post
trueblue
post 30.03.2023, 06:10:24
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Usuń @ z linii 4.
Nie wszystkie sandboxy pozwalają na użycie file_get_contents.


--------------------
Go to the top of the page
+Quote Post
Skorpion96
post 30.03.2023, 06:36:36
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


Niestety dalej to samo... A moduł który wykorzystuje sprawdzanie licencji znajduje się na stronie klienta i dzięki tej zmiennej łączy się z moją stroną więc nie wykorzystuje sandboxów, z tego ja sprawdzałem czy czegoś nie pomieszałem.
Może jest jakaś inna zmienna zamiast file_get_contents która zadziała i będzie zgodna z najnowszą wersją PHP 8.2
Go to the top of the page
+Quote Post
trueblue
post 30.03.2023, 07:12:44
Post #4





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Sprawdzałeś jaką wartość ma licencja po użyciu file_get_contents?
  1. var_dump($licencja);

Masz włączone wyświetlanie błędów w PHP?


--------------------
Go to the top of the page
+Quote Post
Skorpion96
post 30.03.2023, 09:20:35
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


$licencja wartość brana jest z pliku konfiguracyjnego, użytkownik dostaje klucz, wprowadza go w ustawieniach i zapisuje w pliku konfiguracyjnym, użyciu file_get_contents w $licencja nie zachodzą żadne zmiany. Z file_get_contents ma pobierać wartość z mojego portalu i porównywać dane czy użyty klucz przez użytkownika jest zgodny z kluczem który znajduje się w mojej bazie oraz czy klucz jest przypisany do domeny na której został wprowadzony. Jeszcze do niedawna całość działało i nie wiem kiedy się coś popsuło. Zmiana wersji PHP nie pomaga sad.gif
Go to the top of the page
+Quote Post
trueblue
post 30.03.2023, 10:16:45
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Przepraszam, $result, nie $licencja.
Co daje
var_dump($result);
po file_get_contents?


--------------------
Go to the top of the page
+Quote Post
Skorpion96
post 30.03.2023, 10:39:09
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


bool(false)
Jak dałem przed $result to miałem string(0)
Go to the top of the page
+Quote Post
trueblue
post 30.03.2023, 10:56:29
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Zajrzyj do dokumentacji file_get_contents i sprawdź kiedy zwraca false (sekcja Return Values) oraz sekcja Tip.

Nie bardzo wiem skąd wynik string(0). Czy to był wynik z var_dump($licencja)? Jeśli tak, to po prostu wartość nie jest pobierana z $config.


--------------------
Go to the top of the page
+Quote Post
mortus
post 31.03.2023, 13:47:18
Post #9





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Jeżeli $licencja odczytana z konfiguracji jest NULL, to po co w ogóle sprawdzać ją po stronie twojego serwera funkcją file_get_contents(). Chyba wypadałoby kolejność działań zmienić.

file_get_contents() może u Ciebie zwrócić albo tekst "niekompletny adres" albo tekst zapisany w zmiennej $key albo cały div z informacją "<div class=\"alert alert-warning alert-orange alert-styled-left alert-arrow-left \">Brak Klucza Licencyjnego. Aby w pełni korzystać z modułu Online przejdź na stronę <a href='http://moja-strona/index.php' target=\"_blank\">Moja Strona</a> aby wykupić klucz licencyjny</div>" albo false/NULL w określonych przypadkach.

Jeżeli dla trzech stron działa to prawidłowo, to znaczy, że każda inna strona jak kolega @trueblue wspomniał nie pobiera wartości z $config albo pobiera wartość nieprawidłową (może to być nawet spacja na końcu łańcucha znaków, czy jakiś znak specjalny).
Go to the top of the page
+Quote Post
Skorpion96
post 1.04.2023, 00:15:21
Post #10





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


ok znalazłem pewien błąd którego mocno nie rozumiem...
Na początek powiem że stronę mam postawioną na hostingu proserwer.pl tam podstawową domeną jest xaa.pl, mam jednak u nich również wykupioną oraz podpiętą domenę bez xaa i teraz tak:
gdy w file_get_content jest w adresie podana domena: moja-strona.pl to wywala błąd bool(false) natomiast gdy zamienię na moja-strona.xaa.pl (czyli główna domena) to wszystko działa jak powinno więc pytanie w czym może tkwić problem by przypadkiem niepotrzebnie pisać do dostawcy serwera?
Go to the top of the page
+Quote Post
viking
post 1.04.2023, 06:10:31
Post #11





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Żeby zdalne includowanie działało misia być włączone https://www.php.net/manual/en/filesystem.co...allow-url-fopen patrzyłeś na php.ini tego hosta?


--------------------
Go to the top of the page
+Quote Post
Skorpion96
post 1.04.2023, 09:24:02
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


hmm niby można ten parametr samemu wprowadzić w pliku .user.ni lub .htacess ale dalej nie działa więc napiszę do supportu hostingu o sprawdzenie tej opcji
Go to the top of the page
+Quote Post
viking
post 1.04.2023, 09:39:36
Post #13





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A sprawdziłeś jakie jest ustawienie?


--------------------
Go to the top of the page
+Quote Post
Skorpion96
post 1.04.2023, 09:44:25
Post #14





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 14.03.2023

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


Nie mam wglądu w plik PHP.ini mojego serwera
Go to the top of the page
+Quote Post
viking
post 1.04.2023, 10:21:15
Post #15





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


To jesteś wyjątkowym przypadkiem.
https://www.php.net/manual/en/function.phpinfo.php
https://www.php.net/manual/en/function.ini-get


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:03