![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 8 Dołączył: 3.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
Próbowałem w prosty sposób powrócić do głównego katalogu FTP za pomocą funkcji system. Niestety poniższy kod:
Listuje katalogi z /public_html/ a nie z / Próbowałem również różnych kombinacji z odwrotnymi slashami i również nie przynosi to rezultatu... W czym popełniam błąd? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli chcesz otworzyć katalog wyższy niż ten w którym aktualnie jesteś to raczej .. a nie \\
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 8 Dołączył: 3.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Chcę się dostać do najbardziej nadrzędnego katalogu do jakiego mogę ale siłą rzeczy jest to o jeden wyżej niż public_html.
Próbowałem wcześniej podanego przez Ciebie rozwiązania i też listuje pliki z public_html |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
na linuxie mi działa wyświetlanie plików ze wskazanego katalogu w konsoli...
z katalogu wyżej: Kod ls .. z głównego Kod ls /
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 885 Pomógł: 463 Dołączył: 3.10.2009 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jaki system? Jeśli linux to spróbuj
cd ~ przeniesie do folderu domowego bieżącego użytkownika, natomiast cd / to tak, jakbyś na windowsie kliknął w mój komputer (IMG:style_emoticons/default/smile.gif) tylko nie nazywałbym tego głównym katalogiem ftp. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Pod Linuksem wystarczy samo "cd", bez parametrów.
Dotyczy to zarówno połączenia via ftp, jak i shella. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 8 Dołączył: 3.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
Panowie niestety przed napisaniem tego tematu sprawdziłem wszystkie z proponowanych przez was rozwiązań i żadne nie działało.
Co więcej sprawdziłem to na kilku linuksowych serwerach i cd nigdy nie działa. Co ciekawe takiej polecenia jak tar, uptime, ls czy whoami działają wszędzie bez problemu. Obawiam się więc że to nie wina składni, a samej funkcji system? może system() nie pozwala na korzystanie z dobrodziejstw CD ? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Zapewne Twój użytkownik działa w środowisku jakiejś ograniczonej powłoki (np. rbash).
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Mać... alem ślepy.
Krótka odpowiedź: nie, nie tędy droga. Tędy się nie da (IMG:style_emoticons/default/smile.gif) Po pierwsze, należy wytłumaczyć, na czym polega wywołanie z PHP polecenia system($command), a także na czym polega wywołanie polecenia w Luniksie (i uniksach w ogólności). Załóżmy, że z procesu A chcemy wywołać nowy proces B (u Ciebie jako A występuje Apache+PHP, a jako B to co masz w $command, czyli w tym konkretnym przypadku "cd"). Otóż: wywołanie polecenia potomnego polega (w dużym uproszczeniu, ale na nasze potrzeby wystarczy) na: 1. stworzeniu kopii wszystkich zmiennych w systemie. Pisząc "w systemie" mam na myśli te zmienne, które "zna" proces A. Oczywiście piszę o zmiennych systemowych Linuksa, czyli np. łapie się zmienna $PATH (domyślna ścieżka poszukiwań binarek). Niekoniecznie muszą zostać przekazane zmienne $_SERVER i podobne (choć zapewne gdzieś to można ustawiać - nie wiem, nie testowałem). 2. Jeśli polecenie zaczyna się od "/", to oznacza podanie pełnej ścieżki do pliku - Apache przez polecenie system() to wykona. 3. Jeśli polecenie nie zaczyna się od "/", to zaczyna się próba jego lokalizacji w każdym katalogu wyszczególnionym w zmiennej $PATH i możliwe, że jest to robione via shell - czyli Apache uruchamia shella (np. bash), a ten dopiero sam wykonuje czarną robotę 4. Polecenie B może próbować zmieniać wartość SWOICH zmiennych - ale nie będzie nigdy w stanie zmodyfikować zmiennyh procesu A. Tak się nie da (IMG:style_emoticons/default/smile.gif) Czyli: nawet gdyby cd się wykonało, to i tak nie ma to wpływu na to, co widzi Apache+PHP. Oczywiście z plikami (tworzeniem/kasowaniem) jest inaczej - zarówno A i B mają dostęp do systemu plików i tylko kwestia ścieżek i/lub praw dostępu mogą spowodować brak dostępu do pliku, bo domyślnie pliki tworzy system plików, i procesy mają (bo muszą) mieć dostęp do funkcji systemowych. No chyba że operujemy na systemie zamontowanym read-only, wtedy wiadomo, że się nie da. Możesz sprawdzić, czy polecenie się wykonało pozytywnie, czy nie - możesz użyć Kod string system ( string $command [, int &$return_var ] ) w $return_var będziesz miał jakąś wartość zwrotną - porównaj tę wartość po wykonaniu obu poleceń. Poza tym, to osobiście wątpię, by polecenie system ("cd /") się wykonało. Z tej prostej przyczyny, że... cd nie jest poleceniem systemu, tylko POWŁOKI (shella). Kod [user@host ~] $ which cd [user@host ~] $ which ls /bin/ls [user@host ~] $ which tar /bin/tar [user@host ~] $ which whoami /usr/bin/whoami A co do tego, że "ls /" jest u Ciebie równoważne "ls /public_html"... no cóż. Być może Apache jest uwięziony w chroot'cie (poczytaj o tym, warto) i po prostu tego się nie da zrobić. Ale teraz to naprawdę gdybam - nie wiem, czy da się tak chrootować Apacha, by dało się serwować strony użytkowników i by te strony też były "uwięzione" w katalogu użytkownika - tu musiałaby być jakaś silna interakcja chroota z mod_userdir... Ech, rozpisałem się, ale mam nadzieję, że czytelnie. Ten post edytował abort 23.11.2011, 23:27:41 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
wydaje mi się (nie będę dziś pisał. że na 100% gdyż ostatnio nawet z wyrażeniami regularnymi jakoś się pomyliłem), że jednak nie wszystko było próbowane to co tu napisane... a przez polecenie system() wywoływana jest od nowa powłoka shel'a/bash'a więc nic dziwnego, że przy kolejnym wywołaniu nie widzisz efektu cd .. - musiałbyś odpalić skrypt .sh lub inny skrypt konsolowy choćby php gdyż to nie wieli problem w cli...
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 8 Dołączył: 3.05.2011 Ostrzeżenie: (0%) ![]() ![]() |
@abort
Dzięki za świetne wytłumaczenie tematu. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 06:14 |