niedawno zmieniłem serwer (co z perspektywy czasu wydaje mi się teraz głupotą, administracja jest naprawdę ciężka w rozmowach, czymkolwiek) na linuxpl.com. Pracuję nad skryptem który musi łączyć się z serwerem zewnętrznym i zalogować przez panel. Wszystko pięknie działa, ale na starym serwerze. Nowy ma ustawione open_basedir na kilka katalogów przez co curl pluje się fatal errorami przy użyciu curlopt_followlocation (nie działa bez).
Tak więc przeszukałem internet (w tym komentarze na manualu php) w poszukiwaniu odpowiedzi i natknąłem się na liczne zastępcze funkcje, które nawet wyglądają sensownie, jednak żadna z nich nie robi tego, co powinna, czyli nie eliminuje błędu. Konkretnie błąd jaki dostaję jest na serwerze i jawi się tajemniczym SessionTimeout (zapewne przy próbie przeniesienia się po zalogowaniu i odpowiedzi "nie" ze strony serwera, tamten ustawia taką odpowiedź i cóż).
Skrypt jest raczej mi potrzebny więc nie mogę sobie go darować, a skoro już działa, to nie mam zamiaru pisać go od nowa (swoją drogą nie wiem jak inaczej miałbym się zalogować na tamten serwer przy użyciu czegoś innego niż curl), co również wiąże się z wieloma godzinami pracy od nowa...
Ma ktoś więc jakiś pomysł jak z tym sobie poradzić? Z tego co zauważyłem, to cookiesy się źle zapisują (pewnie nie wszystkie, bo rozmiar na tym serwerze z open_basedir pliku cookies.txt jest prawie połowę mniejszy niż tego na tym sprawnym).
Kod mogę załączyć, ale nie wiem czy coś zmienia to tu...
Kod
$cookies_location = dirname(__FILE__)."/cookies.txt";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www1.plus.pl/sso/logowanie/auth");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "login=$login&password=$password&action=login&success-url=http://www1.plus.pl/bsm/auth");
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies_location);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies_location);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //Bez tego nie działa, z jest "Fatal Error" :/
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_exec($curl);
curl_close($curl);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://www1.plus.pl/sso/logowanie/auth");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, "login=$login&password=$password&action=login&success-url=http://www1.plus.pl/bsm/auth");
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookies_location);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookies_location);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); //Bez tego nie działa, z jest "Fatal Error" :/
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_exec($curl);
curl_close($curl);
Coś czuje że administracja nie pójdzie na rękę mi, a za serwer zapłaciłem już za ponad rok więc jakby nie patrzeć jestem tam uziemiony. Na starym serwerze, który jeszcze przez chwilę mam dostępny wszystko działa bez zająknięcia się bo i phpinfo() informuje o pustej/nie włączonej open_basedir... :|
PS. Nie wiem czy to może coś zmienić, ale do wyboru mam php na serwerze:
4.4.9 (aktualna)
5.2.17
5.3.5
6.0
Na razie zmieniłem na 5.3.5 (myślałem że ta jest ustawiona, właśnie się zdziwiłem
