PHP: Copiar los permisos de archivo con fileperms y ftp_chmod
-
27-09-2019 - |
Pregunta
El objetivo general: Copiar los permisos de los archivos del sistema de archivos local cuando subirlos a través de FTP usando PHP.
El problema: Mientras que aparece ftp_chmod tengan éxito, y de acuerdo con la declaración de impresión en el código que estoy poniendo los permisos correctos, se establece permisos completamente equivocadas.
El código:
<?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);
}
?>
El resultado: Fuente / permisos de archivos esperados (sistema de ficheros local):
-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 versionsPermisos
destino del archivo / real resultado (carga 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
Solución
$ Pass permanentes a ftp_chmod, no permsm $.
Otros consejos
Uso $perms &= 0511
en lugar de $perms &= 511
. máscaras de permiso están en notación octal, y el 0 anteriores harán PHP interpretar como el número octal.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow