使用0755作为基数为8的数字

时间:2011-09-29 06:39:44

标签: php

这是我的代码:

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

3 个答案:

答案 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)

来自http://docs.php.net/chmod

  

请注意,模式不会自动假定为八进制值,因此   字符串(例如“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 ) );

希望获得帮助。