Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Safe Mode - jak obejść?, tworzenie plików w folderach utworzonych przez skrypt
WebCM
post 21.03.2010, 17:56:44
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


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?

Ten post edytował WebCM 21.03.2010, 18:13:12


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
starach
post 21.03.2010, 18:49:34
Post #2





Grupa: Zarejestrowani
Postów: 999
Pomógł: 30
Dołączył: 14.01.2007
Skąd: wiesz ?

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


Spróbuj nadać im uprawnienia po utworzeniu: chmod

edit>
Pamiętaj że w komentarzach do tej funkcji też mogą być pomocne informacje.

Ten post edytował starach 21.03.2010, 18:51:33
Go to the top of the page
+Quote Post
Pilsener
post 22.03.2010, 11:06:25
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
WebCM
post 22.03.2010, 18:21:27
Post #4





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


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.


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
Go to the top of the page
+Quote Post
Pilsener
post 22.03.2010, 21:46:23
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


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.
Go to the top of the page
+Quote Post
WebCM
post 23.03.2010, 17:28:34
Post #6





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

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


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

Ten post edytował WebCM 23.03.2010, 17:38:55


--------------------
„Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
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: 19.07.2025 - 18:43