전체 목표 : PHP를 사용하여 FTP를 통해 파일을 업로드 할 때 로컬 파일 시스템의 파일 사용 권한을 복사합니다.PHP : fileperms 및 ftp_chmod를 사용하여 파일 사용 권한 복사
문제 : ftp_chmod가 성공한 것으로 보이고 코드의 print 문에 따라 올바른 사용 권한을 설정했지만 완전히 잘못된 사용 권한을 설정합니다.
코드 :
<?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
감사합니다. 코드가 예상대로 작동하는 것으로 보입니다 (필자는 아마 그렇게 보았을 것입니다.하지만이 코드를 작동 시키려고 오랫동안 노력해 왔습니다. 모든 수정을 통해 시력을 잃었습니다). $ permsm이 작동하지 않는 이유를 아직 완전히 이해하지 못했습니다. 타이핑 문제 인 것처럼 보이지만, decoct/octdec주기가 없거나 '0'이 붙어서 문제가 해결되지 않은 것 같습니다. – AllenJB
권한이 rw-r - r-- 또는 644라고합시다. 이제 $ perms에는 십진수 420 (십진수 420)이 포함됩니다. $ permsm은 "0644"를 포함하는데, 이는 8 진수로 해석되지 않고 10 진수 644로 해석됩니다. – Sjoerd