有没有办法切换“隐藏”或“只读”使用 PHP 打开 Windows 文件?

发布于 2024-10-04 23:38:34 字数 139 浏览 7 评论 0原文

更新

正如标题所说,有没有办法使用 PHP 在 Windows 上切换“隐藏”或“只读”开关?

如果可能的话,我希望在不打开 shell exec() 的情况下执行此操作。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

春风十里 2024-10-11 23:38:34

文件无法隐藏,它始终位于文件系统中。 *NIX 约定,对于某些操作(如 ls 命令),默认情况下不会显示以 . 开头的文件,但前提是您不够仔细查看。 Windows 也是如此,但 Windows 使用文件元属性来处理它。

您可以/应该做的是使用文件权限使没有业务访问它的任何人都无法访问该文件夹/文件。使用chmodchownchgrp 从 PHP 执行此操作。不过,您可能需要了解一些有关正确文件系统权限的知识。

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.

-柠檬树下少年和吉他 2024-10-11 23:38:34

要在 Windows 上使文件“隐藏”,您可以使用

attrib +h yourfile.ext

要在 Windows 上使文件“只读”,您可以使用

attrib +r yourfile.ext

要从 PHP 使用这些命令,您只需使用 system 或 exec 执行它们。

另请参阅:Attrib< /a>

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

め可乐爱微笑 2024-10-11 23:38:34

虽然网上有一些报告称 PHP 的 chmod 确实能够设置 Windows 属性标志(至少是只读标志),但我根本无法重现这一点。
因此,使用 attrib 命令是正确的选择。

在 Windows 和 *nix 上为只读

下面是一些将文件设置为只读的代码,该代码将在 Windows 和 *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

提示:
将“/”替换为“\”非常重要,因为 shell 命令 (attrib) 不像 PHP 那样能够容忍斜杠。
$res 在 Windows 部分中未设置,因为 exec() 会附加到任何现有值。

Windows 上的隐藏

如果您想将文件设置为隐藏,这可能是仅限 Windows 的任务:

// 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

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
还如梦归 2024-10-11 23:38:34

在 Linux/Unix 上,您可以通过在文件名开头添加点 (.) 来隐藏文件,并使用 chmod 函数使文件只读。不确定 Windows 的情况。

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.

夢归不見 2024-10-11 23:38:34

对于文件权限,请尝试 chmod 函数:

<?php 
    chmod("/somedir/somefile", 0755);  // octal; correct value of mode
?>

更多信息:http: //php.net/manual/en/function.chmod.php

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文