2010-11-04 5 views
0

Ok тест 1 и 2 работают нормально, но если я передам значение из массива, он не работает.chmod задает значение разрешений динамически

$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 /> 

EDIT:

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

Test 3 работает, но до сих пор не главный пример. UGH !!!

EDIT # 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 

Почему это?

ответ

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); 
+0

Я изменил его, и он до сих пор не работает –

+0

Что текущее значение $ ini_array [ 'excel_file_info'] [ 'excel_file_permission']? попробуйте поместить значение, например «0777» или «0644», или другое значение разрешения. – subosito

+0

В ini я изменил значение на 0666, когда скрипт выполнил, я получил разрешение: 1232 –

0

Это, вероятно, не работает, потому что вы конвертируете в целочисленное значение, когда вы делаете $excel_file_permission = (int)$ini_array['excel_file_info']['excel_file_permission'];. Целое число не совпадает с восьмеричным значением ...

Смежные вопросы