Да он заменяет, но не во всех каталогах. Возможно это связано с группой к которой принадлежит каталог или файл или надо 777 задать каталогам до замены файлов PHP функцией chomd ((.
Поэтому пошел в лоб через exec - UNIX команду заюзал, она всё топорно заменяет.
Цель была написать замену пермишинс директорий и файлов от корня вверх рекурсивно. На нужные, исключая некоторые файлы и каталоги. Вроде корректно заменяет - вот загвоздка в том что хотел осуществить ещё проверку факта замены на лету, но не получается. Поэтому удалил сейчас эти условия.
<?php
//Scrypt work with function EXEC !!!
//1. Set Chmods for Dirs and Files
//2. Add or delete STOP Dirs and Files {Files no Set Mods}
//3. Load in Root of
http://domain.com/ch.php
//4. Run Scrypt
///INI
$dir_chmod = 777; //Directories format Ex. 777
$files_chmod = 755; //Files format Ex.766
//Propuskaem eti catalogi i files
$stop_dirs = 'cache, tmp'; //No ChMod Dirs ! Add ONE DIR IN STOP Array For Correct... Ex . ZZZZZZZZ;
$stop_files = 'ch.php, a_name_stop.ini, b_name_stop.ini'; //No ChMod Files - 1 or More Files To Correct Work Ex. zzzzzzz.txt
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: " . date("r"));
echo "<h1>", date("H:i:s"), "</h1>";
checkExecFunction();
getDirList();
setPermissionFiles($all_data, $files_chmod, $stop_files, $stop_dirs, $dir_chmod);
setPermissionDirs($all_data, $dir_chmod, $stop_dirs);
echo "OK" . "<br>";
function getDirList()
{
global $all_data;
$dirs_array = glob('*', GLOB_ONLYDIR);
//print_r ( $dirs_array);
foreach ($dirs_array as $work_dir) {
$root_dirs = $root_dirs . ":::" . $work_dir;
$scan_result = makeScanDirs($work_dir);
// echo $scan_result;
}
$all_data = $root_dirs . $all_data;
}
function makeScanDirs($work_dir)
{
global $all_data;
$dirs_array = glob($work_dir . '/*', GLOB_ONLYDIR); {
foreach ($dirs_array as $dir_name) {
makeScanDirs($dir_name);
// echo $dir_name . "\n";
$all_data = $all_data . ':::' . $dir_name;
}
}
}
function setPermissionDirs($all_data, $dir_chmod, $stop_dirs)
{
echo "<h2> DIRS </h2>";
$i = 0;
$dirs = explode(':::', $all_data);
foreach ($dirs as $dir_name) {
$dir_str_size = strlen($dir_name);
// $flag_dir =
if ($dir_str_size > 0) {
$dir_len = strlen($dir_name);
$dir_array[$i] = $dir_len . ':' . $dir_name;
$i++;
}
}
natsort($dir_array);
//print_r ( $dir_array);
$k = 0;
foreach ($dir_array as $new_dr) {
$dir_array_ex = explode(':', $new_dr);
$dir_array_work[$k] = $dir_array_ex[1];
$k++;
}
$z = count($dir_array_work);
$i = 0;
foreach ($dir_array_work as $dir_name_temp) {
$sort_dir_array[$i] = $dir_array_work[$z - 1];
$i++;
$z--;
}
//Chmod
foreach ($sort_dir_array as $directory_name) {
$stop_flag = checkStop($object = $directory_name, $stop_str = $stop_dirs);
if ($stop_flag != "stop") {
exec('chmod ' . $dir_chmod . " " . $directory_name);
echo $directory_name . " " . $dir_chmod . "<br>";
}
if ($stop_flag == "stop") {
echo $directory_name . " NO REPLACE.. OK?" . "<br>";
}
}
}
function setPermissionFiles($all_data, $files_chmod, $stop_files, $stop_dirs, $dir_chmod)
{
echo "<h2> FILES </h2>";
hta_PermReplace($files_chmod, $stop_files);
rootPermReplace($files_chmod, $stop_files);
$dirs = explode(':::', $all_data);
foreach ($dirs as $dir_name) {
$dir_str_size = strlen($dir_name);
$stop_flag = checkStop($object = $dir_name, $stop_str = $stop_dirs);
if ($dir_str_size > 0 and $stop_flag != 'stop') {
// echo $dir_name . "\n";
$perms1 = substr(sprintf('%o', fileperms($dir_name)), -4);
$files_array = glob($dir_name . "/*.*");
foreach ($files_array as $file_name) {
$stop_flag = checkStop($object = $file_name, $stop_str = $stop_files);
if ($stop_flag == 'stop') {
echo $file_name . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != 'stop') {
// echo $file_name . "\n";
$perms1 = substr(sprintf('%o', fileperms($file_name)), -4);
exec('chmod ' . $files_chmod . " " . $file_name);
echo $file_name . " " . $files_chmod . "<br>";
}
}
}
}
}
function checkStop($object, $stop_str)
{
$stop_array = explode(",", $stop_str);
foreach ($stop_array as $stp_component) {
$pos = strpos(" " . $object, trim($stp_component));
if ($pos > 1) {
$flag = 'stop';
// echo $object . "!!!!!!!!!!!!!!!!"."\n" ;
return $flag;
}
}
}
function rootPermReplace($files_chmod, $stop_files)
{
$root_files = array_filter(glob("*"), 'is_file');
//$root_files = glob ('*');
foreach ($root_files as $root_file_name) {
$stop_flag = checkStop($object = $root_file_name, $stop_str = $stop_files);
if ($stop_flag == "stop") {
echo $root_file_name . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != "stop") {
exec('chmod ' . $files_chmod . " " . $root_file_name);
echo $root_file_name . " " . $files_chmod . "<br>";
}
}
}
function hta_PermReplace($files_chmod, $stop_files)
{
$filename = '.htaccess';
if (file_exists($filename)) {
$stop_flag = checkStop($object = $filename, $stop_str = $stop_files);
if ($stop_flag == "stop") {
echo $filename . " NO REPLACE.. OK?" . "<br>";
}
if ($stop_flag != "stop") {
exec('chmod ' . $files_chmod . " " . $filename);
echo $filename . " " . $files_chmod . "<br>";
}
}
}
function checkExecFunction()
{
exec ('ls > exec.txt');
$filename = 'exec.txt';
$flag = "no_exec";
if (file_exists($filename)) {
echo 'Exec function Present in Sever Config! - OK <br>';
echo 'WORK...<br>';
exec ('rm exec.txt');
$flag = "exec";
}
if ($flag == "no_exec")
{
echo "Warning! Activate Exec function or ROOT / Directory not Writable";
exit;
}
}
?>