Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 119 комментариев

Николай Савин
Николай Савин
Шифрование исходного кода PHP может быть полезно для защиты интеллектуальной собственности или предотвращения несанкционированного доступа к коду. Однако стоит учитывать, что полная защита исходного кода невозможна, так как PHP выполняется на стороне сервера, и расшифрованный код должен быть доступен для интерпретатора. Тем не менее, вот несколько способов, которые могут помочь затруднить чтение исходного кода:

1. Использование инструментов для обфускации кода

Обфускация — это процесс преобразования исходного кода в трудночитаемую форму, сохраняя его функциональность. Существуют инструменты, которые могут обфусцировать PHP-код:

PHP Obfuscator: Инструменты вроде PHP Obfuscator или ionCube PHP Obfuscator могут преобразовать код в нечитаемый вид.
YAK Pro: Бесплатный инструмент для обфускации PHP-кода.

Пример использования:
php yakpro-po.php your_script.php -o obfuscated_script.php
2. Шифрование с помощью ionCube или Zend Guard
Эти коммерческие инструменты позволяют зашифровать PHP-код и запускать его с помощью специального расширения на сервере.
  • ionCube: Шифрует код и требует установки ionCube Loader на сервере.
  • Zend Guard: Аналогично ionCube, шифрует код и требует Zend Optimizer.
Пример использования ionCube:

ioncube_encoder your_script.php -o encrypted_script.php
3. Использование base64_encode и eval
Этот метод не является надежным, но может затруднить чтение кода. Код кодируется в base64, а затем декодируется и выполняется с помощью eval.
Пример:

<?php
$code = '<?php echo "Hello, World!"; ?>';
$encoded = base64_encode($code);
eval(base64_decode($encoded));
?>
4. Самописное шифрование

Вы можете написать собственный алгоритм шифрования и расшифровки кода. Однако это требует глубоких знаний в криптографии и может быть ненадежным.
Пример:

<?php
function encrypt($code, $key) {
    return openssl_encrypt($code, 'AES-128-CBC', $key);
}

function decrypt($encrypted, $key) {
    return openssl_decrypt($encrypted, 'AES-128-CBC', $key);
}

$code = '<?php echo "Hello, World!"; ?>';
$key = 'your_secret_key';
$encrypted = encrypt($code, $key);
eval(decrypt($encrypted, $key));
?>
5. Использование PHP-расширений

Вы можете написать собственное PHP-расширение на C, которое будет содержать зашифрованный код. Это требует навыков программирования на C и работы с PHP API.

Важные замечания:

  • Производительность: Шифрование и расшифровка кода могут замедлить выполнение скрипта.
  • Безопасность: Ни один метод не обеспечивает 100% защиту. Злоумышленник с достаточными знаниями и временем может декомпилировать или расшифровать код.
  • Лицензирование: Убедитесь, что использование инструментов шифрования соответствует лицензионным соглашениям
Выбор метода зависит от ваших требований к безопасности, бюджета и уровня сложности, который вы готовы принять.
Николай Савин
Николай Савин
Вот так привязать к шаблонам.

$templates = array(1, 2); 
if(in_array($modx->controller->resource->get('template'), $templates)) {
	$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function() {
if(MODx.loadRTE) MODx.loadRTE("modx-resource-introtext");
});</script>');
};
Вот так выводить для указанных шаблонов, и плюс отдельно для указанных ID.

$templates = array(1, 2); 
$ids = [112, 113];
if(

in_array($modx->controller->resource->get('template'), $templates) 
||  in_array($modx->controller->resource->get('id'), $ids) 
) {
	$modx->regClientStartupHTMLBlock('<script>Ext.onReady(function() {
if(MODx.loadRTE) MODx.loadRTE("modx-resource-introtext");
});</script>');
};
Серый
Серый
Хотелось бы «заклинание» и для шаблонов, а не только для конкретных ресурсов + комбинированно и номера шаблонов, и ресурсов — такой код можно будет считать законченным.
Поторопился я, видимо со своим «ух, класс...»
Подскажите пожалуйста, заранее благодарю!
Николай Савин
Николай Савин
У работы нет стоимости, она у есть у исполнителя.
Соответственно зависит от того, кто будет делать.
Ну, а дальше уже нюансы. Что за файл, откуда он берется. Готовый он или нужно генерировать. Куда, когда отсылать, при каких условиях и т.п.
Ruslan
Ruslan
@Артур Шевченко Помогите пожалуйста, никак не могу понять с этой фильтрацией по множественным параметрам.

1) По какой то причине когда я нахожусь на какой либо странице по пагинации (например на пятой page=5), и нажимаю на параметр для фильтрации, он фильтрует, но почему не сбрасывает пагинацию, а подгружает последнюю страницу результатов поиска и в УРЛ тоже показывает последнюю страницу (например страницу?page=2). Но так же заметил в консоли, что по какой-то причине он добавляет параметр offset. Из за которой он пропускает какие то страницы и выдаёт сообщение о пустом результате поиска.

2) Я использую в вызове снипета параметр "'hashParams' => 'building_status,property_rooms'," я так предполагал что этот параметр помогает при фильтрации так же в УРЛ автоматически записывать GET запросы фильтрации, так же как и пагинации. Я ошибаюсь?
Если ошибаюсь можете подсказать каким образом можно сделать так, что бы параметры фильтров тоже в УРЛ появлялись?
Алексей Соин
Алексей Соин
Уже есть хорошее и гибкое решение(devilbox), которое хорошо документировано и постоянно актуализируется, есть возможность запуска не только разных версий пхп, но и приложений на других яп, например nodejs.

P.S. это не в упрёк к твоему варианту, а в тему того, что есть решение поддерживаемое сообществом и у которого есть документация.
Prihod
Prihod
Для PHP 8 по запросу через тикет (так как modstore.pro до сих пор не поддерживает одновременно разные версии php ) доступна новая версия пакета.

## [2.1.2-pl] — 2025-01-07

### Добавлено
— Метод execSql в классе MsIeTools
— Поддержка TSV формата файла импорта/экспорта
— Экспорт ресурсов типа «Ссылка», «Символическая ссылка» и «Статичный ресурс»
— Для задачи в менеджере задач кнопку открытия окна импорта/экспорта с уже выбранными параметрами
— Виджет «Менеджер задач»
— Опция «Высота виджета» (msimportexport_widget_height)
— В пресете импорта опции для Excel:
«Пропускать листы»
«Использовать только первый лист»

### Исправлено
— Статус задачи: Убита (killed)
— Обновление TV в сервисах быстрого обновления
— Проверка алиаса на уникальность
— Импорт фото по ссылке с пробелом в названии
— Сброс всего кэша ресурсов при каждой итерации импорта документов modx