2010-06-15 3 views
0

전체 목표 : 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 

답변

2

$ permsm이 아닌 ftp_chmod에 $ perms를 전달하십시오.

+0

감사합니다. 코드가 예상대로 작동하는 것으로 보입니다 (필자는 아마 그렇게 보았을 것입니다.하지만이 코드를 작동 시키려고 오랫동안 노력해 왔습니다. 모든 수정을 통해 시력을 잃었습니다). $ permsm이 작동하지 않는 이유를 아직 완전히 이해하지 못했습니다. 타이핑 문제 인 것처럼 보이지만, decoct/octdec주기가 없거나 '0'이 붙어서 문제가 해결되지 않은 것 같습니다. – AllenJB

+0

권한이 rw-r - r-- 또는 644라고합시다. 이제 $ perms에는 십진수 420 (십진수 420)이 포함됩니다. $ permsm은 "0644"를 포함하는데, 이는 8 진수로 해석되지 않고 10 진수 644로 해석됩니다. – Sjoerd

0

대신 $perms &= 0511을 사용하십시오.. 허가 마스크는 8 진수 표기법으로되어 있으며 앞의 0은 PHP가 숫자를 8 진수로 해석하도록합니다.

+0

앞에서 설명한 것처럼 print 문에 올바른 사용 권한이 표시되어이 시점에서 문제가 발생했는지 의심 스럽습니다. 이 줄을 변경하면 print 문에 잘못된 사용 권한이 표시되고 문제가 해결되지 않습니다 (업로드 된 파일의 사용 권한은 여전히 ​​올바르지 않습니다). – AllenJB