Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Safe Mode - jak obejść?
Forum PHP.pl > Forum > PHP
WebCM
Po wgraniu plików na serwer przez FTP układ katalogów jest następujący:

cache (0 folderów, 1 plik)
cfg (0 folderów, kilka plików)

Admin nadaje im uprawnienia: 777, a plikom wewnątrz - 666

Następnie odpala instalator. Skrypt tworzy w katalogu cache następne foldery:

default
install


Teraz instalator (kompilator szablonów) próbuje umieścić w nich pliki:

body.html
form.html


Z niepowodzeniem. Wyskakuje błąd:
Cytat
Warning: file_put_contents() [function.file-put-contents]: SAFE MODE Restriction in effect. The script whose uid is 10012 is not allowed to access [ciach!]cache/default owned by uid 1000 in [ciach!]compiler.php on line 173

Z komunikatu wnioskuję, że użytkownik, na którym działa skrypt, ma UID = 10012, a folder - 1000.

Przecież to skrypt stworzył ten folder!

Co robić, aby skrypt był zgodny z SAFE MODE?

Na wielu serwerach jest safe_mode, ale nie na wszystkich występują takie dziwne problemy (tu: darmowy pdg.pl)

Znam rozwiązanie: tworzyć wszystkie katalogi za pomocą FTP, nadać im 777, a dopiero pozwolić skryptom ładować tam swoje pliki. Sposób nie satysfakcjonuje mnie do końca.

Jak obejść SAFE MODE, aby skrypty mogły tworzyć pliki w folderach?
starach
Spróbuj nadać im uprawnienia po utworzeniu: chmod

edit>
Pamiętaj że w komentarzach do tej funkcji też mogą być pomocne informacje.
Pilsener
Automatyczne tworzenie plików poprzez funkcje typu fopen czy file_put.. podlega ograniczeniom. Spróbuj do utworzenia pliku użyć funkcji:
http://pl.php.net/manual/pl/function.touch.php

Wszystko wskazuje też na to, że serwer jest źle skonfigurowany (w safe mode nie wiem po co sprawdzane jest, czy właścicielem uruchamianego skryptu lub pliku, do którego funkcja chce uzyskać dostęp, jest ten sam użytkownik).

Spróbuj także nadać chmody folderom (poprzez php oczywiście) a przed każdą akcją sprawdzać, czy mamy odpowiednie uprawnienia.
WebCM
Nie da się wykonać CHMOD-ów, touch() nie pomaga, w komentarzach jest jakieś obejście, ale jednak chyba pozostaje tworzyć foldery przez FTP. Nie rozumiem, dlaczego skrypt nie może tworzyć plików w stworzonych przez siebie folderach.
Pilsener
Cytat
Nie rozumiem, dlaczego skrypt nie może tworzyć plików w stworzonych przez siebie folderach
- spotkałem się z tym na darmowych serwerach, skrypt może utworzyć plik, ale nie możesz go np. skopiować przez ftp, jest w jakiejś "kwarantannie" (czy coś podobnego), ma stałe chmody i nie można ich zmienić - zgaduje, że w przypadku folderów pewnie jest podobnie, tyle, że o ile w przypadku plików użycie touch pomagało, to w przypadku folderów chyba nie ma wyjścia? Pozostaje tworzyć je ręcznie lub zabiegać o poprawienia konfiguracji serwera.
WebCM
Czyli można założyć, że taka sytuacja zajdzie na KAŻDYM serwerze z włączonym safe_mode?

Skrypt tworzy katalog z prawami 777. Zarówno is_readable i is_writable zwracają PRAWDA. Gdy skrypt już utworzy ten folder, jest za późno na jakiekolwiek działania. Trzeba go usunąć i dodać na nowo przez FTP.

Jest jeszcze opcja safe_mode_include_dir, ale chyba zapomniana. W tej sytuacji chyba powyższy problem by nie wystąpił.

Poniższy algorytm byłby w takim razie bez sensu:

1. Sprawdź, czy tryb bezpieczny jest aktywny
2. Jeśli TAK, wyświetl komunikat, że folder trzeba stworzyć ręcznie przez FTP
3. Jeśli NIE, utwórz katalog i zapisz w nim niezbędne pliki

Pogubiłem się w tym wszystkim. Wynalazki typu safe_mode_include_dir albo open_basedir nic nie zmienią, gdy PHP pracuje zawsze z tego samego użytkownika. Wprawdzie open_basedir można ustawiać lokalnie od PHP 5.3, ale sprawnie to będzie działać na dobrze skonfigurowanych hostingach.

Zatem zabezpieczenie, że skrypt nie może stworzyć pliku we własnym katalogu, jest celowe smile.gif
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.