问题
UPDATED
As the title says, is there a way to toggle the "Hidden" or "Read-Only" switch on Windows using PHP?
I'd like to do this without opening a shell exec()
if possible.
回答1:
A file can't be hidden, it's always in the file system. There's the *NIX convention that files starting with a .
are not shown by default for certain operations (like the ls
command), but only if you don't look hard enough. The same goes for Windows, but Windows handles it with file meta attributes.
What you can/should do is use file permissions to make the folder/file inaccessible to anybody who has no business accessing it. Use chmod, chown and chgrp to do so from PHP. You may have to learn a bit about proper file system permissions though.
回答2:
To make a file "hidden" on Windows you can use
attrib +h yourfile.ext
To make a file "read-only" on Windows you can use
attrib +r yourfile.ext
To use these commands from PHP you just execute them using system or exec.
Also see : Attrib
回答3:
On Linux/Unix you can make the file hidden by putting a dot (.
) at the start of its name, and use the chmod
function to make the file read-only. Not sure about Windows.
回答4:
While there are some reports on the web that PHP's chmod would indeed be able to set Windows attribute flags (at least the read-only flag) I could not reproduce this at all.
So shelling out to an attrib
command is the way to go.
READ-ONLY on Windows and *nix
Here is some code to set a file to read-only that will work on Windows and *nix:
// 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
Hints:
Replacing '/' with '\' is important as the shell command (attrib
) is not as tolerant to slashes as PHP is.
$res is unset in the Windows part because exec() appends to any existing value.
HIDDEN on Windows
If you want to set a file hidden, this would probably be a Windows only task:
// 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
回答5:
For the file permissions, try chmod
function:
<?php
chmod("/somedir/somefile", 0755); // octal; correct value of mode
?>
More here: http://php.net/manual/en/function.chmod.php
来源:https://stackoverflow.com/questions/4322215/is-there-a-way-to-toggle-the-hidden-or-read-only-switches-on-a-windows-file