Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]chmod() z prawami typu string
Forum PHP.pl > Forum > Przedszkole
WojtasSP320
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
ikssde
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);
}

WojtasSP320
No niestety nie działa sad.gif

Kiedy tak robię, zmienia mi prawa na 000.

Chyba że ja coś źle robię (w innym miejscu).
ikssde
Daj mi tu caly skrypt ktorym obslugujesz formularz i sam formularz tez mozesz dac.
WojtasSP320
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;
       }
    }
ikssde
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

WojtasSP320
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...
ikssde
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.
Kicok
  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. ?>
WojtasSP320
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']);
}
?>
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.