我的代碼是這樣更改「0777」字符串爲0777八進制LITERALLY
$perm = "0777"; //this is fetch from the database
chmod("myFolder/", $perm);
但$燙髮的價值並不在八進制,我怎樣才能改變變量的數據類型爲八進制?即使是一種替代方法也會這樣做
我的代碼是這樣更改「0777」字符串爲0777八進制LITERALLY
$perm = "0777"; //this is fetch from the database
chmod("myFolder/", $perm);
但$燙髮的價值並不在八進制,我怎樣才能改變變量的數據類型爲八進制?即使是一種替代方法也會這樣做
八進制不是一種類型。整數是類型。
你想要將一個字符串轉換爲一個int,並且由於該字符串以零開頭,它將是一個八進制整數。
使用intval此:
chmod('myFolder/', intval($perm));
至於有人提到,沒有八進制數的類型。而chmod函數接收第二個參數作爲整數。 $perm
的隱式轉換不假定該數字是八進制數。因此,您需要使用適當的函數將「八進制字符串」轉換爲整數。
只需使用octdec功能
$perm = "0777"; //this is fetch from the database
chmod("myFolder/", octdec($perm));
或者intval
chmod("myFolder/", intval($perm, 8));
附:
var_dump('0644' == 0644); // bool(false)
var_dump(intval('0644') == 0644); // bool(false)
var_dump(decoct('0644') == 0644); // bool(false)
var_dump(octdec('0644') == 0644); // bool(true)
var_dump(intval('0644', 8) == 0644); // bool(true)
沒有什麼似乎爲我工作,所以我只是創建了一個非常愚蠢的解決方案,我只是要發佈在這裏。
function permtooct($permissions) {
$mode = 0;
if ($permissions[0] == '1') $mode += 01000;
if ($permissions[0] == '2') $mode += 02000;
if ($permissions[0] == '3') $mode += 03000;
if ($permissions[0] == '4') $mode += 04000;
if ($permissions[0] == '5') $mode += 05000;
if ($permissions[0] == '6') $mode += 06000;
if ($permissions[0] == '7') $mode += 07000;
if ($permissions[1] == '1') $mode += 0100;
if ($permissions[1] == '2') $mode += 0200;
if ($permissions[1] == '3') $mode += 0300;
if ($permissions[1] == '4') $mode += 0400;
if ($permissions[1] == '5') $mode += 0500;
if ($permissions[1] == '6') $mode += 0600;
if ($permissions[1] == '7') $mode += 0700;
if ($permissions[2] == '1') $mode += 010;
if ($permissions[2] == '2') $mode += 020;
if ($permissions[2] == '3') $mode += 030;
if ($permissions[2] == '4') $mode += 040;
if ($permissions[2] == '5') $mode += 050;
if ($permissions[2] == '6') $mode += 060;
if ($permissions[2] == '7') $mode += 070;
if ($permissions[3] == '1') $mode += 01;
if ($permissions[3] == '2') $mode += 02;
if ($permissions[3] == '3') $mode += 03;
if ($permissions[3] == '4') $mode += 04;
if ($permissions[3] == '5') $mode += 05;
if ($permissions[3] == '6') $mode += 06;
if ($permissions[3] == '7') $mode += 07;
return($mode);
}
$a = "0777";
chmod("myFolder/", permtooct($a));
我需要喂chmod()
模式組件作爲函數內的變量。我花了足夠的時間嘗試(和失敗)將字符串轉換爲八進制數,同時保持0777值。最後,我決定放棄chmod()
/ftp_chmod()
並選擇ftp_site()
,它不會在字符串模式代碼上窒息。
if(!ftp_site($connection,"chmod {$mode} {$path}/{$file}")){
// handle the error
}
這對我有用。如果這是某種缺陷或不是最佳做法,請解釋。
編輯:一些讀者可能會拒絕這個ftp_解決方案作爲作弊,因爲它不是一個文件系統功能解決方案。這對我來說不是問題,因爲我正在寫一個ftp類的函數。
這是行不通的,因爲這個字符串會被轉換爲'int(777)',並且前導零將消失! – Rizier123 2015-02-23 11:02:02
閱讀文檔,我特別加了鏈接......「如果字符串以」0「開始,基數取爲8(八進制);」 – Blaatpraat 2015-02-23 11:03:43
我只會給你腳本:'echo $ perm = intval(「0777」); \t chmod(「test /」,$ perm); \t回聲「
」。 substr(sprintf('%o',fileperms('test /')),-4);'創建一個測試文件夾並測試它!看看它是否輸出0777作爲權限! – Rizier123 2015-02-23 11:05:35