这是我的代码:
function myChmod($path, $permission, $log)
{
//this is to overcome umask limitations that mkdir adheres to
$result = chmod($path, octdec($permission));
if(!$result) {
$log->log("Error failed to chmod '$path' to '$permission'. Exiting.");
throw new Exception("Error failed to chmod '$path' to '$permission'. Exiting.");
}
return $result;
}
$trml2pdfPath = $c->install_path.'assets/trml2pdf/trml2pdf/trml2pdf.py';
myChmod($trml2pdfPath, 0755, $log);
如何阻止PHP将此base-8号码0755
更改为base-10号码493
?我想在PHP中使用chmod函数,但它只是将其更改为493
。
答案 0 :(得分:4)
PHP的chmod()函数将整数作为第二个参数。无论你是通过八进制(0755)还是十进制(493),它都是相同的数字。
myChmod($trml2pdfPath, 0755, $log);
这里的0755是number literal。 PHP将其解释为数字oct(755)= dec(493),这意味着:myChmod()
中不需要任何转换函数。
$result = chmod($path, $permission);
答案 1 :(得分:0)
请注意,模式不会自动假定为八进制值,因此 字符串(例如“g + w”)将无法正常工作。确保预期 操作时,需要使用零(0)前缀模式:
在php文档中查看此示例代码:
<?php
chmod("/somedir/somefile", 755); // decimal; probably incorrect
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; incorrect
chmod("/somedir/somefile", 0755); // octal; correct value of mode
?>
所以我猜你不需要使用base_convert,而是可以直接使用八进制数。
这应该适合你:
$result = chmod($path, str_pad($permission, 4, '0', STR_PAD_LEFT));
答案 2 :(得分:0)
有一些小技巧,请更改:
$result = chmod( $path, octdec( $permission ) );
至:
$result = chmod( $path, ( ( "0" . octdec( $permission ) ) * 1 ) );
希望获得帮助。