2010-11-04 26 views
0

Ok test 1 et 2 fonctionnent très bien, mais si je lance la valeur à partir d'un tableau, cela ne fonctionne pas.chmod définir la valeur des autorisations de façon dynamique

$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"; 

Sortie:

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

Pourquoi pas ce travail?

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

je reçois ce fichier pour les autorisations:

// 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 œuvres, mais pas encore l'exemple principal. POUAH!!!

EDIT # 2:

Je pense avoir trouvé le problème, quand je fais l'écho du type de la variable c'est une chaîne.

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 

Pourquoi est-ce?

Répondre

1

Je pense que le typage est à l'origine du problème. Essayez de changer:

$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

je l'ai changé et il ne fonctionne toujours pas –

+0

Quelle est votre valeur actuelle pour ini_array $ [ 'excel_file_info'] [ 'excel_file_permission']? essayez de mettre la valeur comme '0777' ou '0644' ou toute autre valeur d'autorisation que vous voulez. – subosito

+0

Dans l'ini j'ai changé la valeur à 0666, quand le script exécute j'obtiens l'autorisation: 1232 –

0

Cela ne fonctionne probablement pas parce que vous convertissez en une valeur entière lorsque vous faites $excel_file_permission = (int)$ini_array['excel_file_info']['excel_file_permission'];. Un entier n'est pas la même chose qu'une valeur octale ...