Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]chmod() z prawami typu string
WojtasSP320
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


W sieci istnieje masa przykładów używania chmod() np.:

chmod($plik, 644);

Proste nie? NIE!

Szukam, szukam i znaleźć nie mogę jak zmienić uprawnienia, ale nie na sztywno, tylko np. wyciągnąć je ze zmiennej. Problem się pojawia bo przecież nie można podawać dec int ani string tylko liczbę ósemkową.

Wie ktoś może jak to zrobić??

Chodzi mi o zmianę uprawnień z formularza.

Może jeszcze mały kawałek kodu:

Kod
<?php
if (isset($_POST['command']))  //Zmienna string pobrana z text inputa w formacie "chmod $nazwa_pliku $prawa"
{
   $tab = explode(" ",$_POST['command']);

   if ($tab[0]=='chmod')
   {
    chmod($_SESSION['dir'].'/'.$tab[2], $tab1); // <===  ?questionmark.gifquestionmark.gif?
   }

   unset($_POST['command']);
}
?>


Jak to zrobić?? będę wdzięczny smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
ikssde
post
Post #2





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Przechwytujesz sobie zmienne z formularza i dzialasz :

CODE


$prawaint = $_POST['prawa'];
$sciezka = $_POST['sciezka'];
$prawa8 = 0;

if(is_int($prawaint)) //sprawdzamy czy to liczba
{
$prawa8 .= $prawaint;
chmod($sciezka, $prawa8);
}

Go to the top of the page
+Quote Post
WojtasSP320
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


No niestety nie działa sad.gif

Kiedy tak robię, zmienia mi prawa na 000.

Chyba że ja coś źle robię (w innym miejscu).
Go to the top of the page
+Quote Post
ikssde
post
Post #4





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Daj mi tu caly skrypt ktorym obslugujesz formularz i sam formularz tez mozesz dac.
Go to the top of the page
+Quote Post
WojtasSP320
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


Obsługa formularza:

Kod
if (isset($_POST['command']))
{
   $tab = explode(" ",$_POST['command']);

   if ($tab[0]=='chmod')
   {
    $perms = 0;
    if (is_int($tab[1])) $perms .= $tab[1];
    chmod($_SESSION['dir'].'/'.$tab[2], $perms); //$_SESSION['dir'] to zmianna, w której trzymam katalog (ścieżkę do pliku)
   }

   unset($_POST['command']);
}


i formularz:

Kod
<img src="command.png" alt="" title="Wiersz poleceń" style="width: 32px; height: 32px; margin: 0px 3px 0px 3px; cursor: pointer;" onClick="javascript:toggle_form('command_input');">
<form action="panel.php" method="post" id="command_input" style="display: none; vertical-align: 50%;" onSubmit="return command_prompt();show_loader();">
<input type="text" name="command">
<input type="submit" value="OK">
</form>


inne:

Kod
    function toggle_form(ID)
    {
       e = document.getElementById(ID);
       if (e.style.display=='none') {e.style.display='inline';} else {e.style.display='none';}
    }

    function show_loader()
    {
       document.getElementById("ajaxLoader").style.display='inline';
    }

    function command_prompt()
    {
       e = document.getElementById("command_input");
       if ((e.command.value=='?') || (e.command.value=='help'))
       {
        alert("Dostępne polecenia: \n<chmod> - chmod nazwa_pliku uprawnienia (chmod plik.txt 777)");
        e.command.value='';
        return false;
       }
    }
Go to the top of the page
+Quote Post
ikssde
post
Post #6





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


CODE

Zobacz, piszesz cos takiego :
alert("Dostępne polecenia: \n<chmod> - chmod nazwa_pliku uprawnienia (chmod plik.txt 777)");

Czyli najpierw trzeba podac "prefiks" = chmod potem sciezke = plik.txt a pozniej prawa="777"
Struktura tabeli jest taka :
tab[0] = chmod;
tab[1] = plik.txt;
tab[2] = 777;

A zobacz co zrobiles w skrypcie :

if (is_int($tab[1])) $perms .= $tab[1];
chmod($_SESSION['dir'].'/'.$tab[2], $perms)

Sprawdzasz sobie czy $tab[1] czyli plik.txt jest liczba ;o - musisz zamienic tab[1] na tab[2]
Pozniej dalej dodajesz do 0 + $tab[1] czyli robisz z tego string = 0plik.txt
No i na koncu chcesz ustawic prawa do pliku $_SESSION['dir']/777

Popraw to i powiedz co wyszlo smile.gif

Go to the top of the page
+Quote Post
WojtasSP320
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


Sorry - mój błąd, ale błąd jest tylko w alercie.

Wpisuje: chmod 777 nazwa_pliku

Wyechowałem prawa (tab[1]):

Kod
if (isset($_POST['command']))
{
   $tab = explode(" ",$_POST['command']);

   if ($tab[0]=='chmod')
   {
    echo $tab[1].'<br>';
    $perms = 0;
    if (is_int($tab[1])) $perms .= $tab[1];
    chmod($_SESSION['dir'].'/'.$tab[2], $perms);
    echo $perms;
   }

   unset($_POST['command']);
}


w pierwszym echo mam 777 a w drugim mam 0...
Go to the top of the page
+Quote Post
ikssde
post
Post #8





Grupa: Zarejestrowani
Postów: 217
Pomógł: 40
Dołączył: 20.08.2008

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


Wiem o co chodzi smile.gif

CODE


Za linijką :

$perms = 0;

Wpisz :

settype($tab[1], "integer");



Powinno dzialac bo funkcja explode wynik przekazuje jako string. Teraz to juz praktycznie nie ma sensu sprawdzac czy zostala przekazana zmienna liczbowa.

Ten post edytował ikssde 25.08.2008, 16:37:19
Go to the top of the page
+Quote Post
Kicok
post
Post #9





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2.  
  3.  
  4. if( 0777 == '0777' )
  5. {
  6. echo '1 OK<br>';
  7. }
  8.  
  9. if( 0777 == intval( '0777' ) )
  10. {
  11. echo '2 OK<br>';
  12. }
  13.  
  14. if( 0777 == octdec( '0777' ) )
  15. {
  16. echo '3 OK<br>';
  17. }
  18.  
  19. ?>


Ten post edytował Kicok 25.08.2008, 16:47:08


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
WojtasSP320
post
Post #10





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


smile.gif Działa, tylko jeszcze trzeba dać zamianę z DEC na OCT i gra gitara smile.gifsmile.gif

(Po paru minutach), kurde nie wiem jak to zrobić działa, ale tylko jak wpiszę wartość w OCT , czyli żeby zrobić chmod 777 plik, muszę napisać chmod 511 plik i wtedy działa

OK. Teraz działa wyśmienicie smile.gif Kicok, ikssde wielkie dzięki.

A tu kod, na przyszłość jakby kto szukał (obsługa formularza [input type="text" name="command"]):

CODE

<?php

#format danych w formularzu:
#chmod uprawnienia nazwa_pliku (np chmod 777 plik.txt)

if (isset($_POST['command']))
{
$tab = explode(" ",$_POST['command']);

if ($tab[0]=='chmod')
{
$tmp = 0;
settype($tab[1], "integer");
$tmp .= $tab[1];
$perms = octdec($tmp);
chmod($_SESSION['dir'].'/'.$tab[2], $perms);
}

unset($_POST['command']);
}
?>


Ten post edytował WojtasSP320 26.08.2008, 00:01:42
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 Aktualny czas: 22.08.2025 - 05:41