php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2004

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.09.2004, 09:56  
Gast
 
Beiträge: n/a
Standard was macht die funktion?

ich hab mir hier ne funktion rausgesucht die mir die dateirechte zurückgibt..

PHP-Code:
function display_perms($file) {
$mode fileperms($file);
clearstatcache();

/* Determine Type */ 
if( $mode 0x1000 
$type='p'/* FIFO pipe */ 
else if( $mode 0x2000 
$type='c'/* Character special */ 
else if( $mode 0x4000 
$type='d'/* Directory */ 
else if( $mode 0x6000 
$type='b'/* Block special */ 
else if( $mode 0x8000 
$type='-'/* Regular */ 
else if( $mode 0xA000 
$type='l'/* Symbolic Link */ 
else if( $mode 0xC000 
$type='s'/* Socket */ 
else 
$type='u'/* UNKNOWN */ 

/* Determine permissions */ 
$owner["read"] = ($mode 00400) ? 'r' '-'
$owner["write"] = ($mode 00200) ? 'w' '-'
$owner["execute"] = ($mode 00100) ? 'x' '-'
$group["read"] = ($mode 00040) ? 'r' '-'
$group["write"] = ($mode 00020) ? 'w' '-'
$group["execute"] = ($mode 00010) ? 'x' '-'
$world["read"] = ($mode 00004) ? 'r' '-'
$world["write"] = ($mode 00002) ? 'w' '-'
$world["execute"] = ($mode 00001) ? 'x' '-'

/* Adjust for SUID, SGID and sticky bit */ 
if( $mode 0x800 
$owner["execute"] = ($owner['execute']=='x') ? 's' 'S'
if( 
$mode 0x400 
$group["execute"] = ($group['execute']=='x') ? 's' 'S'
if( 
$mode 0x200 
$world["execute"] = ($world['execute']=='x') ? 't' 'T'

$s=sprintf("%1s"$type); 
$s.=sprintf("%1s%1s%1s"$owner['read'], $owner['write'], $owner['execute']); 
$s.=sprintf("%1s%1s%1s"$group['read'], $group['write'], $group['execute']); 
$s.=sprintf("%1s%1s%1s"$world['read'], $world['write'], $world['execute']); 
return 
trim($s);

ich weiss wofür die funktion gut ist aber mein problem ist ich verstehe sie nicht und genau das ist das problem. ich will wissen wie das funktioniert den mit fileperms() bekommt man ja die rechte angegeben aber mit der zahl kann ich nix anfangen. die funktion macht dadrauss was nutzbares (-rw-r--r--) aber wie macht sie das? da ist syntax bei den ich noch nie gesehen hab... kann mir das einer erklären ??

mfg sixpack
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 17.09.2004, 11:15  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: was macht die funktion?

Zitat:
Zitat von sixpack
ich hab mir hier ne funktion rausgesucht die mir die dateirechte zurückgibt..
ja klasse.

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum.

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/ftopic21431.html

moved to PHP - Anfänger
imported_Ben ist offline  
Alt 17.09.2004, 12:03  
Gast
 
Beiträge: n/a
Standard

willst du mich blöd von der seite anlabern??

1. sorry das ich das profi forum geschändet hab, die funktion ist vll nicht unbedingt was für profis aber der syntax und die komischen rechnungen sind ja sehr ungewöhnlich.

2. und was heisst hier 'unzureichende Fragestellung' ? ich will wissen wie die funktion genau arbeitet. wie genauer sollst den noch sein???

3. am besten ihr legt die php foren zusammen, dieses bescheuerte hin und her is total überflüssig.

4. wenn ihr mir nicht helfen wollt dann geh ich in nen anderes forum und mische da mit.
 
Alt 17.09.2004, 12:14  
Erfahrener Benutzer
 
Registriert seit: 18.09.2003
Beiträge: 13.598
PHP-Kenntnisse:
Fortgeschritten
imported_Ben ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von sixpack
willst du mich blöd von der seite anlabern??
hab ich ganz sicherlich nicht nötig. falls du es noch nicht gemerkt haben solltest .. es ist ein teil meines jobs in diesem forum, darauf zu achten, dass die beiträge in den richtigen kategorien wiederzufinden sind.

Zitat:
Zitat von sixpack
die funktion ist vll nicht unbedingt was für profis
eben. wenn du das weißt, warum schreibst du dann den beitrag in das forum?

Zitat:
Zitat von sixpack
aber der syntax und die komischen rechnungen sind ja sehr ungewöhnlich.
ungewöhnlich != schwer.
ich hab dir ja den link gepostet, der die voraussetzungen für einen betirag im profiforum festlegt.

Zitat:
Zitat von sixpack
2. und was heisst hier 'unzureichende Fragestellung' ? ich will wissen wie die funktion genau arbeitet. wie genauer sollst den noch sein???
okay. habe ich in meinem beitrag editiert.

Zitat:
Zitat von sixpack
3. am besten ihr legt die php foren zusammen, dieses bescheuerte hin und her is total überflüssig.
schreibe die beiträge doch einfach in das passende forum. dann ist das verschieben sogar nicht nur überflüssig, sondern auch unnötig.

Zitat:
Zitat von sixpack
4. wenn ihr mir nicht helfen wollt dann geh ich in nen anderes forum und mische da mit.
jeder kann das tun, was er möchte.
zu der funktion kann ich dir nicht helfen. das hat jetzt nichts mit wissen zu tun. ich habe derzeit keinen elan, um mir quellcode anzuschauen.

sorry.

keine weiteren diskussionen über die verschiebung dieses threads.
ich bitte alle draum diesen thread nur noch mit themenspezifischen beiträgen zu füllen ... da schließe ich mich und den threaderöffner ein.

grüße ben
imported_Ben ist offline  
Alt 17.09.2004, 13:08  
Gast
 
Beiträge: n/a
Standard

schau dir dashier mal an wenn nicht schon getan: Bit-Operatoren

genauer... (schreib ich nacher muss erst zum essen^^)
 
Alt 17.09.2004, 16:48  
Gast
 
Beiträge: n/a
Standard

Ok ich versuchs mal zu erklären:
Du kennst hoffentlich Bits sprich binärsystem (BIN) mit dem alles in 0 oder 1 dargestellt wird. Gibt ja noch anderen wir Dezimal (DEC - unser Zehnersystem), Hexadezimal (wie die HTML-Farben #FFFFFF) und Oktal (also hier gibts 1-8)

Wenn du dir nun ansiehst wie das gespeichert wird fällt wohl ein aus nem FTP Programm mit z.B. den drei Zahlen "754". Die erste Zahl ist Owner das zweite die Rechte für die Gruppe und das Dritte für alle (nennt sich in dem Script $world). Die jewiligen Rechte addieren sich also Lesen = 4, Schreiben = 2, Ausführen = 1 ---> Alles = 7. Vor diesen drei Zahlen aber sind noch 2 Stellen die den Typ beschreiben, das wusst ich bis dato auch nicht. Das ganze kann/muss man ins Binärsystem umwandeln damit man alles versteht. Um das umzuwandeln muss man wissen dass es im Oktalsystem ist. (habs ausprobiert)
Code:
Im Beispiel als Typ ein Ordner, ich wusste das auch nicht welcher Bitcode ein Ordner ist hab ich aus dem Script.

Oktal (nicht dezimal!): 
|Typ|Owner|Group|World|
|  4|    7|    5|    4|

Binär:
|Typ   |Owner|Group|World|
|100000|  111|  101|  100|

hier erkennt man nun in den Bits die Berechtigungen.
Also z.b. bei Group: 101 bedeutet dann: Lesen ja, Schreiben nein, Ausführen ja.
Die Funktion fileperms($datei) liefert dir ein Integer. Ich hab nun mal irgendeinen Ordner genommen (win2k). Da kam folgendes raus: 16895 (PHP zeigt das als Dezimalzahl)

Nun der Teil der entscheidet ob es sich um einen Ordner handelt:
else if( $mode & 0x4000 )
Der Bitoperator & vergleicht einfach die Bits von $a und $b. "Bits, die in $a und $b gesetzt sind werden gesetzt." Also aus (100 & 111) würde 100 werden weil nur der erste Bit bei beiden gesetzt ist. Also die zwei Zahlen erstmal in Binärsystem umwandeln und vergleichen:


100000111111111(BIN) = 16895(DEC) -> die Ausgabe von fileperms()
Das 0x4000 ist hexadezimalschreibweise. Das kannst alles im einfachen Windoof-Taschenrechner umrechnen.
100000000000000(BIN) = 0x4000(HEX)

Das ganze verglichen:
100000111111111
100000000000000
===============
100000000000000 (weil nur an dieser Stelle das Bit gleich ist)

Nun bekommen wir also: elseif(100000000000000){...} - Ich hab einfach ausprobiert was if-Befehl da macht bei Kombinationen aus 1 und 0:
Code:
echo (00)?"true
":"false
"; // false
echo (01)?"true
":"false
"; // true
echo (10)?"true
":"false
"; // true
echo (11)?"true
":"false
"; //true
Sprich ist eine 1(=true) enthalten ist alles true.

Ich erklär mal wie man raus bekommt ob Owner lesen darf alles andere ist ja gleich.

Mein Ordner:

(DEC) 16895
(OCT) 40777
(man könnte auch mit der Oktalzahl einfach rausbekommen ob man lesen darf)
(BIN) 100000111111111


Wie der Bitoperator funktioniert ist ja klar und welches Bit wir überprüfen müssen hoffentlich auch (das an der 7. Stelle). Nun kann man selber den Bitcode festlegen: 000000100000000 (=100000000). Wenn man das jetzt aber in der If-Schleife schreiben würde - if($mode & 100000000) - funktioniert das nicht.
Hier bin ich mir aber nicht sicher. Ich glaube herausgefunden zu haben:
($mode & "1") -> 1 als Dezimalzahl
($mode & 1) -> 1 als Oktalzahl
($mode & 0x1) -> 1 als Hexadezimalzah
für binär hab ich keine möglichkeit gefunden.

Wenn man dann also dieses 100000000 in Oktal umwandelt kommt man auf 400 und genau das steht auch da.

Hoffe man kann es verstehen hatte die letzte halbe Stunde grade Zeit muss bei meinen Eltern im Geschäft gammeln :-)

btw: Naja auf Grund der Komplexheit könnte es doch ins Fortgeschrittenen Forum. *vor-ben-weglauf* Denn ein Fortgeschrittener murr nicht unbedingt binäre Operatoren kennen denn die braucht man selten. Aber nun ist es hier lasst es besser hier bevor sich alle schlagen!
 
Alt 19.09.2004, 10:31  
Gast
 
Beiträge: n/a
Standard

@Ben
ich denke mal wir beide haben irgentwo recht....

@JohnDoe
oha, da hat sich aber mal einer mühe gegeben, ich finde das is mal ein applaus wert *klatsch*
danke das hat mir echt geholfen!
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Variablen in eine Funktion übernehmen PHP Tipps 2005 1 26.02.2005 17:19
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] Funktion in funktion nicht möglich? PHP-Fortgeschrittene 4 28.11.2004 00:14
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
0x6000 als binär, symbolic link hex 0xa000, php bitweise berechtigungen prüfen script owner, fileperms() liefert komisches wert zurück, 0xa000000 umrechnen, $group[\write\] = ($mode & 00020) ? \'w\' : \'-\';, umrechenen 0x4000, php fileperms umrechnen, fileperms umrechnen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:57 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.