Du bist nicht angemeldet.

#1 18.11.2005 21:09

solitaire
Mitglied
Ort: KA
Registriert: 18.03.2002
Beiträge: 2.516
Webseite

Php - Unsupported Operand Types

Es geht um webadmin.php, das ist ein kleiner Filemanager.

Auf localhost läuft er bei mir ohne Probleme.
Auf free.fr bekomme ich allerdings folgenden Fehler
Unsupported operand types on line 256

Die Zeile sieht so aus.
    $dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;

Ich tippe mal der Fehler ist das "~" weil das vorher im Code nicht auftaucht.
Was bedeutet dieses und warum könnte das mokiert werden?
Oder kommt der Fehler vielleicht doch an fehlenden chmod Rechten?

bin etwas ratlos,
soli


baguette.gif

http://www.andsa.de

Offline

#2 18.11.2005 23:54

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 11.704
Webseite

Re: Php - Unsupported Operand Types

kannste zusaetzlich auch mal die vorherige zeile posten ?


zwecks chmod ... probiers doch einfach mal per Einfachst-Script, per Chmod nen Dateiattribut zu aendern.

Denke mal aber, das umask macht probs, dazu wirste bei free.fr nich die Rechte haben (das aendert die allgemeinen Attribute von Dateien die durch diesen Prozess (also das Script in dem Fall) erstellt werden).


bye Ron


sigimg2.php?id=1

Offline

#3 19.11.2005 09:01

solitaire
Mitglied
Ort: KA
Registriert: 18.03.2002
Beiträge: 2.516
Webseite

Re: Php - Unsupported Operand Types

Hier mal ein kleiner Ausschnitt:

$words = getwords($lang);

if ($site_charset == 'auto') {
    $site_charset = $word_charset;
}

$cols = ($win) ? 4 : 7;

if (!isset($dirpermission)) {
    $dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
}
if (!isset($filepermission)) {
    $filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
}

if (!empty($_SERVER['SCRIPT_NAME'])) {
    $self = html(basename($_SERVER['SCRIPT_NAME']));
} elseif (!empty($_SERVER['PHP_SELF'])) {
    $self = html(basename($_SERVER['PHP_SELF']));
} else {
    $self = '';
}

Das gesamt Script findest du hier:

-->Linktitel:
-->Linktitel: http://wacker-welt.de/webadmin/ (Links sind aus rechtlichen Gründen nicht klickbar)
-->Link: 'http://wacker-welt.de/webadmin/'
(Links sind aus rechtlichen Gründen nicht klickbar)
-->Link: 'http://wacker-welt.de/webadmin/'


Aber Achtung falls das jemand testen will.
Die ganze Sache funktioniert ohne LogIn.
Wer es auf seinem Webspace vergisst,
gibt Hin und Kunz Zutritt zu seinen Dateien.


Hast du übrigens in letzter Zeit mal einen Account auf free.fr registriert?
Bei den neuen funktioniert der ftp nur noch von Frankreich aus.


baguette.gif

http://www.andsa.de

Offline

#4 20.11.2005 11:23

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 11.704
Webseite

Re: Php - Unsupported Operand Types

entferne mal bei den beiden ~umask() die tilde

aus:

if (!isset($dirpermission)) {
	$dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
}
if (!isset($filepermission)) {
	$filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
}

wird

if (!isset($dirpermission)) {
	$dirpermission = (function_exists('umask')) ? (0777 & umask()) : 0755;
}
if (!isset($filepermission)) {
	$filepermission = (function_exists('umask')) ? (0666 & umask()) : 0644;
}

dann funzt es auch auf free.fr ;D


ps: noe hab schon laenger nix bei free.fr registriert - notfalls muss man halt risikoreich ueber franzoesische proxys gehen ;D


bye Ron


sigimg2.php?id=1

Offline

#5 22.11.2005 08:07

solitaire
Mitglied
Ort: KA
Registriert: 18.03.2002
Beiträge: 2.516
Webseite

Re: Php - Unsupported Operand Types

Danke, webadmin funktioniert jetzt.
Nur schade das man keine Ordner erstellen oder umbenennen kann.
sad

Proxys hatte ich auch schon ausprobiert,
wurden aber alle abgelehnt.
Kenn wohl keine gescheiten.
sad


baguette.gif

http://www.andsa.de

Offline

#6 22.11.2005 21:55

Mr. Anderson
Mitglied
Registriert: 10.10.2003
Beiträge: 523
Webseite

Re: Php - Unsupported Operand Types

*räusper*
ich kenne das Skript zwar nicht, aber wenn man aus einem

0777 & ~umask()

ein

0777 & umask()

