Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Problem z file_get_contents
Forum PHP.pl > Forum > Przedszkole
Skorpion96
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...
trueblue
Usuń @ z linii 4.
Nie wszystkie sandboxy pozwalają na użycie file_get_contents.
Skorpion96
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
trueblue
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?
Skorpion96
$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
trueblue
Przepraszam, $result, nie $licencja.
Co daje
var_dump($result);
po file_get_contents?
Skorpion96
bool(false)
Jak dałem przed $result to miałem string(0)
trueblue
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.
mortus
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).
Skorpion96
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?
viking
Ż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?
Skorpion96
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
viking
A sprawdziłeś jakie jest ustawienie?
Skorpion96
Nie mam wglądu w plik PHP.ini mojego serwera
viking
To jesteś wyjątkowym przypadkiem.
https://www.php.net/manual/en/function.phpinfo.php
https://www.php.net/manual/en/function.ini-get
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.