Сломал голову, помогите пожалуйста решить проблему. У меня есть небольшой скрипт, который выполняет php exec команду с каталогами на сетевом ресурсе. Структура проекта:
.htaccess
Controller.php
Config.php
FolderReader.class.php
public/ index.php
script.js
Простой пример:
На пользовательской странице index.php
c заголовком
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
в директории public через js я получаю значение в input и отправляю в php-файл контроллер post запрос по Ajax
В Ajax дополнительно указываю параметр scriptCharset: "utf-8"
;
(Пробовал и без указания, но разницы никакой), отправляется к примеру переменная number=1234;
В файле контроллера принимаю:
if (isset($_POST['number']) && !empty($_POST['number'])){
$project = $_POST['number'];
//создается объект и выполняется его метод
$finder = new FolderReader($project);
$data = $finder->permissionSetter();
//данные возвращаются на страницу
echo json_encode($data);
Есть несколько промежуточных методов которые выполняют валидацию, перед созданием объекта, но это сейчас не важно.
Что делает метод permissionSetter(): Он считывает каталог, и выполняет exec команду на всех дочерних папках. Если выполнять ее в терминале windows - выглядит она так
icacls "\\10.0.7.41\project\1111_Project\1111_01_Каталог" /inheritance:e /T
или
icacls "\\10.0.7.41\project\1111_Project\1111_02_Каталог" /inheritance:e /T
или
icacls "\\10.0.7.41\project\1111_Project\1111_03_AnyFolder" /inheritance:e /T
Где в цифры 1111 в \1111_Project\ это number из post.(как в промежутке получается полный путь думаю тоже не важно). В методе permissionSetter я перебираю массив с папками и для каждой папки выполняю exec. Полный код метода :
public function permissionSetter()
{
if (!empty($this->foldersForRewting)){
$paths = $this->foldersForRewting;
foreach ($paths as $path){
$command = 'icacls ' . ' "' . $path . '"" ' . '/inheritance:e /T';
$this->data['messages']['execCommand'][] = $command;
if (exec($command,$this->data['messages']['execSystem'][]))
{
$this->data['messages']['execSuccess'][] = 'Разрешения на каталог: '. $path .' установлены';
} else {
$this->data['messages']['execFail'][] = 'Ошибка установки разрешений: '. $path;
}
}
} else {
$this->data['messages']['errors'] = 'You try call setting permission on empty array';
}
return $this->data;
}
Результат выполнения метода записываю в результирющуу переменную $data(ассоциативный массив с логами происходящего) в контроллере и отдаю обратно через echo json_encode($data);
в Ajax
Что я получаю в консоли, если использую Ajax:
Моя exec команда отрабатывает, но только с каталогами и файлами с ЛАТИНИЦЕЙ в названии. По всем остальным элементам массива я получаю null, и соответственно фактически exec отрабатывает только на каталогах и файлах с латиницей
Если я проделываю тоже самое без применения ajax, и просто вывожу дамп массива на страницу, напрямую из контроллера
echo <pre>;
print_r($data);
echo </pre>;
То получаю следующее
Мои exec команды выполняются на всех каталогах в папках, но в браузере я снова получаю иероглифы. (P/S полные пути в exec я оборачиваю в кавычки и слеши экранирую)
Я перепроверил кодировку всех своих файлов через notepad++, везде UTF-8 без BOM. В файле http.conf я прописал в конце AddDefaultCharset utf-8. В .htaccess в каталоге рядом с public директорией прописал AddCharset utf-8 .html .php .js .css .txt
Подскажите что я делаю не так?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Нужно что бы при авторизации были три поля username, password, id_companyИ при авторизации id_company это был префикс базы данных
тестирую на PHP загружается ли изображение на сервер:
У меня сложилась такая ситуация у меня есть форма в которой нужно получить id, а потом с этой id сделать запрос в БД
При помощи приложения Postman проверяю следующий код: