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 个艾伦用户 15572 Jun 2 12:40 Foo.docx
-rw-r--r-- 1 个艾伦用户 16877 Jun 2 12:40 Bar.docx
drwxr-xr-x 2 allen users 4096 Jun 15 14:01 配置
drwxr-xr-x 9 艾伦用户 4096 Jun 15 14:01 内容
drwxr-xr-x 3 allen 用户 4096 Jun 15 14:01 local
-rw-r--r-- 1 个艾伦用户 152274 Jun 11 17:13 foo1.sql
-rw-r--r-- 1 个艾伦用户 9984 Mar 2 10:44 footest.sql
drwxrwxrwx 2 艾伦用户 4096 Jun 15 14:01 tmp
drwxr-xr-x 3 allen users 4096 Jun 15 14:01 版本

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

--w----rT 1 ftptest ftptest 15572 Jun 15 14:42 Foo.docx
--w----rT 1 ftptest ftptest 16877 Jun 15 14:42 Bar.docx
d-wxrw--wt 2 ftptest ftptest 4096 Jun 15 14:42 配置
d-wxrw--wt 9 ftptest ftptest 4096 Jun 15 14:42 内容
d-wxrw--wt 3 ftptest ftptest 4096 6 月 15 日 14:42 本地
--w----rT 1 ftptest ftptest 152274 6 月 15 日 14:42 foo1.sql
--w----rT 1 ftptest ftptest 9984 6 月 15 日 14:42 footest.sql
博士----x--t 2 ftptest ftptest 4096 6 月 15 日 14:42 tmp
d-wxrw--wt 3 ftptest ftptest 4096 Jun 15 14:42 版本
4

2 回答 2

2

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

于 2010-06-15T14:52:52.797 回答
0

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

于 2010-06-15T14:14:30.243 回答