0

テスト1と2は正常に機能しますが、配列から値をキャストすると機能しません。

$file = '/test/file.xlsx';
echo "Original Permissions: ".substr(decoct(fileperms($file)),2)."<br />\n\r";

// test 1
$permission = 0775;
chmod($file,$permission);
clearstatcache();
echo "Test 1 Permissions: ".substr(decoct(fileperms($file)),2)."<br />\n\r";

// test 2
define("PERMISSION", 0775);
chmod($file,PERMISSION);
clearstatcache();
echo "Test 2 Permissions: ".substr(decoct(fileperms($file)),2)."<br />\n\r";

出力:

Original Permissions: 1407<br />
Test 1 Permissions: 0775<br />
Test 2 Permissions: 0775<br />

なぜこれが機能しないのですか?

// $ini_array['excel_file_info']['excel_file_permission'] 
// is in a ini file with the value set to 0775
if(isset($ini_array['excel_file_info']['excel_file_permission'])) {
    $excel_file_permission  = $ini_array['excel_file_info']['excel_file_permission'];  
    define("EXCEL_FILE_PERMISSION", $excel_file_permission);
} else {
    $excel_file_permission  = 0777; 
    define("EXCEL_FILE_PERMISSION", $excel_file_permission);
}

echo "Permissions Before chmod: ".substr(decoct(fileperms($file)),2)."<br />\n\r";
chmod($file,EXCEL_FILE_PERMISSION);
clearstatcache();
echo "Permissions After chmod: ".substr(decoct(fileperms($file)),2)."<br />\n\r";;
chmod($file,0755);
clearstatcache();
echo "Permissions Hard Coded chmod: ".substr(decoct(fileperms($file)),2)."<br />\n\r";;

私はファイルパーミッションのためにこれを取得します:

// Before I chmod
Permissions Before chmod: 0644<br />

// Using the DEFINED CONSTANT w/ set value to 0775
Permissions After chmod: 1363<br />

// Hard Coded 0755
Permissions Hard Coded chmod: 0755<br />

編集:

// test 3
$permission = array('perm' => 0775);
chmod($file,$permission['perm']);
clearstatcache();
echo "Test 3 Permissions: ".substr(decoct(fileperms($file)),2)."<br />\n\r";

テスト3は機能しますが、それでも主な例ではありません。UGH !!!

編集#2:

変数の型をエコーすると、それは文字列であるという問題を見つけたと思います。

echo "Defined Excel File Permission: ".EXCEL_FILE_PERMISSION."\n\r";
echo "Defined Type: ".gettype(EXCEL_FILE_PERMISSION)."\n\r";

Defined Excel File Permission: 0775
Defined Type: string

どうしてこれなの?

4

2 に答える 2

1

型キャストが問題を引き起こしていると思います。変更してみてください:

$excel_file_permission  = (int)$ini_array['excel_file_info']['excel_file_permission'];

$excel_file_permission  = intval($ini_array['excel_file_info']['excel_file_permission'], 8);
于 2010-11-04T14:48:23.990 に答える
0

を行うときに整数値に変換するため、おそらく機能しません$excel_file_permission = (int)$ini_array['excel_file_info']['excel_file_permission'];。整数は8進数の値と同じではありません...

于 2010-11-04T14:37:40.703 に答える