PHP:使用fileperms和ftp\u chmod复制文件权限
总体目标: 使用PHP通过FTP上传文件时,从本地文件系统复制文件的权限 问题是: 虽然ftp_chmod似乎成功了,但根据代码中的print语句,我正在设置正确的权限,它设置了完全错误的权限 守则:PHP:使用fileperms和ftp\u chmod复制文件权限,php,permissions,ftp,file-permissions,chmod,Php,Permissions,Ftp,File Permissions,Chmod,总体目标: 使用PHP通过FTP上传文件时,从本地文件系统复制文件的权限 问题是: 虽然ftp_chmod似乎成功了,但根据代码中的print语句,我正在设置正确的权限,它设置了完全错误的权限 守则: <?php $perms = fileperms($src); if ($perms !== false) { // We only take the last 3 digits, since we're only interested in 'normal'
<?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);
}
?>
使用$perms&=0511
而不是$perms&=511
。权限掩码采用八进制表示法,前面的0将使PHP将数字解释为八进制。将$perms传递给ftp\u chmod,而不是$permsm。正如我已经解释过的,print语句显示了正确的权限,这使我怀疑问题是否在此时产生。更改此行会导致print语句显示不正确的权限,并且无法解决此问题(上载文件的权限仍然不正确)。谢谢。这似乎使代码按预期工作(我可能应该看到这一点,但我花了这么长时间试图使代码工作,我在所有修改中都看不见了)。我仍然不完全理解为什么$permsm不起作用-这似乎是一个键入问题,但没有多少decoct/octdec循环或预结束“0”似乎可以解决这个问题。假设权限是rw-r--r--,或644$perms现在包含八进制数0644,即420位小数$permsm包含“0644”,它不是解释为八进制,而是解释为十进制数644,而您需要420。
-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
--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