macht und das als Rechte setzt, dreht man die Rechte genau rum. Wenn umask als Standardmaske  0022 zurückgibt,  so wird daraus ~0022 = ?755 und 0777 & ?755 = 0022 - Du darfst nichts, deine Gruppe und der Rest der Welt bekommen Schreibrechte.


Erst wenn der letzte Informatiker eingesperrt und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.

Offline

#7 23.11.2005 11:07

Ronny
Administrator
Ort: Chemnitz
Registriert: 08.11.2001
Beiträge: 11.704
Webseite

Re: Php - Unsupported Operand Types

ups nicht dran gedacht, aber ~umask hat mir vorher eh noch nix gesagt.


Dann sei doch so nett und bastel dem soli das script um (anscheinend sollte man dann die maske vorher auslesen und entsprechend "umbasteln", damit die Rechtevergabe wie gewuenscht verdreht wird).

bye Ron


sigimg2.php?id=1

Offline

#8 24.11.2005 18:38

solitaire
Mitglied
Ort: KA
Registriert: 18.03.2002
Beiträge: 2.516
Webseite

Re: Php - Unsupported Operand Types

Ich glaube das funktioniert sowieso nicht.
Die lassen es einfach nicht zu das man Ordner erstellt.
Ich konnte noch nicht mal eine bestehende Ordnerstrukur
mit unzip.php entpacken.
War alles sofort weg.

Aber ist alles nicht so sehr wichtig.
Ich hab ausreichend Webspace.
Mir ging es nur darum das zur Funktion zu bringen,
und hab ja immerhin schon etwas dabei gelernt.
biggrin


baguette.gif

http://www.andsa.de

Offline

#9 26.11.2005 04:52

Mr. Anderson
Mitglied
Registriert: 10.10.2003
Beiträge: 523
Webseite

Re: Php - Unsupported Operand Types

Ronny,23.11.2005 10:07 schrieb:

ups nicht dran gedacht, aber ~umask hat mir vorher eh noch nix gesagt.


Dann sei doch so nett und bastel dem soli das script um (anscheinend sollte man dann die maske vorher auslesen und entsprechend "umbasteln", damit die Rechtevergabe wie gewuenscht verdreht wird).

bye Ron

Äh. Ja. Ich hab nicht wirklich Ahnung von php...

So als Schuss ins Blaue würde ich tippen, dass der Interpreter etwas buggy ist.
Ich vermute, er versucht 0777 & ~ auzuwerten anstatt erst ~umask(). Die Präzedenz wäre also anders. (php ist da wohl auch nicht so genau dokumentiert)
Es wäre daher m. E. einen Versuch wert, einfach das ~umask() in Klammern zu setzen.

Das heißt, aus

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
}

wird

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & (~umask())) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & (~umask())) : 0644;
}

Erst wenn der letzte Informatiker eingesperrt und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.

Offline

#10 28.11.2005 14:04

solitaire
Mitglied
Ort: KA
Registriert: 18.03.2002
Beiträge: 2.516
Webseite

Re: Php - Unsupported Operand Types

Funktioniert leider auch nicht.
Da kommt dann wieder der selbe Fehler
wie im Ausgangsposting.


baguette.gif

http://www.andsa.de

Offline

#11 29.11.2005 01:53

Mr. Anderson
Mitglied
Registriert: 10.10.2003
Beiträge: 523
Webseite

Re: Php - Unsupported Operand Types

aja happy
also voll danaben getippt.
Naja, ich hätte grad zwei andere Ideen:

Variante 1: die Tilde mit Klammern noch vom umask() abtrennen.

also aus dem

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
}

mach dies:

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & (~(umask()))) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & (~(umask()))) : 0644;
}


Variante 2: Vielleicht kennt der Interpreter die Tilde als unären Operator für den Rückgabewert von umask() nicht.
Füge irgendwo ziemlich weit am Anfang des Skripts diese neue Funktion ein:

function negation($num) {

        $world = $num % 8;
        $num = floor ($num / 8);
        $group = $num % 8;
        $num = floor ($num / 8);
        $owner = $num;

        $res = $owner * 64 + $group * 8 + $world;
        return $res;

}

und mach wieder aus dem hier

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & ~umask()) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & ~umask()) : 0644;
}

nun das da:

if (!isset($dirpermission)) {
$dirpermission = (function_exists('umask')) ? (0777 & negation(umask())) : 0755;
}
if (!isset($filepermission)) {
$filepermission = (function_exists('umask')) ? (0666 & negation(umask())) : 0644;
}

Erst wenn der letzte Informatiker eingesperrt und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.

Offline

Schnellantwort auf dieses Thema

Schreibe deinen Beitrag und versende ihn
Bist Du ein Mensch oder ein Roboter ?

Verifizierung, dass diese Aktion durch eine reale Person vorgenommen wird und nicht von einem Programm.