2010-12-01 16 views
3

Gibt es eine Möglichkeit, die Schalter "Versteckt" oder "Nur-Lesen" in einer Windows-Datei mit PHP umzuschalten?

AKTUALISIERT Wie der Titel schon sagt, gibt es eine Möglichkeit, den „Hidden“ oder „Read-Only“ Option auf Windows mit PHP zu wechseln?

Ich möchte dies tun, ohne eine Shell zu öffnen exec() wenn möglich.

+1

"Hidden", in welchem ​​Sinn und auf welchem ​​Betriebssystem? – deceze

+0

Ja ... Unter * nix systems putting leading. im Dateinamen macht es "versteckt" – hummingBird

+0

@deceze - Versteckt, auf Windows, in dem Sinne, wo Sie es im "Folder Options | View" Menü umschalten müssen. @ Playcat - Danke, Angus hat das auch erwähnt. – Ben

Antwort

3

Eine Datei kann nicht versteckt werden, es ist immer im Dateisystem. Es gibt die * NIX-Konvention, dass Dateien, die mit . beginnen, standardmäßig nicht für bestimmte Operationen angezeigt werden (wie der Befehl ls), aber nur, wenn Sie nicht stark genug suchen. Das Gleiche gilt für Windows, aber Windows verarbeitet es mit Datei-Meta-Attributen.

Was Sie tun können/sollten, ist die Verwendung von Dateiberechtigungen, um den Ordner/die Datei für jeden zugänglich zu machen, der keinen Zugriff darauf hat. Verwenden Sie dazu chmod, chown und chgrp aus PHP. Möglicherweise müssen Sie jedoch etwas über die richtigen Dateisystemberechtigungen lernen.

+0

Was bedeutet der "Datei Meta Attribute" Teil in Bezug auf PHP? Ist dort eine Antwort versteckt? – Ben

+0

@Steve Nr. :) Es bedeutet nur, dass UNIX bestimmt, ob eine Datei angezeigt werden soll oder nicht, indem überprüft wird, ob der Dateiname mit einem "." Beginnt oder nicht. Windows speichert Metaattribute für eine Datei und betrachtet diese, um die gleiche Entscheidung zu treffen. Es ändert nichts an der Tatsache, dass das die Datei nicht versteckt (in dem Sinne, dass du wahrscheinlich denkst), es beinhaltet es einfach nicht in * bestimmten * Operationen (wie Joe User einen Ordner in Windows Explorer). – deceze

+0

@Steve Ehrlich gesagt habe ich keine Idee, wie diese Berechtigungen/Sichtbarkeit Flags unter Windows festgelegt werden. Sie sollten Ihre Frage aktualisieren, um zu verdeutlichen, dass Sie genau danach suchen. – deceze

1

Unter Linux/Unix können Sie die Datei verbergen, indem Sie einen Punkt (.) an den Anfang des Namens setzen und die Funktion chmod verwenden, um die Datei schreibgeschützt zu machen. Ich bin mir nicht sicher über Windows.

+0

Danke Angus wird es sich ansehen. – Ben

3

Um eine Datei "versteckt" unter Windows machen Sie

attrib +h yourfile.ext 

verwenden kann ein machen Datei "schreibgeschützt" unter Windows können Sie

attrib +r yourfile.ext 
verwenden

Um diese Befehle von PHP zu verwenden, führen Sie sie einfach mit system oder exec aus.

Siehe auch: Attrib

+0

Gibt es eine Möglichkeit, dies zu tun, ohne eine Shell zu öffnen? – Ben

+0

Mit Standard-PHP? Nicht, dass ich davon Wüste. Es könnte jedoch ein PHP-Modul geben, das diese Funktionalität bietet (oder Sie könnten selbst eine schreiben). – wimvds

1

Während einige Berichte im Web geben, die chmod PHP tatsächlich Windows-Attribut Flags zu setzen wäre in der Lage (zumindest der Nur-Lese-Flag) ich das nicht überhaupt reproduzieren konnte.
Also Beschuss zu einem attrib Befehl ist der Weg zu gehen.

READ-ONLY unter Windows und * nichts

Hier ist ein Code eine Datei auf read-only das wird unter Windows arbeiten und * nichts:

// set file READ-ONLY (Windows & *nix) 
$file = 'path/to/file.ext'; 
if(isset($_SERVER['WINDIR'])) { 
    // Host OS is Windows 
    $file = str_replace('/', '\\', $file); 
    unset($res); 
    exec('attrib +R ' . escapeshellarg($file), $res); 
    $res = $res[0]; 
}else{ 
    // Host OS is *nix 
    $res = chmod($file, 0444); 
} 
//$res contains result string of operation 

Hinweise:
Das Ersetzen von '/' durch '\' ist wichtig, da der Shell-Befehl (attrib) nicht so tolerant ist wie PHP.
$ res ist im Windows-Teil nicht gesetzt, weil exec() an einen vorhandenen Wert anfügt.

auf Windows-HIDDEN

Wenn Sie eine Datei versteckt festlegen möchten, ist dies wahrscheinlich eine nur Windows Aufgabe sein würde:

// set file HIDDEN (Windows only) 
$file = 'path/to/file.ext'; 
$file = str_replace('/', '\\', $file); 
unset($res); 
exec('attrib +H ' . escapeshellarg($file), $res); 
$res = $res[0]; 
//$res contains result string of operation