PHP:使用 fileperms 和 ftp_chmod 复制文件权限

发布于 2024-09-06 05:12:04 字数 1652 浏览 4 评论 0原文

总体目标: 使用 PHP 通过 FTP 上传文件时,从本地文件系统复制文件的权限。

问题: 虽然 ftp_chmod 似乎成功了,并且根据代码中的打印语句我设置了正确的权限,但它设置了完全错误的权限。

代码:

<?php
    $perms = fileperms($src);
    if ($perms !== false) {
        // We only take the last 3 digits, since we're only interested in 'normal' file permissions, not extended ones.
        $perms &= 511;
        $permsm = sprintf('%o', $perms);
        print "DEBUG: Setting permissions: $perms :: ". decoct($perms) ." :: $permsm :: $dst\n";
        ftp_chmod($conn_id, $permsm, $dst);
    }
?>

结果: 源/预期文件权限(本地文件系统):

-rw-r--r-- 1 allen users  15572 Jun  2 12:40 Foo.docx
-rw-r--r-- 1 allen users  16877 Jun  2 12:40 Bar.docx
drwxr-xr-x 2 allen users   4096 Jun 15 14:01 configuration
drwxr-xr-x 9 allen users   4096 Jun 15 14:01 content
drwxr-xr-x 3 allen users   4096 Jun 15 14:01 local
-rw-r--r-- 1 allen users 152274 Jun 11 17:13 foo1.sql
-rw-r--r-- 1 allen users   9984 Mar  2 10:44 footest.sql
drwxrwxrwx 2 allen users   4096 Jun 15 14:01 tmp
drwxr-xr-x 3 allen users   4096 Jun 15 14:01 versions

目标/实际结果文件权限(ftp 上传):

--w----r-T 1 ftptest ftptest  15572 Jun 15 14:42 Foo.docx
--w----r-T 1 ftptest ftptest  16877 Jun 15 14:42 Bar.docx
d-wxrw--wt 2 ftptest ftptest   4096 Jun 15 14:42 configuration
d-wxrw--wt 9 ftptest ftptest   4096 Jun 15 14:42 content
d-wxrw--wt 3 ftptest ftptest   4096 Jun 15 14:42 local
--w----r-T 1 ftptest ftptest 152274 Jun 15 14:42 foo1.sql
--w----r-T 1 ftptest ftptest   9984 Jun 15 14:42 footest.sql
dr----x--t 2 ftptest ftptest   4096 Jun 15 14:42 tmp
d-wxrw--wt 3 ftptest ftptest   4096 Jun 15 14:42 versions

The overall goal:
Copy the permissions of files from the local filesystem when uploading them over FTP using PHP.

The problem:
While ftp_chmod appears to succeed, and according to the print statement in the code I'm setting the right permissions, it sets completely wrong permissions.

The code:

<?php
    $perms = fileperms($src);
    if ($perms !== false) {
        // We only take the last 3 digits, since we're only interested in 'normal' file permissions, not extended ones.
        $perms &= 511;
        $permsm = sprintf('%o', $perms);
        print "DEBUG: Setting permissions: $perms :: ". decoct($perms) ." :: $permsm :: $dst\n";
        ftp_chmod($conn_id, $permsm, $dst);
    }
?>

The result:
Source / expected file permissions (local filesystem):

-rw-r--r-- 1 allen users  15572 Jun  2 12:40 Foo.docx
-rw-r--r-- 1 allen users  16877 Jun  2 12:40 Bar.docx
drwxr-xr-x 2 allen users   4096 Jun 15 14:01 configuration
drwxr-xr-x 9 allen users   4096 Jun 15 14:01 content
drwxr-xr-x 3 allen users   4096 Jun 15 14:01 local
-rw-r--r-- 1 allen users 152274 Jun 11 17:13 foo1.sql
-rw-r--r-- 1 allen users   9984 Mar  2 10:44 footest.sql
drwxrwxrwx 2 allen users   4096 Jun 15 14:01 tmp
drwxr-xr-x 3 allen users   4096 Jun 15 14:01 versions

Destination / actual result file permissions (ftp upload):

--w----r-T 1 ftptest ftptest  15572 Jun 15 14:42 Foo.docx
--w----r-T 1 ftptest ftptest  16877 Jun 15 14:42 Bar.docx
d-wxrw--wt 2 ftptest ftptest   4096 Jun 15 14:42 configuration
d-wxrw--wt 9 ftptest ftptest   4096 Jun 15 14:42 content
d-wxrw--wt 3 ftptest ftptest   4096 Jun 15 14:42 local
--w----r-T 1 ftptest ftptest 152274 Jun 15 14:42 foo1.sql
--w----r-T 1 ftptest ftptest   9984 Jun 15 14:42 footest.sql
dr----x--t 2 ftptest ftptest   4096 Jun 15 14:42 tmp
d-wxrw--wt 3 ftptest ftptest   4096 Jun 15 14:42 versions

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

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

发布评论

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

评论(2

猥︴琐丶欲为 2024-09-13 05:12:04

将 $perms 传递给 ftp_chmod,而不是 $permsm。

Pass $perms to ftp_chmod, not $permsm.

青春如此纠结 2024-09-13 05:12:04

使用 $perms &= 0511 而不是 $perms &= 511。权限掩码采用八进制表示法,前面的 0 将使 PHP 将数字解释为八进制。

Use $perms &= 0511 instead of $perms &= 511. Permission masks are in octal notation, and the preceding 0 will make PHP interpret the number as octal.

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